REST endpoint

Create a transcription

Provide exactly one source: source_url for supported public media, or upload for a completed direct upload. The API returns immediately with a job ID and a Location header for polling.

POST/api/v1/transcriptions202 Accepted

Authentication

Send an active Fast Transcriber API key as an HTTP bearer token.

http
Authorization: Bearer ft_live_replace_me
Input

Request

Use the fields below and send a JSON body.

FieldTypeDescription
source_urluriConditionally required: provide this public HTTP(S) media URL or upload, but not both.
uploadobjectConditionally required: provide this completed upload reference or source_url, but not both.
upload.filenamestringRequired with upload: original filename.
upload.keystringRequired with upload: owned object key from prepare-upload.
upload.sizeintegerRequired with upload: exact uploaded byte size.
upload.storager2 | wasabiRequired with upload: storage provider returned by prepare-upload.
upload.content_typestring | nullMedia MIME type when known.
speaker_diarizationbooleanIdentify speakers on Pro. Defaults to false.
cURL
curl --include --request POST https://fast-transcriber.com/api/v1/transcriptions \
  --header "Authorization: Bearer $FAST_TRANSCRIBER_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "source_url": "https://www.youtube.com/watch?v=VIDEO_ID",
    "speaker_diarization": false
  }'
202 Accepted

Response

Successful JSON responses use a top-level data envelope. A 204 response has no body.

FieldTypeDescription
Location headerstringRelative polling URL for this job.
data.iduuidTranscription job ID.
data.filenamestringDerived link label or uploaded filename.
data.statusstringInitial processing status.
data.created_atdate-timeUTC job creation time.
Response
{
  "data": {
    "created_at": "2026-09-03T10:12:00.000Z",
    "filename": "youtube.com-link.mp3",
    "id": "95c3fdd8-…",
    "status": "processing"
  }
}
Stable envelope

Errors

API errors return a machine-readable code and message.

StatusCodeMeaning
401missing_api_keyNo bearer key was supplied.
401invalid_api_keyThe bearer key is malformed, unknown, or revoked.
403pro_requiredSpeaker diarization was requested without a Pro account.
429daily_limit_reachedThe account has reached its daily transcription allowance.
400invalid_requestThe request body is not a JSON object.
400invalid_sourceThe body contains both source types or neither one.
400invalid_source_urlsource_url is not a valid HTTP(S) URL.
400invalid_uploadThe upload reference is missing a required field or has an invalid value.
400empty_uploadThe stored upload contains no bytes.
403upload_not_ownedThe upload key belongs to another account.
404upload_not_foundThe prepared upload no longer exists.
413file_too_largeThe stored upload is above the account's file limit.
415unsupported_typeThe uploaded object is not an accepted audio or video type.
503api_processing_unavailableThe transcription processing backend is unavailable.
503queue_unavailableThe processing job could not be queued.
Error envelope
{
  "error": {
    "code": "invalid_request",
    "message": "The request body must be a JSON object."
  }
}
Production guidance

Implementation notes

  • A 202 response means the job was queued, not that transcription is complete.
  • Poll the Location header until status is completed or failed.
  • source_url supports public YouTube, Instagram, TikTok, Facebook, Google Drive, and direct media URLs.
© 2026 FastTranscriberBuilt for developers who work with speech.