API

Send a file, get a timestamped transcript back. The API draws on the same hours as the app - plan hours first, then top-up credits. A file costs exactly its audio length and failed jobs refund automatically. Create a key in Settings → API keys and get hours on the pricing page.

Authentication

Pass your key as a bearer token on every request. Keys start with fs_live_ and can be revoked in Settings at any time.

Authorization: Bearer fs_live_...

Create a transcription

POST /api/v1/transcriptions - the file is the raw request body (not multipart), with the name in X-Filename. Audio and video both work; files can be up to 10 hours. The response returns immediately while transcription runs in the background - it also shows the hours you have left.

curl -X POST https://flashscribe.ai/api/v1/transcriptions \
  -H "Authorization: Bearer $FLASHSCRIBE_API_KEY" \
  -H "X-Filename: interview.mp3" \
  --data-binary @interview.mp3
{
  "id": "1f0f9a4e-...",
  "status": "pending",
  "original_name": "interview.mp3",
  "duration_sec": 1847.3,
  "credits_charged_sec": 1847.3,
  "credits_remaining_sec": 16152.7,
  "created_at": "2026-08-26T14:03:07.512Z"
}

Fetch the result

GET /api/v1/transcriptions/{id} - poll until status is completed (roughly a minute per audio-hour). Completed responses include the full text, word-level timestamps, and sentence-shaped subtitle cues.

curl https://flashscribe.ai/api/v1/transcriptions/1f0f9a4e-... \
  -H "Authorization: Bearer $FLASHSCRIBE_API_KEY"
{
  "id": "1f0f9a4e-...",
  "status": "completed",
  "language": "english",
  "duration_sec": 1847.3,
  "text": "Welcome back to the show - today we're talking about...",
  "words": [{ "word": "Welcome", "start": 1.24, "end": 1.61 }, ...],
  "cues":  [{ "start": 1.24, "end": 3.81, "text": "Welcome back to the show -" }, ...]
}

Errors

Errors are JSON with an error message and a meaningful status code:

Hours are charged when the upload is accepted and refunded in full if transcription fails. API usage always draws on your paid hours - the free daily allowance applies only in the app.