stem_preset field are free on every paid plan. This guide shows you how to integrate stem_preset, how to tell whether a request was free, and how to keep your workload inside the free quota.
At a glance
Quick start
1
Use an API Key from a paid plan
Create or copy an API Key in the API dashboard. Requests from Free plan accounts are charged as usual. See Pricing to upgrade.
2
Send stem_preset instead of stems
Replace your
stems field with stem_preset. Leave stems out, or send [].3
Check that the request was free
A free request returns
"is_free_promo": true and "credit_estimate": 0.0, plus the free requests you have left.Pick the right preset
Each preset counts as one request against your free quota, however many stems it returns.Finer splits such as
lead_vocal, male_vocal, kick_drum, acoustic_guitar, strings, or winds have no preset. Request them with stems, which is charged as usual.Read the free quota from the response
Every Extraction response now includes four promotion fields. Use them instead of counting requests yourself: the counters live on our servers and use UTC.
What the fields look like in each situation:
Get the most out of the promotion
Send stem_preset, never the equivalent stems list
Send stem_preset, never the equivalent stems list
The promotion is tied to the
stem_preset field. A request with stems=["vocals","instrumental"] returns the same stems as 2_stems but is charged.Use 6_stems when you need more than vocals
Use 6_stems when you need more than vocals
One
6_stems request uses one free slot and returns six stems. Splitting the same track with several smaller requests uses more of your quota.Add preprocessing and keep full quality
Add preprocessing and keep full quality
The whole request is free, so
preprocessing_options such as ["Denoise", "Dereverb"] cost nothing extra. Leave eco_mode at false for the highest quality output.Pace your batch with free_quota_resets_at
Pace your batch with free_quota_resets_at
Up to 10 free requests per hour adds up to 100 a day. Queue your tracks and send them as the quota resets instead of all at once. The code below does this for you.
Use webhooks instead of polling
Use webhooks instead of polling
Pass
webhook_url so results arrive as soon as each conversion finishes. Extraction counts towards your parallel request limit, so avoid holding slots open with long polling loops.Keep stem_preset after November
Keep stem_preset after November
stem_preset stays available after the promotion ends. From December 1, preset requests are charged like the matching stems list, so you don’t need to change your code back.Batch tracks inside the free quota
These examples send one preset request per track. After each response they check the remaining counts, and wait untilfree_quota_resets_at when either one reaches 0, so no request is charged because of the limits.
Errors
Requests rejected with
422 don’t use a free slot. Neither do requests that fail before they are queued.
FAQ
I sent stems=["vocals","instrumental"]. Why was I charged?
I sent stems=["vocals","instrumental"]. Why was I charged?
Only requests that use the
stem_preset field are free. Send stem_preset=2_stems instead.Is the limit per API Key?
Is the limit per API Key?
No. The 10 per hour and 100 per day limits apply to your account, across all of its API Keys.
When does the hourly limit reset?
When does the hourly limit reset?
At the start of every UTC clock hour, for example at 15:00:00Z. It is not a rolling 60-minute window. The daily limit resets at 00:00:00Z.
What happens to my 11th request in an hour?
What happens to my 11th request in an hour?
It runs and is charged at the usual stem splitter rate. The response shows
"is_free_promo": false and "free_generations_remaining_hour": 0.I'm on the Free plan. Can I use stem_preset?
I'm on the Free plan. Can I use stem_preset?
Yes. Presets work on every plan, but only paid plans get them free. See Pricing to upgrade.

