
Base URL: https://api.inwista.ai/v1Skapa 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…"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": "…" } }| Status | Kod | När |
|---|---|---|
| 401 | invalid_api_key | Autentiseringen misslyckades (oavsett orsak) |
| 400 | invalid_source_url | Inte https, inloggningsuppgifter i URL:en, privat värd eller felformaterad |
| 400 | invalid_language | Saknas eller är inte en ISO 639-1-kod |
| 400 | invalid_num_speakers | Inte ett heltal mellan 1 och 32 |
| 400 | invalid_store_media | Inte ett booleskt värde |
| 400 | invalid_retention | Inte "standard" eller "none", eller kombinerat med store_media true |
| 400 | invalid_metadata | Inte ett objekt, eller större än 1 KB |
| 400 | invalid_settings | Inte ett objekt, eller större än 2 KB |
| 400 | unreadable_source | Mediets längd kunde inte fastställas |
| 400 | invalid_cursor | starting_after är inte ett känt id |
| 400 | invalid_format | Undertextformatet stöds inte |
| 402 | insufficient_credits | Plånboken täcker inte kostnaden |
| 404 | not_found | Okänd resurs |
| 404 | translation_not_found | Det begärda språket har ingen slutförd översättning för versionen som serveras |
| 409 | not_ready | Kräver en slutförd transkribering |
| 409 | operation_in_progress | En förbättring bearbetas fortfarande |
| 409 | translation_exists | Språket finns redan för den här versionen |
| 400 | invalid_idempotency_key | Idempotency-Key-headern är tom eller över 255 tecken |
| 400 | idempotency_key_reused | Idempotency-Key har redan använts för en annan förfrågan |
| 409 | idempotency_conflict | En förfrågan med denna nyckel bearbetas fortfarande |
| 429 | rate_limited | För många förfrågningar — försök igen efter Retry-After-headern |
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" }'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": "…" } }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.
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 }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.
/v1/transcriptionsFö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ält | Typ | Beskrivning |
|---|---|---|
source_urlobligatoriskt | string | Publik https-URL till mediefilen, eller en YouTube-/TikTok-/Vimeo-URL |
languageobligatoriskt | string | ISO 639-1-kod, t.ex. "en" eller "nb-NO" |
diarization | boolean | Talaretiketter (standard false) |
num_speakers | integer | 1–32, vägledning för diarization |
store_media | boolean | false = endast transkription: inga uppspelningsfiler förbereds (standard true) |
retention | string | "none" raderar källmediet efter transkriberingen — transkriptionen behålls (standard "standard") |
metadata | object | Dina 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
}/v1/transcriptionsStä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ält | Typ | Beskrivning |
|---|---|---|
limit | integer | Sidstorlek, standard 25, max 100 |
starting_after | string | Cursor: sista id:t på föregående sida |
curl "https://api.inwista.ai/v1/transcriptions?limit=10" \
-H "Authorization: Bearer inw_live_…"/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
}/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
}/v1/transcriptions/{id}/captionsHä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ält | Typ | Beskrivning |
|---|---|---|
formatobligatoriskt | string | srt, vtt, json eller txt |
diarization | "true" | Sätter talaretiketter framför texten |
language | string | Servera en slutförd översättning i stället för källan; 404 translation_not_found om den saknas för versionen som serveras |
revision | string | Hä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.srtFormatet 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.
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.
/v1/transcriptions/{id}/enhanceTajming 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ält | Typ | Beskrivning |
|---|---|---|
settings | object | Studions förbättringsinställningar, upp till 2 KB; utelämna för standardvärden |
Inställningar för förbättring
| Fält | Typ | Beskrivning |
|---|---|---|
maxLinesPerBlock | "1" | "2" | Antal rader som visas samtidigt; broadcaststandard och standardval är 2 |
maxCharactersPerLine | 1–100 | Tecken per rad; broadcaststandard och standardval är 42 |
blockLineBalancing | bottom_heavy | top_heavy | equal | unconstrained | Visuell form på tvåradsblock; standard är unconstrained |
textCondensation | none | smart | aggressive | Låter AI:n komprimera dialog som läses för snabbt; standard är none (ordagrant) |
speakerDialogueFormat | none | hyphens | speaker_name | brackets | Hur flera talare i samma block separeras; standard är none |
continuationMarkers | none | end | start | both | Markörplacering när en mening sträcker sig över flera block; standard är none |
continuationMarkerStyle | dash | ellipsis | Tankstreck eller ellips för delade meningar; standard är dash |
gapBetweenBlocks | none | broadcasting | streaming | sdh | Tvingat tomt mellanrum mellan på varandra följande block; standard är broadcasting (~99 ms) |
minBlockDuration | 0.1–60 s | Kortaste tid ett block visas på skärmen, i sekunder; standard är 1.0 |
maxBlockDuration | > min | Lä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
}/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_…"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.
/v1/transcriptions/{id}/translateEtt 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ält | Typ | Beskrivning |
|---|---|---|
target_languageobligatoriskt | string | ISO 639-1-kod, t.ex. "es" |
target_label | string | Visningsnamn, 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
}/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.vttKonfigurera 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 använder cookies för att förstå hur Inwista används och för att mäta vår annonsering. Integritetspolicy · Cookiepolicy