API Reference

Whisper API Docs

OpenAI-compatible speech-to-text. One endpoint, every format.

Authentication

All requests require an API key in the Authorization header. Create and manage keys in your dashboard.

http
Authorization: Bearer dt_live_xxxxxxxx

Transcribe audio

POST https://deeting.ai/api/v1/audio/transcriptions

Upload a file via multipart/form-data, or pass an audio_url in a JSON body for large files.

Upload a filebash
curl https://deeting.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer dt_live_xxxxxxxx" \
  -F "file=@meeting.mp3" \
  -F "response_format=verbose_json"
Transcribe by URL (large files)bash
curl https://deeting.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer dt_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"audio_url": "https://cdn.example.com/lecture.mp3", "response_format": "srt"}'
ParameterTypeDescription
filefileAudio/video file (mp3, mp4, wav, m4a…)
audio_urlstringPublic URL to audio (JSON body alternative)
languagestring?ISO code, e.g. en, zh. Omit for auto-detect.
response_formatstring?text | json | verbose_json | srt | vtt (default: full JSON)
timestamp_granularitiesstring?Include word for word-level timestamps (verbose_json)

Response formats

verbose_json — full structure with per-segment timestamps and metadata:

json
{
  "task": "transcribe",
  "language": "en",
  "duration": 612.4,
  "text": "…full transcript…",
  "segments": [
    {
      "id": 0,
      "seek": 0,
      "start": 0.0,
      "end": 6.2,
      "text": " Welcome everyone to the meeting.",
      "temperature": 0.0,
      "avg_logprob": -0.24,
      "compression_ratio": 1.31,
      "no_speech_prob": 0.01
    }
  ]
}

srt / vtt — ready-to-use subtitles:

srt
1
00:00:00,000 --> 00:00:06,200
Welcome everyone to the meeting.

2
00:00:06,200 --> 00:00:11,050
Let's get started with the roadmap.

Errors & limits

Errors return a consistent JSON shape: { "error": { "code", "message" } }

text
401  missing_api_key / invalid_api_key   → bad or missing Authorization header
429  quota_exceeded                        → monthly hours exhausted, upgrade
400  invalid_audio_url / bad_request       → malformed request
502  upstream_unavailable                  → transcription service error

Quotas are per calendar month and reset on the 1st. Free tier includes 10 hours/month; upgrade for more. Very long audio is best sent via audio_url.