Inwista API är här
Overlay

API-referens

Transkribera, förbättra och översätt undertexter programmatiskt. Bas-URL, autentisering, varje endpoint och varje felkod — allt på en sida.
Base URL: https://api.inwista.ai/v1

Autentisering

Skapa en API-nyckel i Dashboard → API Keys (endast administratörer för arbetsytan). Nyckeln visas bara en gång — förvara den som ett lösenord.

Skicka nyckeln som Bearer-token i varje anrop. Nycklar är avgränsade till en arbetsyta: allt API:et returnerar tillhör den. Resurser som skapas via API:et syns i dashboarden, men dashboard-projekt exponeras inte genom API:et.

Varje autentiseringsfel — saknad header, okänd nyckel, återkallad nyckel — returnerar samma 401-svar.

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

Fel

Alla fel använder ett och samma kuvert: ett objekt med en maskinläsbar kod och ett människoläsbart meddelande. Koder är enbart additiva inom v1 — bygg mot koden, inte mot meddelandet.

{ "error": { "code": "insufficient_credits", "message": "…" } }
StatusKodNär
401invalid_api_keyAutentiseringen misslyckades (oavsett orsak)
400invalid_source_urlInte https, inloggningsuppgifter i URL:en, privat värd eller felformaterad
400invalid_languageSaknas eller är inte en ISO 639-1-kod
400invalid_num_speakersInte ett heltal mellan 1 och 32
400invalid_store_mediaInte ett booleskt värde
400invalid_retentionInte "standard" eller "none", eller kombinerat med store_media true
400invalid_metadataInte ett objekt, eller större än 1 KB
400invalid_settingsInte ett objekt, eller större än 2 KB
400unreadable_sourceMediets längd kunde inte fastställas
400invalid_cursorstarting_after är inte ett känt id
400invalid_formatUndertextformatet stöds inte
402insufficient_creditsPlånboken täcker inte kostnaden
404not_foundOkänd resurs
404translation_not_foundDet begärda språket har ingen slutförd översättning för versionen som serveras
409not_readyKräver en slutförd transkribering
409operation_in_progressEn förbättring bearbetas fortfarande
409translation_existsSpråket finns redan för den här versionen
400invalid_idempotency_keyIdempotency-Key-headern är tom eller över 255 tecken
400idempotency_key_reusedIdempotency-Key har redan använts för en annan förfrågan
409idempotency_conflictEn förfrågan med denna nyckel bearbetas fortfarande
429rate_limitedFör många förfrågningar — försök igen efter Retry-After-headern

Idempotens

Varje POST-anrop debiterar krediter när det accepteras, så en förfrågan som får timeout och blint försöks igen skulle skapa ett andra jobb och en andra debitering. Skicka en Idempotency-Key-header (valfri unik sträng, upp till 255 tecken) så blir omförsök säkra: svaret på den första förfrågan lagras i 24 timmar och returneras oförändrat för varje omförsök med samma nyckel.

Återanvänds en nyckel med en annan förfrågan returneras 400 idempotency_key_reused; ett omförsök medan originalet fortfarande körs returnerar 409 idempotency_conflict. Felsvar lagras aldrig — en misslyckad förfrågan behåller aldrig debiteringen, så nyckeln frigörs för ett rent omförsö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" }'

Anropsgränser

Varje API-nyckel får göra 300 läsförfrågningar (GET) och 60 skrivförfrågningar (POST) per minut. Kvoten fylls på kontinuerligt och kan användas på en gång. Över gränsen svarar API:et med 429 rate_limited och en Retry-After-header i sekunder.

Betrakta siffrorna som ungefärliga: backa när du får 429 och föredra webhooks framför täta pollningsloopar.

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

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

Krediter

Operationer mäts i krediter från din arbetsytas förskottsbetalda plånbok (fyll på i Dashboard → Billing). Transkribering kostar 4 krediter per påbörjad minut media. Förbättring och översättning prissätts utifrån innehållets storlek — till samma taxa som studion tar. Hämtning, listning och pollning är gratis.

Debitering sker när ett anrop accepteras. Om en operation misslyckas återbetalas debiteringen automatiskt och resursen rapporterar credits_charged: 0. Ett 402-avslag debiterar aldrig något.

Paginering

List-endpoints tar limit (standard 25, max 100) och starting_after — sista id:t på föregående sida. Svaren kapslar in resultaten i ett listobjekt med has_more.

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

Transkriberingar

Skicka in media via URL, polla tills jobbet är completed (eller använd webhooks) och hämta sedan undertexterna. Statusarna är processing, completed och failed. Tidsstämplar anges i unix-sekunder.

Pollning och resultat delar en endpoint: GET /v1/transcriptions/{id} är både där du följer status OCH där den färdiga resursen finns — det finns ingen separat resultat-endpoint. Enda undantaget är själva undertextfilerna, som alltid hämtas från captions-endpointen eftersom de är råa filkroppar, inte JSON.

Skapa en transkribering

POST/v1/transcriptions

Förvandla vilken publikt lagrad mediefil som helst till korrekta, tidsstämplade undertexter utan att någon öppnar studion — mata ditt CMS, arkiv eller publiceringsflöde direkt.

Mediets längd kontrolleras innan anropet accepteras; plånboken debiteras och jobbet köläggs i ett atomärt steg. Returnerar 201 med transkriberingsresursen.

Krediter: 4 krediter per påbörjad minut media, debiteras när jobbet accepteras. Misslyckade jobb återbetalas automatiskt.

Body

FältTypBeskrivning
source_urlobligatorisktstringPublik https-URL till mediefilen, eller en YouTube-/TikTok-/Vimeo-URL
languageobligatorisktstringISO 639-1-kod, t.ex. "en" eller "nb-NO"
diarizationbooleanTalaretiketter (standard false)
num_speakersinteger1–32, vägledning för diarization
store_mediabooleanfalse = endast transkription: inga uppspelningsfiler förbereds (standard true)
retentionstring"none" raderar källmediet efter transkriberingen — transkriptionen behålls (standard "standard")
metadataobjectDina egna taggar, upp till 1 KB, ekas tillbaka oförändrade
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
}

Lista transkriberingar

GET/v1/transcriptions

Stäm av din katalog mot bearbetade jobb eller bygg en dashboard över allt du har transkriberat.

API-skapade transkriberingar, nyast först. Standardpaginering.

Krediter: Gratis.

Query-parametrar

FältTypBeskrivning
limitintegerSidstorlek, standard 25, max 100
starting_afterstringCursor: sista id:t på föregående sida
curl "https://api.inwista.ai/v1/transcriptions?limit=10" \
  -H "Authorization: Bearer inw_live_…"

Hämta en transkribering

GET/v1/transcriptions/{id}

Både förloppspollning och slutresultat: se status slå om till completed och läs sedan längd, språk och debitering ur samma svar.

Polla tills status är completed (eller registrera en webhook, se nedan). Att läsa en misslyckad transkribering utlöser även dess automatiska återbetalning.

Krediter: 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
}

Radera en transkription

DELETE/v1/transcriptions/{id}

Radera ett jobb på begäran — full kontroll över era data i ett enda anrop.

Raderar transkriptionen permanent med allt som lagrats för den: mediefiler, transkriptionsinnehåll, revisioner, översättningar och kommentarer. Aggregerade faktureringsräknare behålls — de innehåller inget innehåll.

Endast slutförda eller misslyckade jobb kan raderas; ett jobb som fortfarande bearbetas returnerar 409, liksom ett med en pågående förbättring eller översättning. Raderingen är omedelbar och kan inte ångras.

Krediter: 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
}

Hämta undertexter

GET/v1/transcriptions/{id}/captions

Hämta sändningsklara undertextfiler rakt in i din spelare, ditt MAM eller ditt leveransflöde — inga manuella exporter, ingen formatkonvertering på din sida. I ett videoproduktionsflöde landar färdig SRT eller VTT direkt i din NLE, ditt granskningsverktyg eller paketeringssteget i samma ögonblick som ett klipp är transkriberat.

Returnerar den råa undertextfilens innehåll med matchande Content-Type — inte inkapslat i JSON. Svarar 409 not_ready tills transkriberingen är slutförd.

Krediter: Gratis.

Query-parametrar

FältTypBeskrivning
formatobligatorisktstringsrt, vtt, json eller txt
diarization"true"Sätter talaretiketter framför texten
languagestringServera en slutförd översättning i stället för källan; 404 translation_not_found om den saknas för versionen som serveras
revisionstringHämta en specifik version (ett förbättrings-id är dess revisions-id); utelämnad = senaste
curl "https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/captions?format=srt" \
  -H "Authorization: Bearer inw_live_…" -o interview.srt

Formatet json är ett versionerat kontrakt: { version: 1, language, segments: [{ index, start, end, text, speaker? }] } — sekunder med millisekundsprecision, fält kan bara läggas till inom en version.

Översättningar hör till den version de skapades för — översättningsresursens revision_id anger den, och versionen från en senare förbättring ärver dem inte. Skicka detta revision_id som revision för att hämta den översatta versionen.

Förbättringar

AI-förbättring av undertexter — regler för radlängd, balansering och tajming — som skapar en ny version av undertexterna. Kräver en slutförd transkribering. När en förbättring är slutförd serveras den förbättrade versionen automatiskt vid hämtning av undertexter.

Starta en förbättring

POST/v1/transcriptions/{id}/enhance

Tajming och radbalansering i sändningsklass på autopilot — leverera undertexter som klarar QC utan att en redaktör rör dem. För produktionsbolag automatiserar detta konformeringen av undertexter i leveransflödet: varje avsnitt lämnar huset med konsekventa undertexter som följer specen.

Returnerar 202 med förbättringsresursen.

Krediter: Beräknas utifrån undertextinnehållets storlek till samma taxa som studion tar, dras när jobbet accepteras. Återbetalas automatiskt vid fel.

Body

FältTypBeskrivning
settingsobjectStudions förbättringsinställningar, upp till 2 KB; utelämna för standardvärden

Inställningar för förbättring

FältTypBeskrivning
maxLinesPerBlock"1" | "2"Antal rader som visas samtidigt; broadcaststandard och standardval är 2
maxCharactersPerLine1–100Tecken per rad; broadcaststandard och standardval är 42
blockLineBalancingbottom_heavy | top_heavy | equal | unconstrainedVisuell form på tvåradsblock; standard är unconstrained
textCondensationnone | smart | aggressiveLåter AI:n komprimera dialog som läses för snabbt; standard är none (ordagrant)
speakerDialogueFormatnone | hyphens | speaker_name | bracketsHur flera talare i samma block separeras; standard är none
continuationMarkersnone | end | start | bothMarkörplacering när en mening sträcker sig över flera block; standard är none
continuationMarkerStyledash | ellipsisTankstreck eller ellips för delade meningar; standard är dash
gapBetweenBlocksnone | broadcasting | streaming | sdhTvingat tomt mellanrum mellan på varandra följande block; standard är broadcasting (~99 ms)
minBlockDuration0.1–60 sKortaste tid ett block visas på skärmen, i sekunder; standard är 1.0
maxBlockDuration> minLängsta tid ett block visas på skärmen, i sekunder; standard är 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
}

Hämta en förbättring

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

Pollning och resultat i ett: när status visar completed serverar captions-endpointen redan den förbättrade versionen.

Polla tills completed. Att läsa en misslyckad förbättring utlöser dess automatiska återbetalning.

Krediter: Gratis.

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

Översättningar

Undertextöversättning där tajmingen ärvs från källan — en översättning per språk och undertextversion. Kräver en slutförd transkribering.

Starta en översättning

POST/v1/transcriptions/{id}/translate

Ett anrop per språk förvandlar ett färdigt undertextspår till en lokaliserad version med identisk tajming — mångfaldiga räckvidden för varje video du redan har.

Returnerar 202. Svarar 409 translation_exists om språket redan finns för den aktuella versionen.

Krediter: Beräknas utifrån undertextinnehållets storlek till samma taxa som studion tar, per målspråk, dras vid accept. Återbetalas automatiskt vid fel.

Body

FältTypBeskrivning
target_languageobligatorisktstringISO 639-1-kod, t.ex. "es"
target_labelstringVisningsnamn, upp till 60 tecken
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
}

Hämta en översättning

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

Pollning och resultat i ett: när den är completed hämtar du den översatta undertextfilen från captions-endpointen med parametern language.

Polla tills completed och hämta sedan de översatta undertexterna från captions-endpointen med query-parametern language.

Krediter: 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

Konfigurera en webhook i Dashboard → Integrations → Webhook för att ta emot transcript.completed-händelser i stället för att polla. Payloads signeras med HMAC-SHA256 (X-Inwista-Signature: sha256=<hex> över den råa kroppen) med signeringshemligheten som visas en gång vid konfigureringen. Fil-URL:er är försignerade och går ut efter 24 timmar.

{
  "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 värnar om din integritet

Vi använder cookies för att förstå hur Inwista används och för att mäta vår annonsering. Integritetspolicy · Cookiepolicy