Skip to main content

Grok STT is xAI's speech-to-text: send an audio URL and get back the transcript as text plus word-level timings and the detected language. It covers 25 languages, with per-channel transcripts and key-term hints.

From $0.00003/s

Workbench

Input

Speech to text
1/1

Drop an audio file here, or browse · 1 file · Max 90 MB · MP4 · MP3 · WAV

1 / 1 files
The audio to transcribe: an uploaded MP3 or WAV, or a public URL to MP3, WAV, M4A, FLAC, OGG, Opus, AAC, MP4 or MKV. 1 second to 2 hours. The length of this audio is what you are billed for. at least 1 characters

Checking your account before enabling submission and pricing.

Output

Ready for a new run

Your result will appear here.

Configure the inputs, review the estimate, then run the model.

Missing the model you need?

Tell us what to add and where you would use it. Requests go to the people who decide what gets onboarded next.

Speech to text in 25 languages, with the numbers, names and channels the way you want them

Grok STT from xAI takes an audio URL and returns the words as text on the task, plus a structured transcript with every word timed. Leave the language empty and it is detected; set it and numbers can be written as digits. List the names that matter and they come back spelled your way, and switch on multichannel so each channel of a call gets its own line. Nothing is written to media storage, and you are billed for the seconds of audio you actually send.

Open the playground
Input
audio_url: an uploaded MP3 or WAV, or a public URL to a common audio or video format
Length
1 second to 2 hours per request
Languages
25 spoken languages; detected automatically when you leave language empty
Output
Transcript text, plus a word-timed transcript; one entry per channel with multichannel
Billing
Per second of audio; none of the options changes the price
Retention
No media asset written; uploaded audio deleted after 1 day
Languages
25 spoken languages, detected or declaredLeave language empty and the language is detected; speech in any of the 25 supported languages is transcribed either way. Set it when you want text_normalization, which writes numbers the way that language writes them and therefore needs to know which one to use.
Structure
The text on the task, and a timed transcript beside itThe result carries the full transcript as text. Next to it, output.transcript lists the detected language, the audio length in seconds and every word with its start and end time, and with multichannel on it repeats that for each channel. No file is produced. Speaker labels are not part of the result.
Channels
One line per channel when speakers are recorded apartWith multichannel on, each channel of the file (up to 8) is transcribed separately and returned on its own line, in channel order. It is the setting people miss: in our tests a stereo file with a different speaker on each side came back with only one of them when it was off.

What the Grok STT API does well

  • Numbers written the way people write them

    Turn on text_normalization and spoken figures, prices, dates and units come back as digits. In our test, "one thousand two hundred fifty dollars on March fourteenth" became "$1,250 on March 14". It needs language, because every language writes these differently; without it the request is rejected before it runs. Off by default.

  • Names spelled the way you list them

    keyterms takes up to 100 words or short phrases of up to 50 characters, one per row, and biases the transcript toward them. Two invented names in a lounge announcement came back as "Xandrel" and "Corvessa" without the list, and exactly right with it. Use it for guests, brands, product names and jargon.

  • Both sides of a call, not just one

    A recording with the agent on the left channel and the customer on the right needs multichannel. Each side comes back on its own line, and output.transcript.channels carries the word timings for each. Without it, our stereo tests returned only one of the two speakers, and the other side was simply missing.

  • Um and uh, kept or cleaned

    Filler words are removed by default, which gives clean captions and notes. Turn filler_words on for a verbatim record: in our test the transcript then began with "Um, so, uh," exactly as spoken. Neither setting changes the price.

  • Unfiltered speech comes back as spoken

    SpicyAPI adds no content filter. In our tests recordings of our strongest monologue and narration scripts came back word for word, with no asterisks, bleeps or gaps. That keeps search, captions and review working on the same material the rest of your product is built around. The rights to the audio and the consent of the people recorded stay with you.

  • Long recordings without a long wait

    A request takes anything from 1 second to 2 hours of audio. In our runs a 10-second clip came back in about 3 seconds and a full hour in about 15. Submitting returns a task straight away, and the transcript is read from that task once it finishes.

Who Grok STT is for

  • Podcasters and video editors

    Subtitles and show notes from the recording you already have

    Every word arrives with a start and end time, so caption lines can be cut to whatever length your player needs. List guest and brand names in keyterms so they are spelled once and correctly, and leave filler_words off for text that reads cleanly.

  • Support and sales teams

    Recorded calls with each side kept apart

    Calls are often recorded with one person per channel. With multichannel on, the agent and the customer come back on separate lines, which is what a review, a summary or a search over the call needs. There are no speaker labels, so a recording with everyone mixed into one channel returns a single stream of text.

  • Meeting and interview notes

    Notes where the figures and the names are right

    Set language and turn on text_normalization and amounts, dates and quantities arrive as written figures instead of spelled-out words. Add the attendees and product names to keyterms and they stop drifting between spellings from one meeting to the next.

  • Uncensored audio creators and platforms

    A transcription step that does not refuse the material

    Audio drama, roleplay recordings and unfiltered audiobook catalogs are transcribed as spoken, so search, captions and review work on the whole library instead of leaving a section with no text. Responsibility for the source material and for the consent of the people in it stays with the caller.

How to call the Grok STT API

  1. Point audio_url at the audio itself

    Upload an MP3 or WAV, or pass a public URL that answers with the audio bytes. MP3, WAV, M4A, FLAC, OGG, Opus, AAC, MP4 and MKV all work, from 1 second to 2 hours. A player page or a share link that returns HTML fails, and raw audio without a file header (PCM, μ-law, A-law) is not accepted.

  2. Add what you know about the recording

    Set language if you know it, list names and brand words in keyterms, and turn on text_normalization for digits (it needs language). If speakers were recorded on separate channels, turn on multichannel; if you want the ums and uhs, turn on filler_words.

  3. Send it with an Idempotency-Key and wait for the task

    Submitting returns a task. Send an Idempotency-Key so that a retry after a dropped connection lands on the same task instead of creating a second one, then poll the task or take the callback you registered.

  4. Read the text, and keep your own copy

    The transcript arrives as text on the task result, and output.transcript holds the word timings, the detected language and the audio length. Nothing is written to media storage, and the transcript is erased with the prompt data, so copy it into your own store when the task finishes.

Grok STT worked examples

  • A stereo call with one speaker on each side

    A 12-second recording with a woman on the left channel and a man on the right, sent with multichannel on. Each side came back on its own line. With multichannel off, the same file returned only the woman's words.

    {"audio_url": "https://files.example.com/calls/support-call-0412.wav", "multichannel": true}
  • Names that have no dictionary spelling

    A lounge announcement with two invented names, sent with both listed as key terms. Without the list the same audio came back as "Xandrel" and "Corvessa"; with it the names were exactly as listed.

    {"audio_url": "https://files.example.com/announcements/lounge-announcement.mp3", "keyterms": [{"term": "Xandrelle"}, {"term": "Qorvessa"}]}
  • A booking confirmation with the figures as digits

    A spoken confirmation sent with the language declared and text_normalization on. The price and the date came back as "$1,250" and "March 14" instead of words.

    {"audio_url": "https://files.example.com/calls/booking-confirmation.mp3", "language": "en", "text_normalization": true}

Grok STT API questions

Most of the quality here comes from what you tell it before you run it. Declare the language when you know it, list the names that must not drift, and turn on multichannel the moment a recording keeps its speakers on separate channels; that one setting decides whether half a conversation goes missing. Then read the timed transcript, not only the text, if you are building captions. The price follows the seconds of audio and nothing else, so try it on a short clip first and read the live quote on the page.