
Base URL: https://api.inwista.ai/v1Opret en API-nøgle i Dashboard → API Keys (kun workspace-administratorer). Nøglen vises kun én gang — opbevar den som en adgangskode.
Send nøglen som bearer-token med hver request. Nøgler er bundet til ét workspace: alt, hvad API'et returnerer, tilhører det. Ressourcer oprettet via API'et er synlige i dashboardet, men dashboard-projekter eksponeres ikke gennem API'et.
Alle autentificeringsfejl — manglende header, ukendt nøgle, tilbagekaldt nøgle — returnerer det samme 401-svar.
curl https://api.inwista.ai/v1/transcriptions \
-H "Authorization: Bearer inw_live_4f6a…"Alle fejl bruger den samme indpakning: et objekt med en maskinlæsbar code og en menneskelæsbar message. Inden for v1 tilføjes der kun nye koder — byg din logik på code, ikke på message.
{ "error": { "code": "insufficient_credits", "message": "…" } }| Status | Kode | Hvornår |
|---|---|---|
| 401 | invalid_api_key | Autentificering mislykkedes (uanset årsag) |
| 400 | invalid_source_url | Ikke https, loginoplysninger i URL'en, privat host eller ugyldigt udformet |
| 400 | invalid_language | Mangler eller er ikke en ISO 639-1-kode |
| 400 | invalid_num_speakers | Ikke et heltal mellem 1 og 32 |
| 400 | invalid_store_media | Ikke en boolesk værdi |
| 400 | invalid_retention | Ikke "standard" eller "none", eller kombineret 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 | Mediets varighed kunne ikke bestemmes |
| 400 | invalid_cursor | starting_after er ikke et kendt id |
| 400 | invalid_format | Undertekstformatet understøttes ikke |
| 402 | insufficient_credits | Saldoen dækker ikke omkostningen |
| 404 | not_found | Ukendt ressource |
| 404 | translation_not_found | Det forespurgte sprog har ingen fuldført oversættelse til den leverede version |
| 409 | not_ready | Kræver en fuldført transskription |
| 409 | operation_in_progress | En forbedring kører stadig |
| 409 | translation_exists | Sproget findes allerede for denne version |
| 400 | invalid_idempotency_key | Idempotency-Key-headeren er tom eller over 255 tegn |
| 400 | idempotency_key_reused | Idempotency-Key er allerede brugt til en anden forespørgsel |
| 409 | idempotency_conflict | En forespørgsel med denne nøgle behandles stadig |
| 429 | rate_limited | For mange forespørgsler — prøv igen efter Retry-After-headeren |
Hvert POST-kald trækker kreditter, når det accepteres, så en forespørgsel der får timeout og blindt prøves igen, ville oprette et nyt job og et nyt træk. Send en Idempotency-Key-header (en vilkårlig unik streng på op til 255 tegn), så bliver gentagne forsøg sikre: svaret på den første forespørgsel gemmes i 24 timer og returneres uændret for hvert nyt forsøg med samme nøgle.
Genbruges en nøgle med en anden forespørgsel, returneres 400 idempotency_key_reused; et nyt forsøg mens originalen stadig kører, returnerer 409 idempotency_conflict. Fejlsvar gemmes aldrig — en fejlet forespørgsel beholder aldrig trækket, så nøglen frigives til et rent nyt forsøg.
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øgle må lave 300 læseforespørgsler (GET) og 60 skriveforespørgsler (POST) i minuttet. Kvoten fyldes løbende op og kan bruges på én gang. Over grænsen svarer API'et med 429 rate_limited og en Retry-After-header i sekunder.
Betragt tallene som omtrentlige: hold igen, når du får 429, og foretræk webhooks frem for hyppig polling.
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{ "error": { "code": "rate_limited", "message": "…" } }Operationer afregnes i credits fra dit workspaces forudbetalte saldo (optank i Dashboard → Billing). Transskription koster 4 credits pr. påbegyndt minut medie. Forbedring og oversættelse prissættes ud fra indholdets størrelse — samme takster som i studiet. Hentning, listning og polling er gratis.
Der trækkes credits, når en request accepteres. Fejler en operation, refunderes beløbet automatisk, og ressourcen viser credits_charged: 0. En 402-afvisning koster aldrig noget.
Liste-endpoints tager limit (standard 25, maks. 100) og starting_after — sidste id fra forrige side. Svar pakker resultaterne ind i et listeobjekt med has_more.
{ "object": "list", "data": [ … ], "has_more": true }Indsend medie via URL, poll indtil completed (eller brug webhooks), og hent derefter underteksterne. Statusserne er processing, completed og failed. Tidsstempler er unix-sekunder.
Polling og resultat deler samme endpoint: GET /v1/transcriptions/{id} er både der, hvor du følger status, OG der, hvor den færdige ressource ligger — der findes ikke et separat resultat-endpoint. Eneste undtagelse er selve undertekstfilerne, som altid hentes fra captions-endpointet, fordi de er rå filindhold, ikke JSON.
/v1/transcriptionsForvandl enhver hostet mediefil til præcise, tidsstemplede undertekster, uden at nogen åbner studiet — og før resultatet direkte ind i dit CMS, arkiv eller din publiceringspipeline.
Mediets varighed aflæses, før requesten accepteres; saldoen trækkes, og jobbet sættes i kø i ét atomart trin. Returnerer 201 med transskriptionsressourcen.
Credits: 4 credits pr. påbegyndt minut medie, trukket når jobbet accepteres. Fejlede jobs refunderes automatisk.
Body
| Felt | Type | Beskrivelse |
|---|---|---|
source_urlpåkrævet | string | Offentlig https-URL til mediefilen, eller en YouTube/TikTok/Vimeo-URL |
languagepåkrævet | string | ISO 639-1-kode, f.eks. "en" eller "nb-NO" |
diarization | boolean | Talermarkeringer (standard false) |
num_speakers | integer | 1–32, hint til diarization |
store_media | boolean | false = kun transskription: ingen afspilningsfiler klargøres (standard true) |
retention | string | "none" sletter kildemediet efter transskriptionen — transskriptionen beholdes (standard "standard") |
metadata | object | Dine egne tags, op til 1 KB, sendes uændret retur |
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
}'Svar
{
"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/transcriptionsAfstem dit katalog mod behandlede jobs, eller byg et dashboard over alt, hvad du har transskriberet.
API-oprettede transskriptioner, nyeste først. Standardpaginering.
Credits: Gratis.
Query-parametre
| Felt | Type | Beskrivelse |
|---|---|---|
limit | integer | Sidestørrelse, standard 25, maks. 100 |
starting_after | string | Cursor: sidste id fra forrige side |
curl "https://api.inwista.ai/v1/transcriptions?limit=10" \
-H "Authorization: Bearer inw_live_…"/v1/transcriptions/{id}Både statuspolling og det endelige resultat: se status skifte til completed, og læs derefter varighed, sprog og trukket beløb fra samme svar.
Poll, indtil status er completed (eller registrér en webhook, se nedenfor). Læsning af en fejlet transskription udløser samtidig dens automatiske refusion.
Credits: Gratis.
curl https://api.inwista.ai/v1/transcriptions/aB3dE9f2… \
-H "Authorization: Bearer inw_live_…"Svar
{
"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}Slet et job på forespørgsel — fuld kontrol over jeres data i ét kald.
Sletter transskriptionen permanent med alt, der er gemt for den: mediefiler, transskriptionsindhold, revisioner, oversættelser og kommentarer. Aggregerede faktureringstællere bevares — de indeholder intet indhold.
Kun fuldførte eller fejlede jobs kan slettes; et job, der stadig behandles, returnerer 409, det samme gør et med en igangværende forbedring eller oversættelse. Sletningen er øjeblikkelig og kan ikke fortrydes.
Credits: endpoints.delete-transcription.pricing
curl -X DELETE https://api.inwista.ai/v1/transcriptions/aB3dE9f2… \
-H "Authorization: Bearer inw_live_…"Svar
{
"id": "aB3dE9f2…",
"object": "transcription",
"deleted": true
}/v1/transcriptions/{id}/captionsTræk broadcast-klare undertekstfiler direkte ind i din player, MAM eller leveringspipeline — ingen manuelle eksporter, ingen formatkonvertering i din ende. I en videoproduktionspipeline lander færdig SRT eller VTT direkte i dit NLE, reviewværktøj eller pakketrin, i samme øjeblik et klip er transskriberet.
Returnerer den rå undertekstfil som body med den tilhørende Content-Type — ikke pakket ind i JSON. Svarer 409 not_ready, indtil transskriptionen er fuldført.
Credits: Gratis.
Query-parametre
| Felt | Type | Beskrivelse |
|---|---|---|
formatpåkrævet | string | srt, vtt, json eller txt |
diarization | "true" | Sæt talermarkeringer foran |
language | string | Servér en fuldført oversættelse i stedet for kildesproget; 404 translation_not_found hvis den ikke findes for den leverede version |
revision | string | Hent én bestemt version (et forbedrings-id er dets revisions-id); udeladt = nyeste |
curl "https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/captions?format=srt" \
-H "Authorization: Bearer inw_live_…" -o interview.srtjson-formatet er en versioneret kontrakt: { version: 1, language, segments: [{ index, start, end, text, speaker? }] } — sekunder med millisekundpræcision, og felter tilføjes kun inden for en version.
Oversættelser hører til den version, de blev oprettet ud fra — oversættelsesressourcens revision_id angiver den, og versionen fra en senere forbedring arver dem ikke. Send dette revision_id som revision for at hente den oversatte version.
AI-forbedring af undertekster — linjelængde, balancering og timingregler — som producerer en ny version af underteksterne. Kræver en fuldført transskription. Når en forbedring er fuldført, leveres den forbedrede version automatisk ved hentning af undertekster.
/v1/transcriptions/{id}/enhanceBroadcast-kvalitet i timing og linjebalancering på autopilot — lever undertekster, der består QC, uden at en redigerer rører dem. For produktionsselskaber automatiserer det conform-trinnet for undertekster i leveringspipelinen: hvert afsnit sendes af sted med ensartede undertekster, der overholder specifikationerne.
Returnerer 202 med forbedringsressourcen.
Credits: Beregnes ud fra undertekstindholdets størrelse til samme takst som i studiet, og trækkes når jobbet accepteres. Refunderes automatisk ved fejl.
Body
| Felt | Type | Beskrivelse |
|---|---|---|
settings | object | Studiets forbedringsindstillinger, op til 2 KB; udelad for standardværdier |
Indstillinger for forbedring
| Felt | Type | Beskrivelse |
|---|---|---|
maxLinesPerBlock | "1" | "2" | Antal linjer der vises samtidig; broadcaststandard og standardvalg er 2 |
maxCharactersPerLine | 1–100 | Tegn pr. linje; broadcaststandard og standardvalg er 42 |
blockLineBalancing | bottom_heavy | top_heavy | equal | unconstrained | Visuel form på blokke med to linjer; standard er unconstrained |
textCondensation | none | smart | aggressive | Lader AI'en komprimere dialog der læses for hurtigt; standard er none (ordret) |
speakerDialogueFormat | none | hyphens | speaker_name | brackets | Hvordan flere talere i samme blok adskilles; standard er none |
continuationMarkers | none | end | start | both | Markørplacering når en sætning strækker sig over flere blokke; standard er none |
continuationMarkerStyle | dash | ellipsis | Tankestreg eller ellipse for delte sætninger; standard er dash |
gapBetweenBlocks | none | broadcasting | streaming | sdh | Tvungen tom pause mellem på hinanden følgende blokke; standard er broadcasting (~99 ms) |
minBlockDuration | 0.1–60 s | Korteste tid en blok vises på skærmen, i sekunder; standard er 1.0 |
maxBlockDuration | > min | Længste tid en blok vises på skærmen, 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" } }'Svar
{
"id": "rev8Xk3…",
"object": "enhancement",
"transcription_id": "aB3dE9f2…",
"status": "processing",
"progress": 0,
"credits_charged": 12,
"error": null,
"created": 1754559000
}/v1/transcriptions/{id}/enhancements/{enhancementId}Polling og resultat i ét: når status viser completed, serverer captions-endpointet allerede den forbedrede version.
Poll indtil completed. Læsning af en fejlet forbedring udløser dens automatiske refusion.
Credits: Gratis.
curl https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/enhancements/rev8Xk3… \
-H "Authorization: Bearer inw_live_…"Oversættelse af undertekster med timing arvet fra kilden — én oversættelse pr. sprog pr. undertekstversion. Kræver en fuldført transskription.
/v1/transcriptions/{id}/translateÉt kald pr. sprog forvandler et færdigt undertekstspor til en lokaliseret version med identisk timing — mangedobl rækkevidden af hver video, du allerede har.
Returnerer 202. Svarer 409 translation_exists, hvis sproget allerede findes for den aktuelle version.
Credits: Beregnes ud fra undertekstindholdets størrelse til samme takst som i studiet, pr. målsprog, og trækkes ved accept. Refunderes automatisk ved fejl.
Body
| Felt | Type | Beskrivelse |
|---|---|---|
target_languagepåkrævet | string | ISO 639-1-kode, f.eks. "es" |
target_label | string | Visningsnavn, op til 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" }'Svar
{
"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}Polling og resultat i ét: når den er completed, hentes den oversatte undertekstfil fra captions-endpointet med language-parameteren.
Poll indtil completed, og hent derefter de oversatte undertekster fra captions-endpointet med query-parameteren language.
Credits: 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.vttKonfigurér en webhook i Dashboard → Integrations → Webhook for at modtage transcript.completed-events i stedet for at polle. Payloads signeres med HMAC-SHA256 (X-Inwista-Signature: sha256=<hex> over den rå body) med den signeringshemmelighed, der vises én gang ved opsætningen. Fil-URL'er er præsignerede og udløber efter 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 bruger cookies til at forstå, hvordan Inwista bruges, og til at måle vores annoncering. Privatlivspolitik · Cookiepolitik