API
Base URL https://transcriptanything.zhst.app. Authenticate with a Bearer key (tt_live_… or tt_test_…). Always send an Idempotency-Key when creating a job.
Create a transcription
curl https://transcriptanything.zhst.app/api/v1/transcriptions \
-H "Authorization: Bearer $TA_API_KEY" \
-H "Idempotency-Key: episode-0042" \
-H "Content-Type: application/json" \
-d '{
"link": "https://www.youtube.com/watch?v=VIDEO_ID",
"options": { "word_timestamps": true, "summary": { "preset": "bullets" } }
}'
# 201
{
"transcription": {
"id": "trj_…",
"status": "queued",
"stage": "probe",
"credits": 41,
"free": false
}
}Poll
curl https://transcriptanything.zhst.app/api/v1/transcriptions/trj_… \
-H "Authorization: Bearer $TA_API_KEY"
{
"transcription": {
"id": "trj_…",
"status": "succeeded",
"durationSeconds": 842,
"billableMinutes": 15,
"chargedCredits": 41,
"formats": ["json", "txt", "srt", "vtt"],
"addons": { "status": "done", "preset": "bullets", "summary": "- …" }
}
}Upload a file
# 1. ask for a presigned PUT
curl -X POST https://transcriptanything.zhst.app/api/v1/uploads \
-H "Authorization: Bearer $TA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename":"call.mp3","content_type":"audio/mpeg","size":18432221}'
# 2. PUT the bytes straight to R2 (no auth header: the URL is signed)
curl -X PUT --upload-file call.mp3 "<url from step 1>"
# 3. queue it
curl -X POST https://transcriptanything.zhst.app/api/v1/transcriptions \
-H "Authorization: Bearer $TA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"upload_id":"upl_…","options":{"language":"vi"}}'Endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /api/v1/transcriptions | Create from a link, upload_id, probe_id or items[] |
| GET | /api/v1/transcriptions | List transcriptions |
| GET | /api/v1/transcriptions/{id} | Status and price |
| GET | /api/v1/transcriptions/{id}/result?format= | json · txt · srt · vtt |
| POST | /api/v1/transcriptions/{id}/cancel | Cancel (idempotent) |
| POST | /api/v1/transcriptions/batch | Create many jobs with one Idempotency-Key |
| POST | /api/v1/links/preview | Preview: title, duration, price, playlist items |
| POST | /api/v1/uploads | Presigned R2 PUT |
Pricing in the API
- 3 credits per started minute.
- Word timestamps +1 credit/min.
- Summary +5 credits, only on success.
- API requests add 2 credits per job.
Errors
Errors use application/problem+json with a stable code: unauthenticated, forbidden, invalid_input, insufficient_credits, quota_exceeded, rate_limited, not_found, dependency_unavailable.
n8n
The importable example workflow (HTTP Request → Wait → Webhook) lives in docs/transcript/n8n/ in the repo.