Docs/DevThrottle API/Transcription
API

Transcription

3 min read

OpenAI-compatible audio transcription - the same endpoint DevThrottle's own voice features use. Transcription is included in Pro and the 14-day Pro trial with no usage charge: the same entitlement that powers dictation in the app covers the calls you make with your own key. Every call needs a dt_ key - there is no keyless path to this endpoint.

POST/audio/transcriptions
Transcribe an audio file. Multipart form data, OpenAI shape.

Request

ParameterTypeRequiredDescription
filefileRequiredThe audio to transcribe. Same formats as OpenAI: flac, m4a, mp3, mp4, mpeg, mpga, oga, ogg, wav, webm. Max 4 MB per request (see Limits).
modelstringOptionalAccepted for OpenAI compatibility (clients send whisper-1, gpt-4o-transcribe, ...). DevThrottle serves the request with its active speech-to-text model regardless of this value; see GET /api/v1/models for the current id.
response_formatstringOptionaljson (default), text, or verbose_json - shaped to what you asked for.
languagestringOptionalOptional language hint.
Example
curl https://devthrottle.com/api/v1/audio/transcriptions   -H "Authorization: Bearer $DEVTHROTTLE_API_KEY"   -F file=@recording.wav   -F model=whisper-1

What comes back is what was said

The endpoint returns the speech model's own words. Nothing between the model and you rewrites, summarises, translates or cleans up the transcript - it is shaped into the response format you asked for and returned as it was recognised. That is deliberate: your words become instructions to an agent, so a word you did not say is an instruction you did not give.

One consequence for API callers: the custom dictionary is applied by the DevThrottle app on your own machine, not by this endpoint. A direct call here gets no corrections at all - if you need your own terms fixed, apply your word list to the text you get back.

Response

json returns { "text": ... }, text returns the transcript as plain text, and verbose_json returns the fuller object the speech model produced - language, duration, text and, where the model supplies them, segments. Each request's audio duration appears in Usage.

Limits

Each request is a single, self-contained transcription with a 4 MB maximum body size. A larger upload returns 413 payload_too_large.

Included use is also bounded overall: transcription is an included AI feature, and included AI features share a monthly fair-use limit. An account that reaches it gets 402 with fair_use_limit_reached until the limit resets at the start of the next month. It is not a credit balance - loading credits does not lift it.

Note
For recordings larger than 4 MB, split the audio into sub-4 MB parts and transcribe each, then join the text. The DevThrottle gateway does this for you automatically (chunking long recordings on silence and transcribing the parts in parallel), so end users never hit the per-request limit.

Who can call it

Transcription comes with Pro and the 14-day Pro trial. An account with no active subscription or trial is declined with 402 and subscription_required - a subscription enables it, not loading credits, because this endpoint never spends credits at all.

Status codes

  • 400 - the upload could not be parsed, or the file field is missing.
  • 401 - invalid_api_key: missing, malformed, or revoked key.
  • 402 - subscription_required or fair_use_limit_reached, as above.
  • 404 - not_found: wrong path or wrong method (this endpoint is POST only).
  • 413 - payload_too_large: over 4 MB.
  • 500 - internal_error.
  • 502 - upstream_error: the speech service failed.
  • 504 - upstream_unavailable or upstream_timeout: the speech service is unreachable or did not answer in time. Retry after a short back-off.

Full error shapes are on errors and limits.

Note
The model parameter is deliberately forgiving: OpenAI-shaped clients hard-code their own model names, so DevThrottle accepts them and uses its own speech model - your client works unmodified.