SFOLN

Catalogue / Documents & media

Audio Transcription API – Speech to Text

sfoln/audio-transcription · AI, Developer tools, Automation On request

Transcribe audio and video files (MP3, WAV, M4A, MP4…) to text by URL with Mistral Voxtral: language detection, optional segment timestamps and speaker labels. $10.50 per 1,000 audio minutes, billed per started minute; failed files are free.

About

What it does

Audio Transcription API – Speech to Text transcribes podcasts, interviews, meetings, voice notes, webinars and videos to text in bulk. Give the Actor direct URLs of audio or video files and get one transcript per file with detected language, duration and word count — plus optional segment timestamps and speaker labels. Transcription is performed by Mistral Voxtral Mini Transcribe 2, a speech model with strong accuracy across major languages and files of up to about 3 hours.

Price

Price per delivered record

EventPricePer 1,000Charged for
Transcribed audio minute
transcription-minute
$0.0105$10.5 / 1,000Charged per started minute of audio transcribed (a 3 min 20 s file = 4 events).

Apify free plan: up to 5 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~audio-transcription/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"audioUrls":["https://docs.mistral.ai/audio/obama.mp3"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/audio-transcription"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~audio-transcription/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Transcribe https://docs.mistral.ai/audio/obama.mp3 with segment timestamps and give me a short summary of what is said.

Input

Input fields

List publicly reachable audio or video file URLs. Each file produces one dataset record with the transcript.

FieldTypeDefaultMeaning
audioUrls *arrayrequiredAudio / video URLs
Direct, public URLs of audio or video files (MP3, WAV, M4A, FLAC, OGG, MP4, MOV, WEBM…), one per line. Up to about 3 hours per file. Page URLs (e.g. YouTube watch pages) are not supported. Accounts on the Apify free plan can process up to 5 files per run.
languagestring—Language
Optional ISO 639-1 language code of the speech (e.g. en, de, fr, es). Improves accuracy; leave empty for automatic detection.
timestampsbooleanfalseSegment timestamps
Return the transcript split into segments with start/end times in seconds.
diarizebooleanfalseSpeaker labels
Label segments by speaker (speaker_1, speaker_2, …). Implies segment timestamps.
maxFileSizeMbinteger100Max file size (MB)
Files larger than this are skipped without charge. Range 1–1024.
maxFilesinteger100Max files
Safety cap on the number of files processed in this run. Range 1–5000.
concurrencyinteger3Concurrency
Files transcribed in parallel. Range 1–5.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified transcription response to each record.
Example input
{
  "audioUrls": [
    "https://docs.mistral.ai/audio/obama.mp3"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstringInput
URL as submitted.
urlstringURL
languagestring | nullLanguage
Detected (or requested) language code.
textstringTranscript
durationSecsnumberDuration (s)
billedMinutesintegerBilled minutes
Started minutes charged as transcription-minute events.
wordCountintegerWords
segmentCountintegerSegments
segmentsarraySegments
[{ start, end, text, speaker }] — only with timestamps or diarize.
modelstringModel
fileSizeBytesintegerFile size (bytes)
Size the server reported for the file; on skipped_invalid records with error code file_too_large.
estimatedMinutesintegerEstimated minutes
Estimated length in started minutes (from the file size); on records refused because of the free-plan length limit or the remaining budget.
warningsarrayWarnings
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
sourcestringSource
fetchedAtstringFetched at
Example record
{
  "input": "https://docs.mistral.ai/audio/obama.mp3",
  "url": "https://docs.mistral.ai/audio/obama.mp3",
  "language": "en",
  "text": "This week, I traveled to Chicago to deliver my final farewell address to the nation, ...",
  "durationSecs": 203,
  "billedMinutes": 4,
  "wordCount": 525,
  "segmentCount": 33,
  "segments": [
    {
      "start": 0.8,
      "end": 8.1,
      "text": "This week, I traveled to Chicago to deliver my final farewell address to the nation, following in the tradition of presidents before me.",
      "speaker": null
    }
  ],
  "model": "voxtral-mini-latest",
  "status": "ok",
  "charged": true,
  "chargedEvent": "transcription-minute",
  "source": "mistral-voxtral",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents