Inwista API er her
Overlay

API-referanse

Transkriber, forbedre og oversett undertekster programmatisk. Basis-URL, autentisering, hvert endepunkt og hver feilkode — alt på én side.
Base URL: https://api.inwista.ai/v1

Autentisering

Opprett en API-nøkkel i Dashboard → API Keys (kun administratorer i arbeidsområdet). Nøkkelen vises bare én gang — oppbevar den som et passord.

Send nøkkelen som Bearer-token i hver forespørsel. Hver nøkkel hører til ett arbeidsområde: alt API-et returnerer, tilhører det. Ressurser opprettet via API-et er synlige i dashbordet, men dashbordprosjekter er ikke tilgjengelige gjennom API-et.

Alle autentiseringsfeil — manglende header, ukjent nøkkel, tilbakekalt nøkkel — gir samme 401-respons.

curl https://api.inwista.ai/v1/transcriptions \
  -H "Authorization: Bearer inw_live_4f6a…"

Feil

Alle feil bruker én og samme konvolutt: et objekt med en maskinlesbar kode og en menneskelesbar melding. Innenfor v1 kommer det bare nye koder til — eksisterende endres ikke. Bygg på koden, ikke meldingen.

{ "error": { "code": "insufficient_credits", "message": "…" } }
StatusKodeNår
401invalid_api_keyAutentisering mislyktes (uansett årsak)
400invalid_source_urlIkke https, påloggingsinformasjon i URL-en, privat vert eller feilformatert
400invalid_languageMangler eller er ikke en ISO 639-1-kode
400invalid_num_speakersIkke et heltall mellom 1 og 32
400invalid_store_mediaIkke en boolsk verdi
400invalid_retentionIkke "standard" eller "none", eller kombinert med store_media true
400invalid_metadataIkke et objekt, eller over 1 KB
400invalid_settingsIkke et objekt, eller over 2 KB
400unreadable_sourceVarigheten på mediefilen kunne ikke fastslås
400invalid_cursorstarting_after er ikke en kjent id
400invalid_formatUndertekstformatet støttes ikke
402insufficient_creditsKredittsaldoen dekker ikke kostnaden
404not_foundUkjent ressurs
404translation_not_foundDet forespurte språket har ingen fullført oversettelse for versjonen som leveres
409not_readyKrever en fullført transkribering
409operation_in_progressEn forbedring er fortsatt under behandling
409translation_existsSpråket finnes allerede for denne versjonen
400invalid_idempotency_keyIdempotency-Key-headeren er tom eller over 255 tegn
400idempotency_key_reusedIdempotency-Key er allerede brukt for en annen forespørsel
409idempotency_conflictEn forespørsel med denne nøkkelen behandles fortsatt
429rate_limitedFor mange forespørsler — prøv igjen etter Retry-After-headeren

Idempotens

Hvert POST-kall belaster kreditter når det godtas, så en forespørsel som får tidsavbrudd og prøves blindt på nytt, ville skapt en ny jobb og et nytt trekk. Send en Idempotency-Key-header (en valgfri unik streng på inntil 255 tegn), så blir nye forsøk trygge: svaret på den første forespørselen lagres i 24 timer og returneres uendret for hvert nytt forsøk med samme nøkkel.

Gjenbruk av en nøkkel med en annen forespørsel gir 400 idempotency_key_reused; et nytt forsøk mens den første fortsatt kjører gir 409 idempotency_conflict. Feilsvar lagres aldri — en mislykket forespørsel beholder aldri trekket, så nøkkelen frigjøres for et rent nytt forsøk.

curl -X POST https://api.inwista.ai/v1/transcriptions \
  -H "Authorization: Bearer inw_live_…" \
  -H "Idempotency-Key: order-42-transcribe" \
  -H "Content-Type: application/json" \
  -d '{ "source_url": "…", "language": "en" }'

Forespørselsgrenser

Hver API-nøkkel kan gjøre 300 leseforespørsler (GET) og 60 skriveforespørsler (POST) per minutt. Kvoten fylles på kontinuerlig og kan brukes på én gang. Over grensen svarer API-et med 429 rate_limited og en Retry-After-header i sekunder.

Se på tallene som omtrentlige: trapp ned når du får 429, og foretrekk webhooks fremfor hyppig polling.

HTTP/1.1 429 Too Many Requests
Retry-After: 12

{ "error": { "code": "rate_limited", "message": "…" } }

Kreditter

Operasjoner måles i kreditter fra arbeidsområdets forhåndsbetalte saldo (fyll på i Dashboard → Billing). Transkribering koster 4 kreditter per påbegynte minutt med media. Forbedring og oversettelse prises etter innholdsmengden — samme satser som i studioet. Henting, listevisning og statussjekk er gratis.

Belastningen skjer når forespørselen godtas. Hvis en operasjon feiler, refunderes beløpet automatisk, og ressursen viser credits_charged: 0. En 402-avvisning belaster aldri noe.

Paginering

Listeendepunkter tar limit (standard 25, maks 100) og starting_after — siste id fra forrige side. Responsene pakker resultatene inn i et listeobjekt med has_more.

{ "object": "list", "data": [ … ], "has_more": true }

Transkriberinger

Send inn media via URL, spør jevnlig til status er completed (eller bruk webhooks), og hent deretter undertekstene. Statusene er processing, completed og failed. Tidsstempler er unix-sekunder.

Statussjekk og resultat deler ett endepunkt: GET /v1/transcriptions/{id} er både der du følger med på status OG der den ferdige ressursen ligger — det finnes ikke noe eget resultatendepunkt. Det eneste unntaket er selve undertekstfilene, som alltid hentes fra captions-endepunktet fordi de er rått filinnhold, ikke JSON.

Opprett en transkribering

POST/v1/transcriptions

Gjør en hvilken som helst mediefil på nett om til presise undertekster med tidsstempler, uten at noen åpner studioet — koble API-et rett på CMS-et, arkivet eller publiseringsflyten din.

Varigheten på mediet måles før forespørselen godtas; saldoen belastes og jobben legges i kø i ett atomisk steg. Returnerer 201 med transkriberingsressursen.

Kreditter: 4 kreditter per påbegynte minutt med media, belastet når jobben godtas. Mislykkede jobber refunderes automatisk.

Body

FeltTypeBeskrivelse
source_urlpåkrevdstringOffentlig https-URL til mediefilen, eller en YouTube-/TikTok-/Vimeo-URL
languagepåkrevdstringISO 639-1-kode, f.eks. "en" eller "nb-NO"
diarizationbooleanTalermerking (standard false)
num_speakersinteger1–32, hint til talermerkingen
store_mediabooleanfalse = kun transkripsjon: ingen avspillingsfiler klargjøres (standard true)
retentionstring"none" sletter kildemediet etter transkriberingen — transkripsjonen beholdes (standard "standard")
metadataobjectDine egne merkelapper, opptil 1 KB, returneres ordrett
curl -X POST https://api.inwista.ai/v1/transcriptions \
  -H "Authorization: Bearer inw_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "source_url": "https://cdn.example.com/interview.mp4",
    "language": "en",
    "diarization": true
  }'

Respons

{
  "id": "aB3dE9f2…",
  "object": "transcription",
  "status": "processing",
  "progress": 50,
  "language": "en",
  "duration_seconds": 1834,
  "diarization": true,
  "store_media": true,
  "retention": "standard",
  "source_url": "https://cdn.example.com/interview.mp4",
  "metadata": { "internal_ref": "case-42" },
  "credits_charged": 124,
  "error": null,
  "created": 1754558000
}

List opp transkriberinger

GET/v1/transcriptions

Avstem katalogen din mot behandlede jobber, eller bygg et dashbord over alt du har transkribert.

Transkriberinger opprettet via API-et, nyeste først. Standard paginering.

Kreditter: Gratis.

Spørringsparametere

FeltTypeBeskrivelse
limitintegerSidestørrelse, standard 25, maks 100
starting_afterstringPeker: siste id fra forrige side
curl "https://api.inwista.ai/v1/transcriptions?limit=10" \
  -H "Authorization: Bearer inw_live_…"

Hent en transkribering

GET/v1/transcriptions/{id}

Både fremdriftssjekk og endelig resultat: se status skifte til completed, og les deretter varighet, språk og kredittbelastning fra samme respons.

Spør jevnlig til status er completed (eller registrer en webhook, se nedenfor). Å lese en mislykket transkribering utløser også den automatiske refusjonen.

Kreditter: Gratis.

curl https://api.inwista.ai/v1/transcriptions/aB3dE9f2… \
  -H "Authorization: Bearer inw_live_…"

Respons

{
  "id": "aB3dE9f2…",
  "object": "transcription",
  "status": "processing",
  "progress": 50,
  "language": "en",
  "duration_seconds": 1834,
  "diarization": true,
  "store_media": true,
  "retention": "standard",
  "source_url": "https://cdn.example.com/interview.mp4",
  "metadata": { "internal_ref": "case-42" },
  "credits_charged": 124,
  "error": null,
  "created": 1754558000
}

Slett en transkripsjon

DELETE/v1/transcriptions/{id}

Slett en jobb på forespørsel — full kontroll over egne data i ett kall.

Sletter transkripsjonen permanent med alt som er lagret for den: mediefiler, transkripsjonsinnhold, revisjoner, oversettelser og kommentarer. Aggregerte faktureringstellere beholdes — de inneholder ikke innhold.

Bare fullførte eller feilede jobber kan slettes; en jobb som fortsatt behandles returnerer 409, det samme gjør en med en pågående forbedring eller oversettelse. Slettingen er umiddelbar og kan ikke angres.

Kreditter: endpoints.delete-transcription.pricing

curl -X DELETE https://api.inwista.ai/v1/transcriptions/aB3dE9f2… \
  -H "Authorization: Bearer inw_live_…"

Respons

{
  "id": "aB3dE9f2…",
  "object": "transcription",
  "deleted": true
}

Hent undertekster

GET/v1/transcriptions/{id}/captions

Hent kringkastingsklare undertekstfiler rett inn i avspilleren, MAM-systemet eller leveranseflyten din — ingen manuelle eksporter, ingen formatkonvertering på din side. I en videoproduksjonsflyt lander ferdig SRT eller VTT rett i klippeprogrammet, gjennomgangsverktøyet eller pakkesteget i det øyeblikket et klipp er transkribert.

Returnerer det rå filinnholdet med riktig Content-Type — ikke pakket inn i JSON. Svarer 409 not_ready til transkriberingen er fullført.

Kreditter: Gratis.

Spørringsparametere

FeltTypeBeskrivelse
formatpåkrevdstringsrt, vtt, json eller txt
diarization"true"Sett talermerking foran linjene
languagestringLever en fullført oversettelse i stedet for kilden; 404 translation_not_found hvis den ikke finnes for versjonen som leveres
revisionstringHent én bestemt versjon (en forbedrings-id er dens revisjons-id); utelatt = nyeste
curl "https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/captions?format=srt" \
  -H "Authorization: Bearer inw_live_…" -o interview.srt

json-formatet er en versjonert kontrakt: { version: 1, language, segments: [{ index, start, end, text, speaker? }] } — sekunder med millisekundpresisjon, og felter blir bare lagt til innenfor en versjon, aldri fjernet.

Oversettelser hører til versjonen de ble laget for — oversettelsesressursens revision_id angir den, og versjonen fra en senere forbedring arver dem ikke. Send denne revision_id-en som revision for å hente den oversatte versjonen.

Forbedringer

AI-forbedring av undertekster — linjelengde, balansering og regler for timing — som gir en ny versjon av undertekstene. Krever en fullført transkribering. Når en forbedring er fullført, leverer captions-endepunktet automatisk den forbedrede versjonen.

Start en forbedring

POST/v1/transcriptions/{id}/enhance

Timing og linjebalansering i kringkastingskvalitet, på autopilot — lever undertekster som består kvalitetskontrollen uten at noen må redigere dem manuelt. For produksjonsselskaper automatiserer dette tilpasningen av undertekster i leveranseflyten: hver episode leveres med konsekvente undertekster som følger spesifikasjonen.

Returnerer 202 med forbedringsressursen.

Kreditter: Beregnes ut fra størrelsen på undertekstinnholdet, etter samme sats som i studioet, og trekkes når jobben godtas. Refunderes automatisk ved feil.

Body

FeltTypeBeskrivelse
settingsobjectStudioets forbedringsinnstillinger, opptil 2 KB; utelat for standardinnstillinger

Innstillinger for forbedring

FeltTypeBeskrivelse
maxLinesPerBlock"1" | "2"Antall linjer som vises samtidig; kringkastingsstandard og standardvalg er 2
maxCharactersPerLine1–100Tegn per linje; kringkastingsstandard og standardvalg er 42
blockLineBalancingbottom_heavy | top_heavy | equal | unconstrainedVisuell form på blokker med to linjer; standard er unconstrained
textCondensationnone | smart | aggressiveLar AI-en komprimere dialog som leses for raskt; standard er none (ordrett)
speakerDialogueFormatnone | hyphens | speaker_name | bracketsHvordan flere talere i samme blokk skilles fra hverandre; standard er none
continuationMarkersnone | end | start | bothPlassering av markør når en setning går over flere blokker; standard er none
continuationMarkerStyledash | ellipsisTankestrek eller ellipse for delte setninger; standard er dash
gapBetweenBlocksnone | broadcasting | streaming | sdhTvungen tom pause mellom påfølgende blokker; standard er broadcasting (~99 ms)
minBlockDuration0.1–60 sKorteste tid en blokk vises på skjermen, i sekunder; standard er 1.0
maxBlockDuration> minLengste tid en blokk vises på skjermen, i sekunder; standard er 7.0
curl -X POST https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/enhance \
  -H "Authorization: Bearer inw_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "settings": { "maxCharactersPerLine": 37, "textCondensation": "smart" } }'

Respons

{
  "id": "rev8Xk3…",
  "object": "enhancement",
  "transcription_id": "aB3dE9f2…",
  "status": "processing",
  "progress": 0,
  "credits_charged": 12,
  "error": null,
  "created": 1754559000
}

Hent en forbedring

GET/v1/transcriptions/{id}/enhancements/{enhancementId}

Statussjekk og resultat i ett: når status viser completed, leverer captions-endepunktet allerede den forbedrede versjonen.

Spør jevnlig til status er completed. Å lese en mislykket forbedring utløser den automatiske refusjonen.

Kreditter: Gratis.

curl https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/enhancements/rev8Xk3… \
  -H "Authorization: Bearer inw_live_…"

Oversettelser

Oversettelse av undertekster der timingen arves fra kilden — én oversettelse per språk per undertekstversjon. Krever en fullført transkribering.

Start en oversettelse

POST/v1/transcriptions/{id}/translate

Ett kall per språk gjør et ferdig undertekstspor om til en lokalisert versjon med identisk timing — mangedoble rekkevidden til hver video du allerede har.

Returnerer 202. Svarer 409 translation_exists hvis språket allerede finnes for gjeldende versjon.

Kreditter: Beregnes ut fra størrelsen på undertekstinnholdet, etter samme sats som i studioet, per målspråk, og trekkes når forespørselen godtas. Refunderes automatisk ved feil.

Body

FeltTypeBeskrivelse
target_languagepåkrevdstringISO 639-1-kode, f.eks. "es"
target_labelstringVisningsnavn, opptil 60 tegn
curl -X POST https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/translate \
  -H "Authorization: Bearer inw_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "target_language": "es" }'

Respons

{
  "id": "es",
  "object": "translation",
  "transcription_id": "aB3dE9f2…",
  "target_language": "es",
  "revision_id": "TRkf2nY7…",
  "status": "processing",
  "progress": 0,
  "credits_charged": 6,
  "error": null,
  "created": 1754559600
}

Hent en oversettelse

GET/v1/transcriptions/{id}/translations/{language}

Statussjekk og resultat i ett: når den er completed, henter du den oversatte undertekstfilen fra captions-endepunktet med language-parameteren.

Spør jevnlig til status er completed, og hent deretter de oversatte undertekstene fra captions-endepunktet med spørringsparameteren language.

Kreditter: Gratis.

# Poll the translation resource
curl https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/translations/es \
  -H "Authorization: Bearer inw_live_…"

# Once completed, fetch the translated subtitle file
curl "https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/captions?format=vtt&language=es" \
  -H "Authorization: Bearer inw_live_…" -o interview-es.vtt

Webhooks

Sett opp en webhook i Dashboard → Integrations → Webhook for å motta transcript.completed-hendelser i stedet for å spørre etter status. Payloadene signeres med HMAC-SHA256 (X-Inwista-Signature: sha256=<hex> over den rå meldingskroppen) med signeringshemmeligheten som vises én gang ved oppsett. Fil-URL-ene er forhåndssignerte og utløper etter 24 timer.

{
  "event": "transcript.completed",
  "id": "evt_9f2c…",
  "timestamp": 1754560000,
  "workspaceId": "ws_…",
  "project": {
    "id": "aB3dE9f2…",
    "name": "interview.mp4",
    "language": "en",
    "durationSeconds": 1834
  },
  "files": [
    {
      "format": "srt",
      "name": "interview.srt",
      "mimeType": "application/x-subrip; charset=utf-8",
      "url": "https://…",
      "expiresAt": 1754646400
    }
  ]
}
Vi verdsetter personvernet ditt

Vi bruker informasjonskapsler for å forstå hvordan Inwista brukes, og for å måle annonseringen vår. Personvernerklæring · Om informasjonskapsler