Full reference for every endpoint — authentication, request/response formats, file uploads, AI summaries, translation and error codes.
The Turnscribe API lets you transcribe audio/video from a URL or an uploaded file, and check the
status of a transcription job. All endpoints are versioned under /api/v1/ and
require an API key. You can generate a key from your
dashboard once you sign up or log in.
https://turnscribe.com/api/v1/
Every request must include your API key in the Authorization header, using the
Api-Key scheme:
Authorization: Api-Key <your_api_key>
Requests with a missing or invalid key return 400 Bad Request:
{
"error": "Invalid API key. See https://turnscribe.com/api for more information. Contact us at [email protected] if you have any questions or need an increase in your limit."
}
.mp3, .wav, .ogg, .flac, .aac, .m4a, .wma, .opus.mp4, .mkv, .webm, .avi, .mov, .flv, .wmv, .mpeg, .mpg, .3gp, .ts, .m2ts, .mts, .vob, .ogv, .rm, .rmvbNeed a higher duration limit? Contact [email protected].
POST
/api/v1/transcribe/
Submits a YouTube, TikTok, Facebook or other media URL for transcription. If the same URL was already transcribed, the cached result is returned immediately.
Body (JSON)
{
"url": "https://www.youtube.com/watch?v=..."
}
Response — 202 Accepted (new job queued)
{
"status": "PENDING",
"transcript_id": "...",
"task_id": "..."
}
Response — 200 OK (already cached)
{
"status": "COMPLETED",
"transcript_id": "...",
"content": "...",
"title": "..."
}
Response — 400 Bad Request (duration exceeds your key's limit)
{
"error": "Audio duration (32.4 min) exceeds the allowed limit of 15 minutes for your API key.",
"media_duration_minutes": 32.4,
"api_key_max_minutes": 15,
"url": "https://www.youtube.com/watch?v=...",
"message": "Your API key has a limit of 15 minutes of URLs per request. To transcribe longer audio, please for now contact us to request an increase in your limit at [email protected]."
}
Example — curl
curl -X POST https://turnscribe.com/api/v1/transcribe/ \
-H "Authorization: Api-Key <your_api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.youtube.com/watch?v=..."}'
POST
/api/v1/transcribe/file/
Uploads an audio or video file directly (multipart/form-data) instead of a URL.
Form field
file — the audio/video file to transcribe (see allowed extensions and size limit above)Response — 202 Accepted
{
"status": "PENDING",
"transcript_id": "...",
"task_id": "..."
}
Possible errors
400 — {"error": "File is required"}400 — {"error": "Invalid file extension"}400 — {"error": "Invalid file size. Max <plan_limit>MB"} (the limit depends on your plan — see Pricing)400 — {"error": "Error processing file"}Example — curl
curl -X POST https://turnscribe.com/api/v1/transcribe/file/ \
-H "Authorization: Api-Key <your_api_key>" \
-F "file=@/path/to/audio.mp3"
POST
/api/v1/transcribe/bulk/
Submits up to several URLs in a single request. Requires an API key linked to an account on a plan that includes bulk URL import (Pro); the exact limit is returned in the error message if you go over it.
Body (JSON)
{
"urls": [
"https://www.youtube.com/watch?v=...",
"https://www.tiktok.com/@user/video/..."
]
}
Response — 202 Accepted
{
"results": [
{ "url": "...", "status": "PENDING", "transcript_id": "...", "task_id": "..." },
{ "url": "...", "status": "COMPLETED", "transcript_id": "...", "content": "...", "title": "..." },
{ "url": "...", "error": "..." }
]
}
Each item in results mirrors the response of the single-URL endpoint above: PENDING for a newly queued job, COMPLETED if you already have your own transcript of that URL, or error if that particular URL was rejected. Poll each transcript_id/task_id with the status endpoint below.
Possible errors
400 — {"error": "urls (a list of URLs) is required"}400 — {"error": "You can only submit up to 10 URLs at once."}403 — {"error": "Your plan does not include bulk URL import. Please upgrade your plan."}403 — {"error": "Bulk URL import requires an API key linked to a Pro account."}Example — curl
curl -X POST https://turnscribe.com/api/v1/transcribe/bulk/ \
-H "Authorization: Api-Key <your_api_key>" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://www.youtube.com/watch?v=...", "https://www.tiktok.com/@user/video/..."]}'
GET
/api/v1/transcribe/status/
Polls the status of a job created by either endpoint above.
Query parameters
transcript_id — required, returned when the job was createdtask_id — returned when the job was created (echoed back while pending)Response — pending
{
"status": "PENDING",
"transcript_id": "...",
"task_id": "..."
}
Response — completed
{
"status": "COMPLETED",
"transcript_id": "...",
"content": "...",
"title": "..."
}
Response — error
{
"status": "ERROR",
"transcript_id": "...",
"content": "..."
}
Other errors
400 — {"error": "transcript_id is required"}404 — {"error": "Transcript not found"}Example — curl
curl -X GET "https://turnscribe.com/api/v1/transcribe/status/?transcript_id=...&task_id=..." \
-H "Authorization: Api-Key <your_api_key>"
POST
/api/v1/transcribe/summary/
Generates (or checks) an AI summary of a completed transcript. Requires an API key linked to an account on a plan that includes AI summaries, and a transcript with enough content to be worth summarizing. Idempotent -- call again with the same transcript_id to poll progress.
Body (JSON)
{
"transcript_id": "..."
}
Response — 202 Accepted (generating)
{ "status": "PENDING" }
Response — 200 OK (ready)
{
"status": "COMPLETED",
"summary": "..."
}
Possible errors
400 — {"error": "transcript_id is required"}403 — {"error": "Your plan does not include API access. Please upgrade your plan."}403 — {"error": "AI summaries are not available for this transcription or plan."}404 — {"error": "Transcript not found"}Example — curl
curl -X POST https://turnscribe.com/api/v1/transcribe/summary/ \
-H "Authorization: Api-Key <your_api_key>" \
-H "Content-Type: application/json" \
-d '{"transcript_id": "..."}'
POST
/api/v1/transcribe/translate/
Translates a completed transcript into another language. Requires an API key linked to an account on a plan that includes translation. Rate-limited to once per day per transcript, regardless of target language, to control model cost. Idempotent -- call again with the same transcript_id/target_lang to poll progress.
Body (JSON)
{
"transcript_id": "...",
"target_lang": "es"
}
Response — 202 Accepted (translating)
{ "status": "PENDING" }
Response — 200 OK (ready)
{
"status": "COMPLETED",
"translation": "...",
"target_lang": "es"
}
Possible errors
400 — {"error": "transcript_id is required"}400 — {"error": "Please choose a valid target language.", "supported_languages": {...}}403 — {"error": "Your plan does not include API access. Please upgrade your plan."}403 — {"error": "Translation is not available for this plan."}404 — {"error": "Transcript not found"}429 — {"error": "You can only translate this transcription once per day. Please try again tomorrow."}Example — curl
curl -X POST https://turnscribe.com/api/v1/transcribe/translate/ \
-H "Authorization: Api-Key <your_api_key>" \
-H "Content-Type: application/json" \
-d '{"transcript_id": "...", "target_lang": "es"}'
All of these just call the REST endpoints above with your API key — no special integration needed, just an HTTP/Webhook step in each tool.
n8n
Download the ready-to-import workflow (transcribe, poll status, generate a summary and
translate) from the API overview page, or build it yourself with
an HTTP Request node: POST /api/v1/transcribe/, then a
Wait node + another HTTP Request node polling
GET /api/v1/transcribe/status/ in a loop until status is
COMPLETED.
Zapier
Zaps aren't exportable as a reusable file, so build it directly in Zapier:
https://turnscribe.com/api/v1/transcribe/, Data {"url": "..."}, Headers Authorization: Api-Key <your_api_key>.https://turnscribe.com/api/v1/transcribe/status/?transcript_id=...&task_id=... (map the values from the first step's response), same Authorization header.PENDING, add another Delay + status check step, or use Zapier's built-in Paths/looping apps to retry automatically.Make
Same pattern, using Make's native HTTP module:
https://turnscribe.com/api/v1/transcribe/, Body type JSON {"url": "..."}", Header Authorization: Api-Key <your_api_key>.https://turnscribe.com/api/v1/transcribe/status/ with transcript_id/task_id as query parameters.status is COMPLETED.Questions or need a higher limit? Reach out at [email protected].