REST endpoint

Prepare a direct upload

Send file metadata before transferring bytes. Fast Transcriber validates the account, media type, and file-size allowance, then returns either one presigned PUT target or a set of multipart part URLs.

POST/api/v1/uploads200 OK

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
filenamerequiredstringOriginal filename, up to 240 characters.
sizerequiredintegerExact file size in bytes; must be greater than zero.
content_typestring | nullMIME type when known, such as audio/mpeg.
speaker_diarizationbooleanPreflight the Pro-only speaker diarization requirement. Defaults to false.
cURL
curl --request POST https://fast-transcriber.com/api/v1/uploads \
  --header "Authorization: Bearer $FAST_TRANSCRIBER_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "filename": "interview.mp3",
    "content_type": "audio/mpeg",
    "size": 1234567
  }'
200 OK

Response

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

FieldTypeDescription
data.keystringAccount-scoped object key used when queueing the job.
data.storager2 | wasabiStorage provider. Return it unchanged in later requests.
data.content_typestringValidated media MIME type.
data.upload.typesingle | multipartSelects the byte-transfer workflow.
data.upload.headersobjectSingle upload only: headers to copy to the storage request.
data.upload.methodPUTSingle upload only: HTTP method for the storage request.
data.upload.urlstringPresigned PUT URL for a single upload.
data.upload.partsarrayOrdered presigned part URLs for a multipart upload.
data.upload.parts[].part_numberintegerMultipart only: positive number identifying this part.
data.upload.parts[].urlstringMultipart only: presigned PUT URL for this part.
data.upload.part_sizeintegerMultipart only: byte size for each part except the final part.
data.upload.upload_idstringMultipart only: identifier required to complete or abort the upload.
Response
{
  "data": {
    "content_type": "audio/mpeg",
    "key": "transcriptions/user_…/interview.mp3",
    "storage": "r2",
    "upload": {
      "headers": { "content-type": "audio/mpeg" },
      "method": "PUT",
      "type": "single",
      "url": "https://storage.example/presigned-target"
    }
  }
}
Multipart response
{
  "data": {
    "content_type": "video/mp4",
    "key": "transcriptions/user_…/recording.mp4",
    "storage": "r2",
    "upload": {
      "part_size": 16777216,
      "parts": [
        {
          "part_number": 1,
          "url": "https://storage.example/presigned-part-1"
        }
      ],
      "type": "multipart",
      "upload_id": "upload_…"
    }
  }
}
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_uploadfilename and a positive byte size are required.
413file_too_largeThe declared size is above the account's file limit.
415unsupported_typeThe filename or MIME type is not accepted audio or video.
503api_uploads_unavailableThe upload backend is temporarily unavailable.
Error envelope
{
  "error": {
    "code": "invalid_upload",
    "message": "filename and a positive size are required."
  }
}
Production guidance

Implementation notes

  • Upload the file bytes to the returned storage URL, not to fast-transcriber.com.
  • Keep key, storage, filename, size, and content_type for the create-transcription request.
  • The maximum accepted size comes from the authenticated account plan.
  • Single-upload URLs expire after 15 minutes; multipart part URLs expire after four hours.
  • For multipart uploads, use the returned part_size for every part except the final part. R2 currently returns 16 MiB.
© 2026 FastTranscriberBuilt for developers who work with speech.