A jingle is fifteen to thirty seconds. A song is three or four minutes. The good news is you don't have to pick a side on billing: on Tchavi, the price of minimax-music-2.6 doesn't move with how long the result turns out, and you don't actually get to choose that length either — the model decides. What really shapes the result is what you write in the prompt and the lyrics. For a jingle, the point isn't to pay less, then: it's to write something short and sharp enough that the model doesn't wander into a full song when what you wanted was a ten-second hook.
In short
POST /v1/music/generationsis asynchronous: it answers202with a jobid, you pollGET /v1/jobs/:iduntilcompleted, then readoutput.audio_url, an MP3.- Billing is flat per track:
minimax-music-2.6writes and performs a song for 329.242 credits, about KES 25 at October 2026 rates, whether the result runs fifteen seconds or five minutes. - The prompt carries the musical direction (key, tempo, instruments, voice, mood). The lyrics carry the words and the structure, marked
[Verse]and[Chorus]. Leave the lyrics out, and the model writes its own from the prompt. instrumental: truestrips out all vocals, for a bed you talk over yourself. It can't be combined withlyrics: sending both is refused with a400, before you're charged.- A new account gets 50 credits at email verification — nowhere near the 329.242 credits a track costs. Music isn't free to try; a job that fails, on the other hand, is refunded in full.
How it works
A call sends model, a prompt (required) and, if you want one, lyrics. The 202 that comes back right away isn't the track yet, just confirmation that the job has started.
curl -X POST https://tchavi.com/api/v1/music/generations \
-H "Authorization: Bearer $TCHAVI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-music-2.6",
"prompt": "E minor, 110 BPM, Afro-fusion with a crisp guitar riff, finger snaps and a deep kick drum, confident male voice, sharp and upbeat, the energy of a busy Saturday morning in a barbershop",
"lyrics": "[Verse]\nSaturday morning, the chairs are full\n[Chorus]\nFresh Cuts, step in, step out looking sharp\nFresh Cuts Barbershop, that is the mark"
}'
{
"id": "0f3c…",
"object": "music.generation",
"status": "pending",
"model": "minimax-music-2.6",
"tchavi": {
"credits_used": 329.242,
"credits_remaining": 4821.5
}
}
You then poll GET /v1/jobs/0f3c…, spacing calls a few seconds apart, until status turns to completed (or failed). A finished job answers with output.audio_url — there's no duration or resolution to read, music doesn't carry those fields. A helper that would submit and wait in a single call, client.music.generations.createAndWait({...}), is landing in a future release of the @tchavi/sdk package: it isn't on npm yet, so for now these two cURL calls do the job.
What it costs: a flat fee, not a per-second rate
KES figures are at October 2026 rates (about 13,204 credits per KES 1,000, so 1 credit is about KES 0.0757):
| Model | What it does | Credits per track | In KES (Oct. 2026 rates) |
|---|---|---|---|
minimax-music-2.6 | Writes and performs a song from a description, up to 5 min | 329.242 | about KES 25 |
minimax-music-cover | Re-sings a track you supply (source_audio_url), in the style described | 658.484 | about KES 50 |
Neither price moves with how long the result turns out to be. That's exactly why a jingle is a good fit: you're not buying a minute of music, you're buying a track, and nothing stops you from asking for a short one. Asking for a long one costs no more — it's just not what you're here for.
An account gets 50 credits at email verification: useful for trying a text-to-speech call or a chatbot reply, but it doesn't cover a music track, which costs 329.242 credits. You'll need to top up — with mobile money, no bank card, starting at KES 250 — before you can generate anything here. Purchased credits never expire, and if a job fails after being billed, it's refunded in full.
Writing the prompt: the musical direction
In our own runs, a prompt that gives a key, a tempo and named instruments produces a tighter result than one that only describes a mood. Here is the real prompt behind one of our own demos:
A minor, 102 BPM, afrobeats with highlife guitar, round bass and log drum, female lead with a small backing choir, bright and hopeful, the energy of a market opening at dawn
That job took 65.9 s to finish and produced a track 1 min 10 long. Those are the only measurements we have from a real run; we're not claiming every generation takes exactly that long.
What does the work in that prompt: a key (A minor), a tempo (102 BPM), named instruments (highlife guitar, bass, log drum), a description of the voice (female lead, small choir), a mood (bright, hopeful) and a concrete image (a market opening at dawn). A prompt like "a happy, African-sounding song" leaves all of those decisions to the model, and the result varies more from one run to the next.
That prompt produced this. A jingle would be shorter, but the musical direction is written the same way:
Prompt : A minor, 102 BPM, afrobeats with highlife guitar, round bass and log drum, female lead with a small backing choir, bright and hopeful, the energy of a market opening at dawn
minimax-music-2.6 · 329.242 credits · 1:10 · generated in 65.9 s
Writing the lyrics, or letting the AI handle it
The lyrics field is optional. Leave it out and the model writes its own words from the prompt — handy for a background bed where the lyrics don't need to name your shop. If you want the jingle to say your shop's name or your tagline, write the lyrics yourself and mark the structure with [Verse] and [Chorus]: the prompt carries the music, the lyrics carry the words and how they're organised.
For a jingle, the temptation is to write a full verse with several lines. Resist it: a two-line verse and a chorus that repeats your shop's name give the model a short structure to follow. The more lyrics you write, the more material the song has to develop, and the less control you have over how long or how busy the result ends up.
The instrumental option: a bed you talk over
For a radio spot or a video where a voice-over talks on top of the music, ask for instrumental: true. The model produces a bed with no vocals at all, built to sit underneath. This option can't be combined with lyrics: logically, one asks for no voice, the other supplies words to sing. Sending both in the same request is refused with a 400, before you're charged — you don't pay for a combination the model can't deliver.
{
"model": "minimax-music-2.6",
"prompt": "C major, 128 BPM, upbeat Afro-pop with bright marimba, handclaps and a punchy kick, cheerful and energetic, the feel of a market stall opening at sunrise",
"instrumental": true
}
The prompt still carries the entire musical direction; with no lyrics, it's the only thing shaping the result.
A worked example: the jingle for a shop
Imagine a barbershop in Nairobi that wants a short jingle for its Saturday radio slot and its Instagram reels — something that names the shop and matches the energy of a busy weekend morning, without a long verse to sit through. Here is the prompt and the lyrics you might write, in the style described above:
Prompt:
E minor, 110 BPM, Afro-fusion with a crisp guitar riff, finger snaps and a deep kick drum, confident male voice, sharp and upbeat, the energy of a busy Saturday morning in a barbershop
Lyrics:
[Verse]
Saturday morning, the chairs are full
[Chorus]
Fresh Cuts, step in, step out looking sharp
Fresh Cuts Barbershop, that is the mark
The call is the one shown above: a POST with this model, this prompt and these lyrics, answering 202 with a job id. You poll GET /v1/jobs/:id until completed, then download output.audio_url. The resulting track is yours to use: cut it into your reels, play it in the shop, or send it to a local station, with nothing to hand back to anyone else.
That said, we make no legal promise about how original a generated track is: nobody, not the model and not us, can guarantee a result won't resemble something that already exists. The same goes for minimax-music-cover, the model that re-sings a track you supply: for our own demo of it, we used a song we'd written ourselves, specifically so nothing was borrowed from anyone else. Do the same — supply a recording you actually hold the rights to, not a track by an artist you admire: neither the model nor Tchavi checks where the file you send came from.
FAQ
Can I ask for a jingle of exactly fifteen seconds?
No, you don't choose the duration: the model decides, within a five-minute cap. What you do control is how much you write in the lyrics, which steers the result toward something shorter or longer.
Do I own the jingle?
You can use it freely once it's generated — in your shop, on your socials, or in a spot. We make no legal guarantee about its originality: no system can promise a track won't resemble something that already exists.
Can I have a song by an artist I like covered?
minimax-music-cover requires a source_audio_url that you supply yourself; use a recording you hold the rights to, not someone else's.
What happens if I send lyrics and instrumental together?
The request is refused with a 400, before you're charged. Pick one: sung lyrics, or a bed with no voice.
What if the job fails?
Credits are refunded in full. Purchased credits never expire, whatever happens.
How do I pay without a bank card?
With mobile money, from a KES 250 top-up. A new account gets 50 credits at email verification, which doesn't cover a music track (329.242 credits) but is enough to try other APIs, like text or text-to-speech.
create your account and top up KES 250
For the full field and error reference, read the music generation docs, and browse the music models catalogue.
This article is part of the series "Building an AI product from Africa". Tchavi is an OpenAI-compatible AI API gateway: one key gives access to over 100 text, image, audio and video models, and you pay for it with mobile money, no bank card (countries and operators). More guides on the blog. Follow us: LinkedIn and X.