Finetuning.aiFinetuning.ai

Reimagine & Remove vocals

Make something new from a song you have the rights to — through the API

Two features work from an audio file you upload instead of from a text prompt:

  • Reimagine takes the lyrics and the length of your song and has Finetuning write and perform a brand-new track in a style you choose. It does not use the recording itself: no melody, no instruments, no voice carries over.
  • Remove vocals takes the recording and returns it with the singing taken out — the same song, as an instrumental.

Both start with the same upload. Both finish as an ordinary generation that you poll with GET /v1/generations/:id or receive on a webhook, exactly like music you generate from a prompt.

How it works

1. POST /v1/songs/uploads          → upload id  (Reimagine: we start listening for the lyrics — 1 credit)
2. GET  /v1/songs/uploads/:id      → status "transcribed" + the lyrics we heard   (Reimagine only)
3. POST /v1/reimagine              → generation id      (1 more credit the first time, 2 after that)
   POST /v1/remove-vocals          → generation id      (1 credit)
4. GET  /v1/generations/:id        → audioUrl when status is "completed"  — or wait for your webhook

Transcription is automatic, and costs 1 credit. A Reimagine upload starts listening for the lyrics as soon as it is stored; it usually takes 10–90 seconds. That credit counts toward your first Reimagine from the upload, so a first song still costs 2 credits in total — see Credits.

When you call POST /v1/reimagine without lyrics, we sing the transcript. Send your own lyrics to fix a misheard word or to write new ones — you don't have to wait for the transcript at all if you do.

Your rights come first

You may only upload a song you have the rights to use. Every upload needs an explicit confirmation — the API will not accept one without it.

If you build this into your own product, you must show your end user these statements, for the feature they chose, and have them confirm before you send attestationConfirmed: true. Sending it on their behalf without showing them the wording is not a confirmation. Send back the statement version along with it.

Reimagine

I wrote this song, or I own or have licensed the rights to use its lyrics and composition.

I won't use this to copy another artist's song or voice, and I'm responsible for how I use what I make.

Remove vocals

I made this recording, or I own or have licensed the rights to use this recording.

The current statement version is 2026-09-30. GET /v1/songs/config always returns the current version and wording; read it from there rather than hard-coding it. When the wording changes, the version changes too, and an upload sent with an old version is refused with ATTESTATION_REQUIRED until your user has seen the new wording.

We keep a record of every confirmation: the feature, the statement version, the exact statements, a one-way hash of the caller's IP address and the User-Agent. It is kept after the upload itself is deleted.

Reimagining a song that was uploaded for Remove vocals needs the Reimagine statements too, because that confirmation only covered the recording. Send them with POST /v1/songs/uploads/:id/transcribe.

Limits

FormatsMP3 or WAV. We read the format from the file itself, not its name. M4A/AAC isn't supported yet.
File size20 MB at most
Song length10 seconds to 10 minutes
What we keepA window of up to 3:00. Longer songs are cut on our side to the 3 minutes starting at trimStartSeconds (default 0). Shorter songs are kept whole.
Lyrics (Reimagine)Scaled to the song's length: 18 characters per second, at least 600 and at most 3,500. A 3:00 song allows 3,240 characters. Section tags such as [verse] count. The upload's lyricsCap field gives the exact number.
RetentionUploads are deleted 24 hours after they arrive — the audio and the transcript. The tracks you make from them are not deleted.
Upload caps10 uploads per rolling hour and 30 per rolling 24 hours, per account, counted together with uploads from the web app. Over either one is 429 UPLOAD_LIMIT with a Retry-After header (seconds until an upload slot frees up). Refused uploads (too big, too long, no rights confirmation) don't count.
Rate limits10 Reimagine / Remove vocals requests per minute. The usual 60 requests per minute across the API.

Credits and plans

StepCost
Listening to a Reimagine upload (transcription)1 credit, charged when it starts
The first Reimagine from that upload1 more credit — 2 in total
Every later Reimagine from the same upload2 credits each
Remove vocals1 credit (no transcription)

So one Reimagine costs 2 credits, as it always has; three styles from one upload cost 1 + 1 + 2 + 2 = 6. The same applies to a track from your own Library, because we still listen to it.

  • Transcription failed? Its credit comes back automatically. Your first retry with /transcribe is free; every retry after that costs 1 credit (and is refunded too if it fails). Transcribing again after a successful transcription also costs 1 credit.
  • Reimagining a Remove vocals upload? Calling /transcribe on it costs 1 credit, which counts toward the first Reimagine the same way.
  • Not enough credits to listen? POST /v1/songs/uploads for Reimagine answers 402 INSUFFICIENT_CREDITS before anything is uploaded or charged.
  • GET /v1/songs/uploads/:id tells you what the next render will cost (nextReimagineCredits).

Credits come from your monthly allowance first, then from credit packs. If a job fails — at submission or on our GPUs — the credits go back to where they came from, automatically and exactly once. A failed first Reimagine hands the transcription credit back to the upload, so the next try costs 1 again.

Reimagine and Remove vocals are part of the paid plans. API access already needs a Pro or Lifetime plan, so any valid API key can use them.

Private, always

Tracks made with Reimagine or Remove vocals are built from someone's own song, so they stay private to your account:

  • they can't be made public or shared with a link;
  • they never appear in Discover, charts, search or public playlists, and can't be added to a public playlist;
  • they don't get a generation certificate — GET /v1/generations/:id/certificate answers 403 PRIVATE_ONLY, because a certificate attests that Finetuning's model created the work.

You can download them and use them as your rights in the original song allow.

Webhooks

Pass webhook to POST /v1/reimagine or POST /v1/remove-vocals and we POST the finished (or failed) track to it, with the same payload as every other generation plus a type field ("reimagine" or "remove_vocals"). There is no webhook for the transcript: poll GET /v1/songs/uploads/:id, or skip the wait by sending your own lyrics.

Zapier's "New Completed Track" trigger doesn't fire for these tracks yet.

Errors

These are the errors specific to Reimagine and Remove vocals. Every error has the usual shape — see Errors.

CodeStatusDescription
ATTESTATION_REQUIRED400The rights confirmation is missing, not true, or for an old statement version. details carries the current version and statements
VALIDATION_ERROR400A field is missing or invalid; details.field names it
LYRICS_REQUIRED400No lyrics were sent and none were heard (for example an instrumental upload)
LYRICS_TOO_LONG400Over the length-scaled cap. details.maxLength is the cap
INSUFFICIENT_CREDITS402Not enough credits — to listen to a Reimagine upload (1), or for the render. details.cost and details.creditsRemaining
PAID_PLAN_REQUIRED403The account isn't on a paid plan
PRIVATE_ONLY403A certificate, public or share action on a Reimagine / Remove vocals track
NOT_FOUND404No upload with that id on your account
TRANSCRIPT_NOT_READY409Reimagine without lyrics while we're still listening. Retry when the upload's status is transcribed, or send lyrics
TRANSCRIPT_REQUIRED409Reimagining a Remove vocals upload that hasn't been transcribed. Call /transcribe first
CATALOGUE_MATCH409The recording matches a commercial release, so it was refused and deleted
CREDITS_CHANGED409Your balance changed during the request. Retry
UPLOAD_EXPIRED410The upload is past its 24 hours and has been deleted. Upload again
FILE_TOO_LARGE413Over 20 MB
UNSUPPORTED_FORMAT / UNREADABLE_AUDIO415Not an MP3 or WAV we can read
SONG_TOO_LONG / SONG_TOO_SHORT422Outside 10 seconds to 10 minutes
SOURCE_UNAVAILABLE422We couldn't download the url you gave us
TRIM_FAILED422We couldn't cut the 3:00 window from this file
QUEUE_FULL429Too many generations in progress at once
UPLOAD_LIMIT429More than 10 uploads in the last hour, or 30 in the last 24 hours. Retry-After (header) and details.retryAfterSeconds say when you can upload again; details.limit and details.windowSeconds say which cap
GENERATION_RATE_LIMITED429More than 10 Reimagine / Remove vocals requests in a minute
GENERATION_FAILED502We couldn't start the job. Your credits are already back; retry
FEATURE_COMING503Remove vocals is switched off for now. Nothing was charged

Endpoints

On this page