Fast Transcriber API · File upload

File upload transcription API for audio and video

Move local media into Fast Transcriber without proxying the full file through the API application. Prepare a short-lived storage destination, transfer the bytes directly, then queue the account-owned upload for transcription.

Use it from your product backend or connect a compatible AI agent over MCP.

  • Bearer authentication
  • Asynchronous jobs
  • Structured JSON
Prepare an audio upload
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 · Presigned upload target returned
Why Fast Transcriber?

Separate large-file transfer from job creation

POST exact file metadata to /api/v1/uploads first. The server validates the request and returns either a single presigned PUT target or a multipart upload plan. Your client sends bytes to that storage destination without exposing the Fast Transcriber bearer key.

After the upload is complete, create a transcription with the returned key and storage value plus the original filename, size, and content type. The API verifies ownership and stored metadata before the object enters the normal asynchronous transcription lifecycle.

With Fast Transcriber

  • One asynchronous job lifecycle across supported sources
  • Source resolution and media retrieval handled server-side
  • One transcript response with text and timestamped segments
  • A direct-upload fallback for authorized private media

Building every source yourself

  • Separate URL and access handling for every source
  • Queue, retry, polling, and failure-state infrastructure
  • Source-specific results that need normalization
  • Ongoing maintenance as external sources change

One API family

One source workflow. One predictable job model.

Use the same status lifecycle and transcript fields across supported public URLs and account-owned uploads.

Input reference

What this endpoint accepts

Supported inputs

  • Supported local audio files
  • Supported local video files
  • Single PUT transfers when returned by the prepare endpoint
  • Multipart transfers when returned by the prepare endpoint

Access and input boundaries

  • Send the exact byte size and preserve every server-returned upload identity value.
  • Never attach the Fast Transcriber bearer key to the presigned storage request.
  • Branch on data.upload.type; the API chooses whether the transfer is single or multipart.
  • Complete multipart uploads before referencing the object in a transcription request.
  • Upload references are account-scoped and cannot be reused by a different API account.
How it works

Queue once, then follow the job

Transcription runs outside the original HTTP request. Save the returned job identity and poll its status instead of submitting duplicate work.

  1. 01

    Prepare the upload

    POST filename, size, and optional content_type to /api/v1/uploads, then inspect data.upload.type.

  2. 02

    Transfer the bytes

    PUT the file to the single target, or upload every multipart part and commit their ETags.

  3. 03

    Queue the owned object

    POST the returned key, storage value, and exact file metadata to /api/v1/transcriptions as upload.

  4. 04

    Poll for the result

    Follow the Location header until the transcription status is completed or failed.

Features and use cases

Built for production transcription workflows

Application uploads

Let users submit authorized recordings from your product while the bytes travel directly to the prepared storage target.

Private source processing

Download protected media through your own authorized integration, then use upload rather than exposing the source publicly.

Resilient large transfers

When the server returns multipart, retry an individual part and explicitly complete or abort the session.

Code example

Send a real API request

Authenticate from your backend, create the job, and store the returned Location header for status retrieval.

Prepare an audio upload
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
  }'
Queue the completed upload
curl --include --request POST https://fast-transcriber.com/api/v1/transcriptions \
  --header "Authorization: Bearer $FAST_TRANSCRIBER_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "upload": {
      "filename": "interview.mp3",
      "content_type": "audio/mpeg",
      "key": "RETURNED_STORAGE_KEY",
      "size": 1234567,
      "storage": "r2"
    },
    "speaker_diarization": false
  }'
200 OK · Presigned upload target returned

Implement the complete request flow

Authentication, source rules, request fields, and status handling are covered in the technical guide.

Read the complete file upload guide
Result contract

One predictable transcript response

Uploaded-file jobs use the same response as public-link jobs: explicit status, full text on completion, detected duration, and timestamped segments. The upload mechanism does not create a second result model.

status
Use completed and failed as terminal states.
text
The complete transcript becomes available on completion.
segments[]
Each segment includes start, end, and text values.
duration_seconds
The detected duration of the processed recording.
application/json
{
  "data": {
    "id": "95c3fdd8-...",
    "filename": "source-media.mp4",
    "status": "completed",
    "created_at": "2026-08-24T16:30:00.000Z",
    "duration_seconds": 1842,
    "text": "Completed transcript text...",
    "segments": [
      { "start": 0, "end": 4.2, "text": "Welcome." }
    ]
  }
}
200 OK · completed transcript
Common questions

File upload API FAQ

Do I POST the file body to /api/v1/uploads?
No. That endpoint accepts metadata and returns a presigned storage destination. Send the bytes to the returned URL or multipart part URLs.
How do I know whether to use multipart upload?
Inspect data.upload.type in the prepare response. Your client should implement the transfer strategy returned by the server rather than choosing its own threshold.
Can another account queue my uploaded object?
No. The object key is scoped to the authenticated account and ownership is checked before a transcription is queued.
When can I queue a multipart file?
Only after every part has uploaded and the multipart completion endpoint has successfully committed the object.
Related endpoints

Use the same job model elsewhere

API overview

Ready to build?

Add File upload transcription to your product.

Create a key, then follow the source guide to queue your first job.