[ autonomous_music_workflows ]

Your sound, on autopilot.

Azrael Agents run your music workflow while you sleep. Generate, score, and ship tracks through the same uncensored engine — no filters, no restrictions, no clicks.

> What an agent can run for you

Every workflow below is one prompt to an agent with access to the Azrael Agent API.

[ daily_drop ]

Generate a new track every morning in my style and post it to X.

An agent calls the generate endpoint with your LoRA adapter on a schedule, waits for the audio, and pushes it to your socials.

[ trend_sniper ]

Monitor trending audio on TikTok, generate a track that fits the trend.

An agent watches what's blowing up, writes lyrics to match, and generates a trend-shaped track while the trend is still alive.

[ lyrics_watcher ]

Every time I drop new lyrics in this folder, generate a full track.

Point an agent at a folder, a Notion page, or a chat thread. New words in → finished song out. No clicks in between.

[ hook_factory ]

Generate 10 variations of this hook, send me the best one based on CLAP score.

Agents can read the scoring pipeline (CLAP, HuBERT, production quality) and rank their own output — you only hear the winner.

> Agent API — live today

The full generation engine is exposed as an authenticated HTTP API. Bring your own agent — Claude, a cron job, anything that can send a request.

[ authentication ]

Every request needs an x-api-key header with your agent key. Requests are rate-limited to 5 per 10 seconds per IP. Invalid keys get a 401; every agent action is audit-logged.

The Agent API is currently in closed access: agents can only act for pre-approved accounts. Requests for a non-approved userId get a 403. Want in? Reach out to get your account approved.

POST/api/agent/generate

Generate a new track for a user. Deducts one credit on success.

[ json_body ]

  • userIdstring (cuid) — the user to generate for
  • lyricsstring, 1–10,000 chars, [Verse]/[Chorus] markers supported
  • tagsstring — comma-separated style tags, e.g. "drill, dark, aggressive"
  • durationint — seconds, 10–240
  • adapterIdstring (cuid), optional — LoRA adapter to apply

[ example ]

curl -X POST https://azraelai.com/api/agent/generate \
  -H "x-api-key: $AGENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "clxxxxxxxxxxxxxxxxxxxxxxx",
    "lyrics": "[Verse]\nDead by dawn...",
    "tags": "drill, dark",
    "duration": 60
  }'

[ response ]

{ "generation": { "id": "...", "status": "completed", "audioUrl": "https://...", ... } }  // synchronous — returns when the track is done
GET/api/agent/generations

List a user's 50 most recent generations (with adapter info).

[ query_params ]

  • userIdstring (cuid), required

[ example ]

curl "https://azraelai.com/api/agent/generations?userId=clxxx..." \
  -H "x-api-key: $AGENT_API_KEY"

[ response ]

{ "generations": [ { "id": "...", "audioUrl": "...", "adapter": { "id": "...", "name": "..." }, ... } ] }
GET/api/agent/scores

Read the automated quality scores (CLAP, HuBERT, production) for a generation.

[ query_params ]

  • generationIdstring (cuid), required

[ example ]

curl "https://azraelai.com/api/agent/scores?generationId=clxxx..." \
  -H "x-api-key: $AGENT_API_KEY"

[ response ]

{ "scores": { "clapScore": 0.82, "hubertScore": 0.74, "qualityScore": 0.9 } }
GET/api/agent/adapters

List a user's 50 most recent LoRA adapters.

[ query_params ]

  • userIdstring (cuid), required

[ example ]

curl "https://azraelai.com/api/agent/adapters?userId=clxxx..." \
  -H "x-api-key: $AGENT_API_KEY"

[ response ]

{ "adapters": [ { "id": "...", "name": "...", "type": "lokr", "isPublic": false, ... } ] }
POST/api/agent/apply-adapter

Set a user's active adapter — used by default when generate omits adapterId. Adapter must be the user's own or public.

[ json_body ]

  • userIdstring (cuid), required
  • adapterIdstring (cuid) or null — null clears the active adapter

[ example ]

curl -X POST https://azraelai.com/api/agent/apply-adapter \
  -H "x-api-key: $AGENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "userId": "clxxx...", "adapterId": "clyyy..." }'

[ response ]

{ "message": "Adapter <name> is now the active adapter for user clxxx...", "adapter": { "id": "...", "name": "...", "type": "lokr" } }
POST/api/agent/lyric-video

Render a 9:16 lyric video (waveform visualizer + timed captions) for a finished generation.

[ json_body ]

  • generationIdstring (cuid), required — must have audio + lyrics

[ example ]

curl -X POST https://azraelai.com/api/agent/lyric-video \
  -H "x-api-key: $AGENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "generationId": "clxxx..." }'

[ response ]

{ "message": "Lyric video generated successfully", "videoUrl": "..." }

[ access ]

The API is live. The agents are coming.

Agent keys are issued manually while the hosted agent platform is in the lab. Want your workflow automated now? Ask for a key — or just start generating and let your catalog train your sound.