Speech-to-Text API
The speech-to-text API that keeps your audio in Germany
A REST API with 20 endpoints, 99 languages, speaker diarization on every tier and HMAC-signed webhooks. Our own engines on our own hardware in Germany, no third party in the speech pipeline, from €0.18 per hour of audio.
- Base URL
- https://api.deepscript.com/v1
- Authentication
- Bearer ds_live_…
- Rate limit
- 100 requests/min authenticated, 30 without a key
- Data residency
- Germany
Three calls to a transcript
The upload responds immediately with an ID. From there, poll or wait for the webhook.
# 1. Upload
curl -X POST https://api.deepscript.com/v1/transcriptions \
-H "Authorization: Bearer ds_live_YOUR_KEY" \
-F "file=@meeting.mp3" -F "model=standard" -F "language=auto"
# 2. Poll
curl https://api.deepscript.com/v1/transcriptions/{id}/status \
-H "Authorization: Bearer ds_live_YOUR_KEY"
# 3. Export
curl "https://api.deepscript.com/v1/transcriptions/{id}/export?format=srt" \
-H "Authorization: Bearer ds_live_YOUR_KEY" -o result.srtError format: RFC 7807 Problem Details, application/problem+json.
Every endpoint
Paths, methods and names are English, exactly as in the OpenAPI specification. Try them interactively with your own key in the reference.
Transcriptions
The core of the API: upload a file, poll for status, fetch the result in four formats. The upload responds immediately with an ID, processing runs asynchronously.
| Method | Path | Summary |
|---|---|---|
| POST | /v1/transcriptions | Create transcription (file upload) |
| GET | /v1/transcriptions | List transcriptions |
| GET | /v1/transcriptions/{id} | Get transcription detail |
| DELETE | /v1/transcriptions/{id} | Delete transcription |
| GET | /v1/transcriptions/{id}/status | Get transcription status (lightweight polling) |
| GET | /v1/transcriptions/{id}/events | SSE stream for real-time status updates |
| GET | /v1/transcriptions/{id}/export | Export transcription |
Vocabularies
Custom word lists for product names, domain terms and proper nouns. Created once, referenced by ID on any transcription.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/vocabularies | List vocabularies |
| POST | /v1/vocabularies | Create vocabulary |
| GET | /v1/vocabularies/{id} | Get vocabulary |
| PUT | /v1/vocabularies/{id} | Update vocabulary |
| DELETE | /v1/vocabularies/{id} | Delete vocabulary |
Webhooks
Instead of polling: register an HTTPS endpoint and receive an HMAC-SHA256 signed delivery on every event, with three retry attempts.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/webhooks | List webhook endpoints |
| POST | /v1/webhooks | Create webhook endpoint |
| DELETE | /v1/webhooks/{id} | Delete webhook endpoint |
Account
Workspace balance, usage and profile. Useful to check whether the balance covers a large batch before starting it.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/account/balance | Get current balance |
| GET | /v1/account/usage | Get usage analytics |
| GET | /v1/account/profile | Get account profile |
System
Callable without authentication. The language list is the authoritative answer to which languages are actually supported.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/health | Health check |
| GET | /v1/languages | List supported languages |
Webhook events
Every delivery carries an HMAC-SHA256 signature in the header and is retried three times with increasing backoff on failure.
transcription.completedSent when a transcription completestranscription.failedSent when a transcription failsbalance.lowSent when workspace balance drops below the configured threshold
Machine readable
The complete OpenAPI 3.1 specification is mirrored on this domain. Client generators, Postman and AI agents can read it directly.
Wire it up without code
The same API in different wrapping: MCP server for AI agents, no-code via Zapier or Make, self-hosted via n8n.
API key in two minutes
Create an account, generate a key, start calling. The first 3 transcriptions are free, no credit card.