Finetuning.aiFinetuning.ai

POST /v1/songs/uploads/:id/transcribe

Listen to an upload again, or listen to a Remove vocals upload so you can reimagine it

You rarely need this: a Reimagine upload is transcribed automatically. Call it to:

  • retry after status: "failed", or when a transcription has gone quiet for more than 3 minutes;
  • reimagine a song you uploaded for Remove vocals. That upload was confirmed for the recording only, so confirm the Reimagine statements here too.

While a transcription is running (and for 3 minutes after it started) this returns the upload unchanged instead of starting a second one, and charges nothing.

Cost

SituationCost
Listening to a Remove vocals upload so you can reimagine it1 credit — counts toward the first Reimagine (1 more, so 2 in total)
The first retry after status: "failed"Free (the failed transcription's credit was already refunded)
Any later retry after a failure1 credit, refunded if it fails too
Transcribing again after transcribed or no_vocals1 credit
Resubmitting a transcription that went quiet for over 3 minutesFree — it runs on the credit already charged

The upload's pricing.retranscribeCredits says which applies. Without enough credits you get 402 INSUFFICIENT_CREDITS and nothing is started.

Request

POST https://pub.finetuning.ai/v1/songs/uploads/:id/transcribe

Headers

HeaderTypeRequiredDescription
X-API-KeystringYesYour API key
Content-TypestringYesapplication/json

Path parameters

ParameterTypeDescription
idstringThe upload ID from POST /v1/songs/uploads

Body parameters

ParameterTypeRequiredDescription
attestationVersionstringOnly for a Remove vocals uploadThe current rights statement version ("2026-09-30")
attestationConfirmedbooleanOnly for a Remove vocals uploadtrue — your end user saw the Reimagine statements and confirmed them

Send attestationConfirmed: true only after your end user has seen the Reimagine statements from GET /v1/songs/config and confirmed them.

Example request

curl -X POST https://pub.finetuning.ai/v1/songs/uploads/6b232256-e036-42f5-8cc7-49049cea1da4/transcribe \
  -H "X-API-Key: ft_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "attestationVersion": "2026-09-30", "attestationConfirmed": true }'
await fetch(`https://pub.finetuning.ai/v1/songs/uploads/${uploadId}/transcribe`, {
  method: 'POST',
  headers: { 'X-API-Key': process.env.FINETUNING_API_KEY!, 'Content-Type': 'application/json' },
  body: JSON.stringify({ attestationVersion: '2026-09-30', attestationConfirmed: true }),
})

Response

200 OK — the upload object, usually with status: "transcribing". Poll GET /v1/songs/uploads/:id for the result.

Errors

CodeStatusDescription
ATTESTATION_REQUIRED400A Remove vocals upload without the Reimagine confirmation
INSUFFICIENT_CREDITS402This transcription costs 1 credit and there's none left. Nothing was started
PAID_PLAN_REQUIRED403Not on a paid plan
NOT_FOUND404No upload with that id on your account
CATALOGUE_MATCH409The upload was blocked
UPLOAD_EXPIRED410The upload's 24 hours are up

On this page