Finetuning.aiFinetuning.ai

POST /v1/instrumental

Generate an instrumental music track

Generate an instrumental music track from a text description and submit it to the generation queue. Returns immediately with a processing status — the rendered audio arrives via webhook or by polling GET /v1/generations/:id.

Instrumental tracks are produced by a dedicated instrumental-only model. There are no vocals, lyrics, BPM, key, scale, or time-signature controls — the model reads your description and picks the instrumentation and tempo for you.

There is no GET /v1/instrumental. Instrumental tracks live in the same store as music — to list or fetch them, use GET /v1/generations?type=instrumental and GET /v1/generations/:id.

Instrumental generations draw from the same monthly credit pool as music. API keys already require a Pro or Lifetime plan, so any valid key can generate them.

Request

POST https://pub.finetuning.ai/v1/instrumental

Headers

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

Body parameters

ParameterTypeRequiredDefaultDescription
promptstringYesDescription of the track (max 700 chars)
durationnumberNo120Length in seconds. Range 30–210, snapped to 15 s steps. Free tier capped at 120; paid up to 210
enhancebooleanNotrueExpand your short description into a full music prompt before generating. Set false to use your words verbatim
seednumberNoSeed for reproducibility. Omit for a random seed
webhookstringNoHTTPS URL we'll POST the completed (or failed) track to. Skips polling. Max 2048 chars. Identified by User-Agent: finetuning-webhook/1.0. See the Webhooks guide

Example request

curl -X POST https://pub.finetuning.ai/v1/instrumental \
  -H "X-API-Key: ft_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "dreamy lofi piano with soft vinyl crackle",
    "duration": 120,
    "enhance": true,
    "seed": 1234567,
    "webhook": "https://your-app.com/finetuning-callback?token=YOUR_SECRET"
  }'

Response

202 Accepted
{
  "data": {
    "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "status": "processing",
    "type": "instrumental",
    "prompt": "dreamy lofi piano with soft vinyl crackle",
    "parameters": { "duration": 120, "seed": 1234567 },
    "webhook": null,
    "creditsRemaining": 1952,
    "createdAt": "2025-01-15T10:30:00Z"
  }
}

If webhook was not provided, the field is returned as null.

Response fields

FieldTypeDescription
data.idstringUnique generation ID (UUID)
data.statusstringprocessing, pending, completed, failed
data.typestringAlways instrumental for this endpoint
data.promptstringThe prompt used
data.parameters.durationnumberRequested duration in seconds (after snapping)
data.parameters.seednumberSeed used for generation
data.webhookstring | nullEcho of the webhook URL we accepted, or null if not provided
data.creditsRemainingnumberCredits remaining after this generation
data.createdAtstringISO 8601 timestamp

When you read an instrumental track back, its parameters.bpm, parameters.keyscale, and parameters.timesignature are null — the model chooses them. duration and seed are always present.

Length & tiers

Instrumental tracks run 30–210 seconds, snapped to the nearest 15 s step. The free tier is capped at 120 seconds; Pro and Lifetime can go up to the full 210. The server clamps anything out of range and snaps to the nearest valid length.

Errors

CodeStatusDescription
VALIDATION_ERROR400Invalid parameters (check message field for details)
MISSING_API_KEY401X-API-Key header was not provided
INVALID_API_KEY401API key is malformed, revoked, or does not exist
MONTHLY_LIMIT_REACHED402No generations remaining this month
PRO_PLAN_REQUIRED403Your subscription does not include API access
RATE_LIMITED429Too many requests on a read endpoint — wait and retry (60/min/user)
GENERATION_RATE_LIMITED429Too many POST /v1/instrumental calls — wait and retry (10/min/user)
QUEUE_FULL429Too many generations in progress
GENERATION_FAILED500Generation queue submission failed

On this page