Developers

Tõlk.fm Public API

Tõlk.fm Public API is a REST interface for partner products to programmatically create translation events, launch live sessions, and retrieve public listener links for audiences. Integrate real-time voice translation into your applications and automated workflows without building interpretation infrastructure yourself. Keys are profile-scoped and billed against your existing prepaid wallet.

How do I authenticate?

Create an API key in the dashboard under Developers. Send it on every request with a Bearer token. Use server-to-server calls only — do not embed keys in browser apps.

Authorization: Bearer sk_live_...
ScopeAccess
events:readList/get events, read session status
events:writeCreate events, add language channels
sessions:launchLaunch and stop translation sessions

What can you build?

Use the API to wire Tõlk.fm into registration flows, venue apps, AV automation, partner dashboards, and bespoke multilingual experiences. Each launch returns a streamUrl — the public browser page where listeners pick a language and hear translated audio in real time.

For livestreams and broadcast-style programs, use streamDelivery: "both" on launch to receive browser streamUrl links and tokenized directStreamLinks (WebSocket PCM16, HLS/AAC, RTMP pull) for OBS, vMix, and Castr.

How do I get started?

1. Create an event

curl -X POST https://api.tolk.fm//v1/events \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Product launch",
    "sourceLanguage": "en",
    "targetLanguages": ["es", "de"],
    "translationProvider": "openai"
  }'

2. Launch translation

curl -X POST https://api.tolk.fm//v1/events/{eventId}/launch \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "mode": "live", "streamDelivery": "both" }'

Returns streamUrl (browser listeners) and/or directStreamLinks (WebSocket, HLS, RTMP on the media worker).

What endpoints are available?

MethodPathScopeDescription
GET/v1/whoamievents:readIntrospect current key
GET/v1/eventsevents:readList events
POST/v1/eventsevents:writeCreate event
GET/v1/events/{id}events:readGet event
POST/v1/events/{id}/channelsevents:writeAdd target language
POST/v1/events/{id}/launchsessions:launchGo live; streamUrl and/or directStreamLinks
POST/v1/events/{id}/direct-stream-linksevents:readMint WebSocket/HLS/RTMP links
POST/v1/events/{id}/stopsessions:launchStop session
GET/v1/events/{id}/statusevents:readStatus; optional directStreamLinks

How are errors returned?

{
  "error": {
    "code": "insufficient_balance",
    "message": "Insufficient wallet balance...",
    "requestId": "uuid"
  }
}

Common codes: unauthorized, insufficient_scope, insufficient_balance, validation_error, rate_limit_exceeded.

Rate limits & billing

Each API key has a requests-per-minute limit (default 60) and a max concurrent live events limit (default 3). API-launched sessions use the same prepaid wallet and per-channel-minute pricing as dashboard launches.