Skip to main content

HeartMuLa Transcribe is a multilingual speech-to-text endpoint tuned for sung vocals: send one audio URL and get the lyrics back as text. There are no options, and no line timings, confidence values or speaker labels are returned.

From $0.05/request

Workbench

Input

Speech to text
0/1

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

0 / 1 files
A URL that resolves directly to an audio file. Pages that return HTML fail as an invalid asset. No language hint is needed or accepted — the model is multilingual and picks it up from the audio. at least 1 characters

Checking your account before enabling submission and pricing.

1 required field missing: Input audio

Output

Ready for a new run

Your result will appear here.

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

Related models and next tasks

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.

Lyrics pulled out of a finished mix, handed back as text

HeartMuLa Transcribe takes one field — an audio URL — and returns the words sung in that recording as text on the task. There is no language setting, no timestamp option and no speaker toggle, because those fields do not exist in the schema. It is the only family in this catalog that finishes a task with text instead of a media file, so nothing is written to media storage and there is no download step to build. Billing is per transcription rather than per minute, which makes a six-minute track and a twenty-second hook cost exactly the same.

Open the playground
Request fields
One: audio_url, a URL that resolves to audio
Output
Lyric text on the task result — no file, no asset URL
Billing
Per transcription, independent of audio length
Languages
Multilingual; the detected language is not reported
Task ceiling
3,600 seconds from submission to a terminal state
Retention
No media asset written; uploaded audio deleted after 1 day
Shape
One required field, and the schema refuses the restaudio_url is the entire request body: a non-empty URI string that has to resolve directly to the audio. Every other key fails validation rather than being quietly dropped, so a run that returns a transcript is a run that used exactly what you sent. There is nothing to tune between calls and nothing to keep in sync as the integration grows.
Output
Text on the task, not a file in a bucketEvery other family here ends by writing a file for you to fetch. This one ends on the task itself, with the transcript in the result. No download step, nothing entering the 14-day media window, and one branch in your client that reads a text field where the others walk an asset list.
Target
Tuned for a voice fighting a mixA sung line arrives compressed, doubled, drenched in reverb and competing with instruments in its own frequency range — the case general speech models were not trained on, and where they tend to hand back fragments. That is what this model is tuned for. For an interview or a podcast, with no mix to fight, a general speech-to-text model is the better tool.

What the HeartMuLa Transcribe API does well

  • A request you can write from memory

    One key, one string value. There is no parameter sheet to maintain, no combination of settings that can silently change what the model is asked to do, and no migration to plan when the integration grows. The closed schema means a typo in a key name comes back as an invalid request immediately, rather than as a transcript produced with a setting you thought you had applied.

  • Lyric text arrives on the task itself

    The result carries the transcript directly, so there is no signed URL to fetch, no object storage to write into and no cleanup job to schedule for downloaded files. A pipeline that already handles media tasks needs one extra branch: when this endpoint finishes, read the text field instead of walking an asset list, and send it straight to wherever your lyrics already live.

  • Duration never enters the bill

    Charging is per accepted request, so audio length, sample rate and how much text actually comes back all leave the amount alone. Budgeting a backlog becomes a multiplication — track count times the per-run price — instead of a function of total runtime. The flip side is worth planning around: a pile of very short clips is comparatively expensive per minute of audio processed.

  • Multilingual without a language field

    The model handles multiple languages on its own and there is no field to declare one, which removes a whole class of setup work from a mixed-language catalog: no detection pass in front of the call, no per-language routing table, no wrong-language retries. It also does not report which language it found, so if you need that label, it has to come from your own metadata.

  • Every line comes back as sung

    SpicyAPI adds no content filter of its own, so profanity and uncensored lyrics are transcribed rather than masked or bleeped. For rights review, moderation queues and uncensored audio products, that matters: a transcript with holes in it cannot answer the question those workflows were built to ask. The rights to the audio and to the transcript remain yours to hold.

  • Asynchronous, with a deliberately wide ceiling

    Submitting returns a task straight away; the transcript is read back by polling it or by handling the callback you registered. The ceiling is 3,600 seconds from creation to a terminal state, set that wide because queue time alone regularly passes five minutes. A batch of a few hundred tracks therefore goes out from one worker and is collected as results land.

Who HeartMuLa Transcribe is for

  • Music catalog and metadata teams

    Making a back catalog searchable by what it says

    Lyric text turns a shelf of audio files into something that can be searched, tagged, matched and displayed. Per-run pricing is what makes a long tail affordable here: the cost of the run is the track count, not the total runtime, so the ten-minute album closer is no more expensive than the interlude before it.

  • Short-form video and captioning

    Getting the words before the timing

    Captions over a music bed need the lines first and the timing second. This endpoint hands you the text; a forced-alignment pass against the same audio supplies the timings, because the output carries no line times, no confidence values and no segmentation. That split is worth designing for up front rather than discovering at the caption step.

  • Trust, safety and rights review

    Reading what a track actually says before it ships

    A reviewer deciding on a content-rating label or a rights claim needs the words, not a summary and not a redacted version. Because no platform filter is applied, the transcript reflects the recording — which is the only form in which it is useful for that decision. What the transcript does not do is tell you who holds the rights; that check stays yours.

  • Uncensored audio products

    A transcription step that does not refuse the material

    Catalogs that a general provider would bounce are transcribed here as recorded. That keeps search, tagging and accessibility features working on the same content the rest of the product is built around, instead of leaving a section of the library with no text at all. Responsibility for the source material and its rights stays with the caller.

How to call the HeartMuLa Transcribe API

  1. Point audio_url at the file, not at a page about it

    The URL has to answer with the audio bytes themselves. A signed link with an expiry is fine while it is still valid. A player page, a share link or anything else that answers with HTML fails as an invalid asset before a single line is transcribed. If you are not sure which one you have, fetch the URL yourself once and look at what comes back.

  2. Send the one field with an Idempotency-Key

    The body carries audio_url and nothing else. Keep the task id you get back, and send an Idempotency-Key with the request: the key is honoured for 24 hours, so a retry after a dropped connection lands on the same task rather than creating a second, separately billed one.

  3. Poll or take the callback, with timeouts near the ceiling

    The endpoint is asynchronous. Poll with a growing interval, or register a callback URL and drop the loop entirely. Leave room up to the 3,600-second ceiling: queue time regularly runs past five minutes, and a client timeout of a minute or two makes a perfectly healthy run look dead.

  4. Read the text off the task and copy it somewhere of your own

    The transcript arrives as text on the result, so there is nothing to download and nothing appears in media storage. It is erased on the same schedule as prompt text, which means your store is the durable copy, not ours. Write it next to the track id at the moment the task reaches a terminal state.

  5. Screen the batch before you run it

    An instrumental returns little or nothing, and that run still reached a successful terminal state, so it is charged like any other. A vocal-presence check in front of a large batch pays for itself quickly, since a six-second clip and a six-minute track cost the same. Keep the audio short enough to be one work: several tracks stitched into one file come back as one unbroken block of text.

HeartMuLa Transcribe worked examples

  • A single track from public storage

    The minimum viable call: one key, one URL that answers with audio. Nothing else is accepted, and nothing else is needed. The response is a task record; the lyrics arrive in that task's result once it reaches a terminal state.

    {"audio_url": "https://files.example.com/masters/track-07.mp3"}
  • A private file behind a signed link

    Material that is not public works as long as the link itself resolves to the audio while it is valid. Give the signature enough life to cover queue time, which regularly runs past five minutes, rather than the seconds a direct download would need.

    {"audio_url": "https://storage.example.com/takes/session-04.wav?X-Amz-Expires=3600&X-Amz-Signature=2f9c1a"}
  • A back catalog run over a worklist

    Because a request is one field, a batch is a loop over a list of URLs with an Idempotency-Key per row. Each row settles on its own, so a single failed row is retried without rerunning the set, and the cost of the whole run is the row count times the per-transcription price rather than the total runtime of the catalog.

HeartMuLa Transcribe API questions

Treat this as a text service that happens to take audio, not as a media endpoint that happens to return words. The differences that matter downstream all follow from that: your client reads a field instead of fetching a file, your storage plan has to include the transcript because ours does not keep it long, and captioning needs an alignment pass you supply yourself. Upstream, the only thing you control is the URL — so the work that actually improves results is making sure it resolves to the audio, and that the audio has someone singing on it.