Finetuning.aiFinetuning.ai

GET /v1/songs/config

Prices, limits, and the rights statements your users must confirm

Everything you need before an upload: what Reimagine and Remove vocals cost, the upload limits and caps, whether Remove vocals is switched on, and the current rights statements and their version.

You must show your end user the statements for the feature they picked and have them confirm before you send attestationConfirmed: true; send the version back with the upload.

Request

GET https://pub.finetuning.ai/v1/songs/config

Headers

HeaderTypeRequiredDescription
X-API-KeystringYesYour API key

Example request

curl https://pub.finetuning.ai/v1/songs/config \
  -H "X-API-Key: ft_live_your_key_here"
const res = await fetch('https://pub.finetuning.ai/v1/songs/config', {
  headers: { 'X-API-Key': process.env.FINETUNING_API_KEY! },
})
const { data: config } = await res.json()
// Show config.attestation.statements.reimagine to your user, then upload with
// attestationVersion: config.attestation.version, attestationConfirmed: true

Response

200 OK
{
  "data": {
    "available": true,
    "credits": { "transcribe": 1, "reimagineAfterTranscribe": 1, "reimagine": 2, "removeVocals": 1 },
    "limits": {
      "formats": ["mp3", "wav"],
      "maxUploadBytes": 20971520,
      "minSourceSeconds": 10,
      "maxSourceSeconds": 600,
      "windowSeconds": 180,
      "retentionHours": 24,
      "lyricsCap": { "charsPerSecond": 18, "min": 600, "max": 3500 },
      "uploadCaps": [
        { "limit": 10, "windowSeconds": 3600 },
        { "limit": 30, "windowSeconds": 86400 }
      ]
    },
    "removeVocalsAvailable": true,
    "fingerprintEnabled": false,
    "attestation": {
      "version": "2026-09-30",
      "statements": {
        "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."
        ]
      }
    }
  }
}

Response fields

FieldDescription
availabletrue when this account's plan includes Reimagine and Remove vocals
credits.transcribeListening to a Reimagine upload (charged when it starts, refunded if it fails)
credits.reimagineAfterTranscribeThe first Reimagine from an upload whose transcription was paid — so 2 in total
credits.reimagineEvery later Reimagine from the same upload (and one without a paid transcription)
credits.removeVocalsRemove vocals (no transcription)
limitsUpload limits; windowSeconds is the most we keep, retentionHours how long we keep it. The lyrics cap for a song is clamp(ceil(charsPerSecond × seconds), min, max)
limits.uploadCapsUploads allowed per account in each rolling window, counted together with the web app. Over one: 429 UPLOAD_LIMIT with Retry-After
removeVocalsAvailablefalse while Remove vocals is switched off — POST /v1/remove-vocals then answers 503 FEATURE_COMING
fingerprintEnabledWhether uploads are checked against a commercial music catalogue
attestationThe statements per feature and their version

On this page