Generate original, studio-quality music from a single call. Built on our own models — license-clean output, an official REST API, and a fraction of the cost of grey-market wrappers.
Trained on our own data — no unauthorized third-party catalog. Every track ships with a commercial license.
A real REST API with keys you control — not a reverse-engineered workaround that breaks when an upstream account is banned.
Purpose-built for Rock, Hip-Hop, Post Punk, and Indie — vocal or instrumental, at studio-quality resolution.
Proprietary tech means no third-party markup — a fraction of the per-track cost of grey-market wrappers.
| Grey-market wrappers | McRock API | |
|---|---|---|
| Official API & keys | Reverse-engineered | Official |
| IP & training data | Model in active litigation | Our own models |
| Output license | Unclear / borrowed | Commercial license |
| Reliability | Breaks on account bans | Stable keys you own |
| Per-track cost | $$ | A fraction of it |
Generate AI music programmatically. Integrate McRock's engine directly into your app, game, or platform.
https://us-central1-mcrock-music.cloudfunctions.netAll requests require an API key in the x-api-key header. Get your key in Settings → API Access (Enterprise plan only).
POST /apiV1Generate HTTP/1.1
Content-Type: application/json
x-api-key: YOUR_API_KEYKeep your key secret. Never expose it in client-side code or public repos. Use environment variables server-side only.
/apiV1GenerateSubmits a song generation job. Returns a jobId immediately — poll /apiV1Status to track progress.
context string (user story, conversation, or any text) and McRock auto-generates the track title, lyrics, and music in one call. No need to write lyrics yourself.| Parameter | Type | Description |
|---|---|---|
contextrequired | string | Any text — user story, conversation, emotions, a situation. McRock extracts a track title and writes lyrics automatically. |
genre | string | hiphop rnb postpunk Default: auto-detected from context |
voiceType | string | "male" "female" Default: male |
musicIntensity | string | "low" "medium" "high" "max" Default: medium |
curl -X POST \
https://us-central1-mcrock-music.cloudfunctions.net/apiV1Generate \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"context": "I've been feeling like I don't fit in anywhere lately. Just tired of pretending.",
"genre": "hiphop",
"voiceType": "male",
"musicIntensity": "high"
}'{
"jobId": "abc123def456",
"status": "queued",
"pollUrl": "https://us-central1-mcrock-music.cloudfunctions.net/apiV1Status?jobId=abc123def456",
"quotaRemaining": 9517,
"title": "Don't Fit In",
"lyrics": "[Verse 1]\nTired of pretending, done with the game..."
}/apiV1Status?jobId={jobId}Poll this endpoint every 10 seconds until status is "complete" or "failed". The pollUrl from the generate response is the pre-built URL to call.
curl \
"https://us-central1-mcrock-music.cloudfunctions.net/apiV1Status?jobId=abc123def456" \
-H "x-api-key: YOUR_API_KEY"// Queued — job accepted, waiting for GPU slot
{ "status": "queued" }
// Generating — music is being composed
{ "status": "generating", "message": "generating" }
{ "status": "generating", "message": "mixing" }
// Encoding — longest phase, can take several minutes
{ "status": "generating", "message": "encoding audio" }
// Complete — audioUrl is a direct .wav download link (no auth required)
{
"status": "complete",
"audioUrl": "https://storage.googleapis.com/mcrock-music.firebasestorage.app/ace-step-temp/ace_abc123.wav"
}
// Failed
{ "status": "failed", "error": "Generation failed" }queued | Job accepted, waiting for a GPU slot |
generating / mixing | Music composition in progress |
encoding audio | Audio encoding — the longest phase, can take several minutes. Do not cancel. |
complete | Done — audioUrl is available (.wav, Firebase Storage direct link, no expiry) |
Transient polling errors are expected.
During active generation, /apiV1Status may occasionally return a non-2xx response or malformed body. This is normal — treat it as generating and continue polling. Only abort after 5 or more consecutive errors.
Timing: Total generation is typically 3–5 minutes, but can reach 8–10 minutes for longer tracks (the encoding audio phase is the variable). Set your client timeout to at least 12 minutes to avoid aborting a healthy job.
| Status | Error | Meaning |
|---|---|---|
| 401 | Missing x-api-key header | x-api-key header not present in request |
| 401 | Invalid or revoked API key | Key is incorrect, expired, or was revoked |
| 403 | API access requires Enterprise plan | Your account is not on the Enterprise plan |
| 429 | Monthly quota exceeded | You have used all 10,000 songs this billing cycle |
| 400 | lyrics and title are required | Request body missing required fields |
| 405 | POST only | Use POST method, not GET or others |
| 502 | Engine unreachable | Generation backend temporarily unavailable — retry |
| 500 | Generation timed out | Song generation took too long — retry the request |
10,000
Monthly Songs
Enterprise plan — resets each billing cycle
3–10 min
Generation Time
Typical 3–5 min; encoding phase can extend to 10 min
10s
Poll Interval
Recommended — abort only after 5+ consecutive errors
12 min
Client Timeout
Minimum recommended before giving up on a job
Your API key is in Settings on the Enterprise plan.