
Base URL: https://api.inwista.ai/v1Opprett 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…"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": "…" } }| Status | Kode | Når |
|---|---|---|
| 401 | invalid_api_key | Autentisering mislyktes (uansett årsak) |
| 400 | invalid_source_url | Ikke https, påloggingsinformasjon i URL-en, privat vert eller feilformatert |
| 400 | invalid_language | Mangler eller er ikke en ISO 639-1-kode |
| 400 | invalid_num_speakers | Ikke et heltall mellom 1 og 32 |
| 400 | invalid_store_media | Ikke en boolsk verdi |
| 400 | invalid_retention | Ikke "standard" eller "none", eller kombinert med store_media true |
| 400 | invalid_metadata | Ikke et objekt, eller over 1 KB |
| 400 | invalid_settings | Ikke et objekt, eller over 2 KB |
| 400 | unreadable_source | Varigheten på mediefilen kunne ikke fastslås |
| 400 | invalid_cursor | starting_after er ikke en kjent id |
| 400 | invalid_format | Undertekstformatet støttes ikke |
| 402 | insufficient_credits | Kredittsaldoen dekker ikke kostnaden |
| 404 | not_found | Ukjent ressurs |
| 404 | translation_not_found | Det forespurte språket har ingen fullført oversettelse for versjonen som leveres |
| 409 | not_ready | Krever en fullført transkribering |
| 409 | operation_in_progress | En forbedring er fortsatt under behandling |
| 409 | translation_exists | Språket finnes allerede for denne versjonen |
| 400 | invalid_idempotency_key | Idempotency-Key-headeren er tom eller over 255 tegn |
| 400 | idempotency_key_reused | Idempotency-Key er allerede brukt for en annen forespørsel |
| 409 | idempotency_conflict | En forespørsel med denne nøkkelen behandles fortsatt |
| 429 | rate_limited | For mange forespørsler — prøv igjen etter Retry-After-headeren |
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" }'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": "…" } }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.
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 }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.
/v1/transcriptionsGjø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
| Felt | Type | Beskrivelse |
|---|---|---|
source_urlpåkrevd | string | Offentlig https-URL til mediefilen, eller en YouTube-/TikTok-/Vimeo-URL |
languagepåkrevd | string | ISO 639-1-kode, f.eks. "en" eller "nb-NO" |
diarization | boolean | Talermerking (standard false) |
num_speakers | integer | 1–32, hint til talermerkingen |
store_media | boolean | false = kun transkripsjon: ingen avspillingsfiler klargjøres (standard true) |
retention | string | "none" sletter kildemediet etter transkriberingen — transkripsjonen beholdes (standard "standard") |
metadata | object | Dine 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
}/v1/transcriptionsAvstem 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
| Felt | Type | Beskrivelse |
|---|---|---|
limit | integer | Sidestørrelse, standard 25, maks 100 |
starting_after | string | Peker: siste id fra forrige side |
curl "https://api.inwista.ai/v1/transcriptions?limit=10" \
-H "Authorization: Bearer inw_live_…"/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
}/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
}/v1/transcriptions/{id}/captionsHent 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
| Felt | Type | Beskrivelse |
|---|---|---|
formatpåkrevd | string | srt, vtt, json eller txt |
diarization | "true" | Sett talermerking foran linjene |
language | string | Lever en fullført oversettelse i stedet for kilden; 404 translation_not_found hvis den ikke finnes for versjonen som leveres |
revision | string | Hent é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.srtjson-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.
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.
/v1/transcriptions/{id}/enhanceTiming 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
| Felt | Type | Beskrivelse |
|---|---|---|
settings | object | Studioets forbedringsinnstillinger, opptil 2 KB; utelat for standardinnstillinger |
Innstillinger for forbedring
| Felt | Type | Beskrivelse |
|---|---|---|
maxLinesPerBlock | "1" | "2" | Antall linjer som vises samtidig; kringkastingsstandard og standardvalg er 2 |
maxCharactersPerLine | 1–100 | Tegn per linje; kringkastingsstandard og standardvalg er 42 |
blockLineBalancing | bottom_heavy | top_heavy | equal | unconstrained | Visuell form på blokker med to linjer; standard er unconstrained |
textCondensation | none | smart | aggressive | Lar AI-en komprimere dialog som leses for raskt; standard er none (ordrett) |
speakerDialogueFormat | none | hyphens | speaker_name | brackets | Hvordan flere talere i samme blokk skilles fra hverandre; standard er none |
continuationMarkers | none | end | start | both | Plassering av markør når en setning går over flere blokker; standard er none |
continuationMarkerStyle | dash | ellipsis | Tankestrek eller ellipse for delte setninger; standard er dash |
gapBetweenBlocks | none | broadcasting | streaming | sdh | Tvungen tom pause mellom påfølgende blokker; standard er broadcasting (~99 ms) |
minBlockDuration | 0.1–60 s | Korteste tid en blokk vises på skjermen, i sekunder; standard er 1.0 |
maxBlockDuration | > min | Lengste 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
}/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_…"Oversettelse av undertekster der timingen arves fra kilden — én oversettelse per språk per undertekstversjon. Krever en fullført transkribering.
/v1/transcriptions/{id}/translateEtt 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
| Felt | Type | Beskrivelse |
|---|---|---|
target_languagepåkrevd | string | ISO 639-1-kode, f.eks. "es" |
target_label | string | Visningsnavn, 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
}/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.vttSett 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 bruker informasjonskapsler for å forstå hvordan Inwista brukes, og for å måle annonseringen vår. Personvernerklæring · Om informasjonskapsler