De Inwista-API is er
Overlay

API-referentie

Transcribeer, verbeter en vertaal ondertitels programmatisch. Base-URL, authenticatie, elk endpoint en elke foutcode — alles op één pagina.
Base URL: https://api.inwista.ai/v1

Authenticatie

Maak een API-sleutel aan in Dashboard → API Keys (alleen voor workspacebeheerders). De sleutel wordt maar één keer getoond — bewaar deze zoals een wachtwoord.

Stuur de sleutel als Bearer-token mee met elk verzoek. Sleutels zijn beperkt tot één workspace: alles wat de API teruggeeft hoort daarbij. Resources die via de API zijn aangemaakt, zijn zichtbaar in het dashboard, maar dashboardprojecten zijn niet toegankelijk via de API.

Elke authenticatiefout — ontbrekende header, onbekende sleutel, ingetrokken sleutel — geeft dezelfde 401-response terug.

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

Fouten

Elke fout gebruikt dezelfde envelop: een object met een machineleesbare code en een leesbaar bericht voor mensen. Binnen v1 komen er alleen codes bij, er verdwijnen er geen — bouw op de code, niet op het bericht.

{ "error": { "code": "insufficient_credits", "message": "…" } }
StatusCodeWanneer
401invalid_api_keyAuthenticatie mislukt (ongeacht de reden)
400invalid_source_urlGeen https, inloggegevens in de URL, privéhost of ongeldige opbouw
400invalid_languageOntbreekt of is geen ISO 639-1-code
400invalid_num_speakersGeen geheel getal tussen 1 en 32
400invalid_store_mediaGeen boolean
400invalid_retentionNiet "standard" of "none", of gecombineerd met store_media true
400invalid_metadataGeen object, of groter dan 1 KB
400invalid_settingsGeen object, of groter dan 2 KB
400unreadable_sourceDe duur van de media kon niet worden bepaald
400invalid_cursorstarting_after is geen bekend id
400invalid_formatOndertitelformaat niet ondersteund
402insufficient_creditsHet tegoed dekt de kosten niet
404not_foundOnbekende resource
404translation_not_foundDe gevraagde taal heeft geen voltooide vertaling voor de geleverde versie
409not_readyVereist een voltooide transcriptie
409operation_in_progressEr wordt nog een verbetering verwerkt
409translation_existsDeze taal bestaat al voor deze versie
400invalid_idempotency_keyIdempotency-Key-header leeg of langer dan 255 tekens
400idempotency_key_reusedIdempotency-Key is al gebruikt voor een ander verzoek
409idempotency_conflictEen verzoek met deze sleutel wordt nog verwerkt
429rate_limitedTe veel verzoeken — probeer opnieuw na de Retry-After-header

Idempotentie

Elke POST-aanroep belast credits bij acceptatie, dus een time-out gevolgd door blind opnieuw proberen zou een tweede taak en een tweede afschrijving aanmaken. Stuur een Idempotency-Key-header mee (een willekeurige unieke tekenreeks van maximaal 255 tekens) en nieuwe pogingen worden veilig: het antwoord op het eerste verzoek wordt 24 uur bewaard en ongewijzigd teruggegeven bij elke nieuwe poging met dezelfde sleutel.

Hergebruik van een sleutel met een ander verzoek geeft 400 idempotency_key_reused; opnieuw proberen terwijl het origineel nog loopt geeft 409 idempotency_conflict. Foutantwoorden worden nooit bewaard — een mislukt verzoek houdt nooit zijn afschrijving, dus de sleutel komt vrij voor een schone nieuwe poging.

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" }'

Verzoeklimieten

Elke API-sleutel mag 300 leesverzoeken (GET) en 60 schrijfverzoeken (POST) per minuut doen. Het quotum vult continu aan en mag in één keer worden opgebruikt. Daarboven antwoordt de API met 429 rate_limited en een Retry-After-header in seconden.

Beschouw de aantallen als indicatief: neem gas terug bij elke 429 en geef de voorkeur aan webhooks boven strak pollen.

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

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

Credits

Bewerkingen worden afgerekend in credits uit het prepaid tegoed van je workspace (opwaarderen kan in Dashboard → Billing). Transcriptie kost 4 credits per begonnen minuut media. Verbetering en vertaling worden geprijsd op basis van de omvang van de inhoud — tegen dezelfde tarieven als de studio. Ophalen, lijsten opvragen en pollen zijn gratis.

Kosten worden afgeschreven zodra een verzoek wordt geaccepteerd. Mislukt een bewerking, dan wordt het bedrag automatisch terugbetaald en meldt de resource credits_charged: 0. Een 402-afwijzing kost nooit iets.

Paginering

Lijst-endpoints accepteren limit (standaard 25, maximaal 100) en starting_after — het laatste id van de vorige pagina. Responses verpakken de resultaten in een list-object met has_more.

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

Transcripties

Dien media in via een URL, poll tot de status completed is (of gebruik webhooks) en haal daarna de ondertitels op. De statussen zijn processing, completed en failed. Tijdstempels zijn unix-seconden.

Pollen en resultaten delen één endpoint: GET /v1/transcriptions/{id} is waar je de status volgt ÉN waar de voltooide resource leeft — er is geen apart resultaat-endpoint. De enige uitzondering zijn de ondertitelbestanden zelf: die komen altijd van het captions-endpoint, omdat het ruwe bestandsinhoud is en geen JSON.

Een transcriptie aanmaken

POST/v1/transcriptions

Zet elk gehost mediabestand om in nauwkeurige ondertitels met tijdstempels, zonder dat iemand de studio hoeft te openen — voed je CMS, archief of publicatiepijplijn rechtstreeks.

De duur van de media wordt vastgesteld voordat het verzoek wordt geaccepteerd; het afschrijven van het tegoed en het in de wachtrij zetten van de job gebeuren in één atomaire stap. Geeft 201 terug met de transcriptie-resource.

Credits: 4 credits per begonnen minuut media, afgeschreven zodra de job wordt geaccepteerd. Mislukte jobs worden automatisch terugbetaald.

Body

VeldTypeBeschrijving
source_urlverplichtstringPublieke https-URL van het mediabestand, of een YouTube-, TikTok- of Vimeo-URL
languageverplichtstringISO 639-1-code, bijv. "en" of "nb-NO"
diarizationbooleanSprekerlabels (standaard false)
num_speakersinteger1–32, hint voor diarization
store_mediabooleanfalse = alleen transcriptie: er worden geen afspeelbestanden voorbereid (standaard true)
retentionstring"none" verwijdert de bronmedia na transcriptie — het transcript blijft bewaard (standaard "standard")
metadataobjectJe eigen tags, maximaal 1 KB, letterlijk teruggegeven
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
  }'

Response

{
  "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
}

Transcripties weergeven

GET/v1/transcriptions

Stem je catalogus af op de verwerkte jobs of bouw een dashboard over alles wat je hebt getranscribeerd.

Via de API aangemaakte transcripties, nieuwste eerst. Standaardpaginering.

Credits: Gratis.

Queryparameters

VeldTypeBeschrijving
limitintegerPaginagrootte, standaard 25, maximaal 100
starting_afterstringCursor: het laatste id van de vorige pagina
curl "https://api.inwista.ai/v1/transcriptions?limit=10" \
  -H "Authorization: Bearer inw_live_…"

Een transcriptie ophalen

GET/v1/transcriptions/{id}

Zowel de voortgangspoll als het eindresultaat: zie de status omslaan naar completed en lees vervolgens de duur, taal en afgeschreven credits uit dezelfde response.

Poll tot de status completed is (of registreer een webhook, zie hieronder). Het opvragen van een mislukte transcriptie activeert ook de automatische terugbetaling.

Credits: Gratis.

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

Response

{
  "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
}

Een transcriptie verwijderen

DELETE/v1/transcriptions/{id}

Verwijder een taak op verzoek — volledige controle over uw gegevens in één aanroep.

Verwijdert de transcriptie permanent met alles wat ervoor is opgeslagen: mediabestanden, transcriptie-inhoud, revisies, vertalingen en opmerkingen. Geaggregeerde factureringstellers blijven bewaard — ze bevatten geen inhoud.

Alleen voltooide of mislukte taken kunnen worden verwijderd; een taak die nog wordt verwerkt geeft 409, net als een met een lopende verbetering of vertaling. Verwijdering is onmiddellijk en onomkeerbaar.

Credits: endpoints.delete-transcription.pricing

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

Response

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

Ondertitels ophalen

GET/v1/transcriptions/{id}/captions

Haal uitzendklare ondertitelbestanden rechtstreeks binnen in je speler, MAM of leveringspijplijn — geen handmatige exports, geen formaatconversie aan jouw kant. In een videoproductiepijplijn valt de voltooide SRT of VTT direct in je NLE, reviewtool of packagingstap zodra een montage is getranscribeerd.

Geeft de ruwe inhoud van het ondertitelbestand terug met het bijbehorende Content-Type — niet verpakt in JSON. Antwoordt met 409 not_ready totdat de transcriptie is voltooid.

Credits: Gratis.

Queryparameters

VeldTypeBeschrijving
formatverplichtstringsrt, vtt, json of txt
diarization"true"Plaats sprekerlabels vóór de tekst
languagestringLever een voltooide vertaling in plaats van de brontaal; 404 translation_not_found als die ontbreekt voor de geleverde versie
revisionstringHaal één specifieke versie op (een verbeterings-id is de revisie-id); weggelaten = nieuwste
curl "https://api.inwista.ai/v1/transcriptions/aB3dE9f2…/captions?format=srt" \
  -H "Authorization: Bearer inw_live_…" -o interview.srt

Het json-formaat is een geversioneerd contract: { version: 1, language, segments: [{ index, start, end, text, speaker? }] } — seconden met millisecondeprecisie; binnen een versie worden er alleen velden toegevoegd.

Vertalingen horen bij de versie waarvoor ze zijn gemaakt — de revision_id van de vertaalresource benoemt die, en de versie van een latere verbetering erft ze niet. Geef die revision_id door als revision om de vertaalde versie op te halen.

Verbeteringen

AI-ondertitelverbetering — regellengte, regelbalans en timingregels — die een nieuwe versie van de ondertitels oplevert. Vereist een voltooide transcriptie. Zodra een verbetering is afgerond, levert het ophalen van ondertitels automatisch de verbeterde versie.

Een verbetering starten

POST/v1/transcriptions/{id}/enhance

Timing en regelbalans op uitzendniveau, volledig automatisch — lever ondertitels die de QC doorstaan zonder dat er een redacteur aan te pas komt. Voor productiehuizen automatiseert dit de ondertitel-conformstap van de leveringspijplijn: elke aflevering vertrekt met consistente ondertitels die aan de specificaties voldoen.

Geeft 202 terug met de verbeteringsresource.

Credits: Berekend op basis van de omvang van de ondertitelinhoud, tegen hetzelfde tarief als de studio, en afgeschreven zodra de job wordt geaccepteerd. Bij mislukking automatisch terugbetaald.

Body

VeldTypeBeschrijving
settingsobjectVerbeteringsinstellingen van de studio, maximaal 2 KB; weglaten voor de standaardwaarden

Verbeteringsinstellingen

VeldTypeBeschrijving
maxLinesPerBlock"1" | "2"Aantal regels dat tegelijk wordt getoond; broadcaststandaard en standaardwaarde is 2
maxCharactersPerLine1–100Tekens per regel; broadcaststandaard en standaardwaarde is 42
blockLineBalancingbottom_heavy | top_heavy | equal | unconstrainedVisuele vorm van tweeregelige blokken; standaard is unconstrained
textCondensationnone | smart | aggressiveLaat de AI dialoog comprimeren die te snel leest; standaard is none (letterlijk)
speakerDialogueFormatnone | hyphens | speaker_name | bracketsHoe meerdere sprekers in één blok worden gescheiden; standaard is none
continuationMarkersnone | end | start | bothMarkeringsplaatsing wanneer een zin meerdere blokken beslaat; standaard is none
continuationMarkerStyledash | ellipsisStreepje of beletselteken voor gesplitste zinnen; standaard is dash
gapBetweenBlocksnone | broadcasting | streaming | sdhGeforceerde lege ruimte tussen opeenvolgende blokken; standaard is broadcasting (~99 ms)
minBlockDuration0.1–60 sKortste tijd dat een blok in beeld blijft, in seconden; standaard is 1.0
maxBlockDuration> minLangste tijd dat een blok in beeld blijft, in seconden; standaard is 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" } }'

Response

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

Een verbetering ophalen

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

Poll en resultaat in één: zodra de status completed is, levert het captions-endpoint al de verbeterde versie.

Poll tot completed. Het opvragen van een mislukte verbetering activeert de automatische terugbetaling.

Credits: Gratis.

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

Vertalingen

Ondertitelvertaling waarbij de timing van de bron wordt overgenomen — één vertaling per taal per ondertitelversie. Vereist een voltooide transcriptie.

Een vertaling starten

POST/v1/transcriptions/{id}/translate

Eén aanroep per taal maakt van een afgeronde ondertiteltrack een gelokaliseerde versie met identieke timing — vermenigvuldig het bereik van elke video die je al hebt.

Geeft 202 terug. Antwoordt met 409 translation_exists als die taal al bestaat voor de huidige versie.

Credits: Berekend op basis van de omvang van de ondertitelinhoud, tegen hetzelfde tarief als de studio, per doeltaal, afgeschreven bij acceptatie. Bij mislukking automatisch terugbetaald.

Body

VeldTypeBeschrijving
target_languageverplichtstringISO 639-1-code, bijv. "es"
target_labelstringWeergavenaam, maximaal 60 tekens
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" }'

Response

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

Een vertaling ophalen

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

Poll en resultaat in één: eenmaal completed haal je het vertaalde ondertitelbestand op van het captions-endpoint met de language-parameter.

Poll tot completed en haal daarna de vertaalde ondertitels op van het captions-endpoint met de language-queryparameter.

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.vtt

Webhooks

Stel een webhook in via Dashboard → Integrations → Webhook om transcript.completed-events te ontvangen in plaats van te pollen. Payloads zijn ondertekend met HMAC-SHA256 (X-Inwista-Signature: sha256=<hex> over de ruwe body), met de signing-secret die bij het instellen één keer wordt getoond. Bestands-URL's zijn pre-signed en verlopen na 24 uur.

{
  "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
    }
  ]
}
We waarderen je privacy

We gebruiken cookies om te begrijpen hoe Inwista wordt gebruikt en om onze advertenties te meten. Privacybeleid · Cookiebeleid