Music, images, video — every flagship creative model through one API key and one credit pool. MCP server live.
X-AW-Key covers Suno, Grok Imagine, GPT Image 2, Seedream V4, Kling, Hailuo, Seedance, Wan, VEO 3.1, Happy Horse, Ideogram V3, and more. One bill at the end of the month.
@aetherwave-studio/mcp. Three lines of config and any MCP-aware agent (Claude Code, Claude Desktop, Cursor, Continue) calls our APIs autonomously. SKILL.md files available for non-MCP integrations.
Generation endpoints require an X-AW-Key header. A handful of read-only endpoints (pricing, model lists, status polling for jobs you already started) are public. Your key is tied to your account — credits deduct from the same balance whether you use the platform UI or the API.
curl https://aetherwavestudio.com/api/quickstart/balance \
-H "X-AW-Key: aw_live_your_key_here"
Key management: Generate, regenerate, or revoke your key anytime from your Profile → Developer tab. Keys use the aw_live_ prefix.
The @aetherwave-studio/mcp package is a Model Context Protocol server that exposes the AetherWave platform as native tools to any MCP-aware agent: Claude Code, Claude Desktop, Cursor, Continue, custom clients via the official SDK. No glue code, no provider sprawl. 16 tools covering music generation, image generation + edit + upscale + reframe + background removal, video generation + upscale + reframe + background removal, audio mastering, and gallery read — all on the same credit pool you use in the studio.
Recommended. Add AetherWave as a remote connector and authorize with one click, no key to paste. It also stays current on its own: fixes and new tools reach you the moment they ship, with nothing to install and no version to track. In Claude or Claude Desktop, open Settings → Connectors → Add custom connector and paste:
https://mcp.aetherwavestudio.com/mcp
Claude prompts you to connect: sign in to AetherWave, approve the consent screen, and all 16 tools are ready. Generations run against your own credit balance. Authentication is OAuth, so there is no API key to manage, and you can revoke access anytime under Profile → Developer → Connected Apps.
Prefer to run it locally, or wire up another client (Cursor, Continue, scripts)? Use the npm package with an API key instead, covered below. Note the tradeoff: the package updates only when you update it, so run the latest version and, if you launch it with npx, restart your client after a release since the npx cache can serve an older copy.
@aetherwave-studio/mcpaetherwave_balanceaetherwave_list_image_modelsaetherwave_list_video_modelsaetherwave_list_master_presets
aetherwave_generate_imageaetherwave_generate_videoaetherwave_generate_music
aetherwave_edit_imageaetherwave_upscale_imageaetherwave_reframe_imageaetherwave_remove_background
aetherwave_upscale_videoaetherwave_remove_background_videoaetherwave_reframe_video
aetherwave_master_audioaetherwave_list_my_creations
AETHERWAVE_API_KEY. Same aw_live_ key you generated under Profile → Developer. Credits deduct from your account balance the same way they would in the studio UI.
claude mcp add aetherwave \ -e AETHERWAVE_API_KEY=aw_live_your_key_here \ -- npx -y @aetherwave-studio/mcp
Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/; Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"aetherwave": {
"command": "npx",
"args": ["-y", "@aetherwave-studio/mcp"],
"env": {
"AETHERWAVE_API_KEY": "aw_live_your_key_here"
}
}
}
}
Add the same JSON block to your client's MCP config (Cursor: ~/.cursor/mcp.json; Continue: project mcp.json). The command + args shape is the standard MCP launcher.
Once installed: restart your client and ask it to "generate a synthwave album cover, animate it as a 6-second loop, reframe the video to 9:16 for Reels, and master a matching synthwave instrumental track for the soundtrack." The agent will chain aetherwave_generate_image, aetherwave_generate_video, aetherwave_reframe_video, aetherwave_generate_music, and aetherwave_master_audio in one back-to-back run, all on your credit pool. Credit deductions happen only on successful delivery; all outputs auto-save to your gallery.
The complete tools reference on GitHub documents every parameter, default, and return shape for all 16 tools, plus credit pricing per model and troubleshooting for the most common upstream errors.
Each skill is a self-contained API with its own SKILL.md file that any LLM agent can read and operate.
| METHOD | ENDPOINT | DESCRIPTION | AUTH |
|---|---|---|---|
| GET | /api/quickstart | Credit bundle info and pricing | PUBLIC |
| GET | /api/quickstart/balance | Check your credit balance via API key | X-AW-Key |
| GET | /api/user/api-key | Get your current API key (masked) | SESSION |
| POST | /api/user/api-key/generate | Generate or regenerate your API key | SESSION |
| POST | /api/user/api-key/revoke | Permanently revoke your API key | SESSION |
| METHOD | ENDPOINT | DESCRIPTION | AUTH |
|---|---|---|---|
| POST | /api/generate-image | Generate images (Grok Imagine, GPT Image 2, Seedream V4, Imagen 4, Wan 2.7, Ideogram V3, etc.) | X-AW-Key |
| GET | /api/generate-image/status/:taskId | Poll image generation status | PUBLIC |
| GET | /api/image/models | List all available image models + pricing (live) | PUBLIC |
| GET | /api/video/models | List all available video models + pricing (live) | PUBLIC |
| GET | /api/video/pricing | Video pricing-only feed (lighter than /models) | PUBLIC |
| POST | /api/generate-music | Generate music via Suno | X-AW-Key |
| GET | /api/music-status/:taskId | Poll music generation status | X-AW-Key |
| POST | /api/generate-video | Generate video (Grok Imagine, Wan, Hailuo, Seedance, Kling, Happy Horse, VEO 3.1, etc.) | X-AW-Key |
| GET | /api/generate-video/status/:taskId | Poll video generation status | X-AW-Key |
| POST | /api/separate-stems | Separate audio into stems (vocals, drums, bass, etc.) | X-AW-Key |
import requests, time headers = {"X-AW-Key": "aw_live_your_key_here", "Content-Type": "application/json"} base = "https://aetherwavestudio.com" # 1. Generate an image result = requests.post(f"{base}/api/generate-image", headers=headers, json={ "prompt": "Dark synth album cover, neon sigils, molten orange", "model": "grok-imagine-t2i", "aspectRatio": "1:1" }).json() # 2. Poll until complete task_id = result["taskId"] while True: status = requests.get(f"{base}/api/generate-image/status/{task_id}").json() if status["state"] == "SUCCESS": print(status["images"][0]) # → CDN image URL break time.sleep(3)
const res = await fetch("https://aetherwavestudio.com/api/generate-music", { method: "POST", headers: { "X-AW-Key": "aw_live_your_key_here", "Content-Type": "application/json" }, body: JSON.stringify({ "prompt": "Lo-fi ambient track, rain sounds, warm pads", "instrumental": true, "model": "V4_5" }) }); const { taskId } = await res.json(); // Poll /api/music-status/{taskId} until status === "complete"
curl -X POST https://aetherwavestudio.com/api/generate-image \ -H "X-AW-Key: aw_live_your_key_here" \ -H "Content-Type: application/json" \ -d '{"prompt": "neon cyberpunk album cover, glitch art", "model": "grok-imagine-t2i", "aspectRatio": "1:1"}' # Returns taskId — poll status: curl https://aetherwavestudio.com/api/generate-image/status/img_TASKID
Generation endpoints return a taskId immediately. Poll the status endpoint until state === "SUCCESS" (case-normalized server-side; any of success, complete, done from upstream map to SUCCESS in our response).
{
"taskId": "img_1748547821934_a3k9p2qr",
"message": "Image generation started",
"creditsUsed": 5,
"expectedImages": 6
}
{
"state": "PROCESSING",
"status": "PROCESSING",
"progress": 45,
"creditCost": 5
}
{
"state": "SUCCESS",
"status": "SUCCESS",
"images": [
"https://media.aetherwavestudio.com/.../image-1.png",
"https://media.aetherwavestudio.com/.../image-2.png"
],
"autoSaved": true,
"creationIds": ["creation_..."]
}
{
"state": "FAILED",
"status": "FAILED",
"error": "Upstream model returned content-policy refusal"
}
{
"taskId": "task_1748547821934_xqp9r2",
"message": "Video generation started",
"creditCost": 36,
"duration": 6,
"resolution": "720p"
}
{
"state": "success",
"data": {
"video": {
"url": "https://media.aetherwavestudio.com/.../video.mp4"
},
"fallbackProvider": null
},
"kieTaskId": "6d38d323d4070569c0bdf583956770d1",
"creationId": "creation_...",
"autoSaved": true
}
Two modes. The meaning of prompt changes between them,
and that is the single most common source of confusion:
customMode false, the default) —
prompt is a description of the song, and Suno writes its own lyrics.customMode: true) —
prompt is the literal lyrics, style carries the
musical direction, and title is honoured.
There is no lyrics parameter. Sending one has no effect, and
title is ignored outside custom mode. Every generation costs
20 credits and returns two tracks, on every model
and every plan.
{
"customMode": true,
"prompt": "Verse 1:\nWalking through the neon rain\n...", // literal lyrics
"style": "Synthwave, dreamy, female vocals",
"title": "Neon Rain",
"vocalGender": "f", // "m" or "f", default "m"
"instrumental": false,
"model": "V5_5" // V3_5 | V4 | V4_5 | V5 | V5_5
}
{
"prompt": "Dreamy lo-fi hip hop, vinyl crackle, rainy night", // a description
"instrumental": false,
"model": "V5_5"
}
{
"status": "complete",
"tracks": [
{
"id": "suno_...",
"audioUrl": "https://media.aetherwavestudio.com/.../track-1.mp3",
"title": "...",
"duration": 182.4
},
{ /* second track, same shape */ }
]
}
Job IDs persist for 7 days. Status polls return 404 task_not_found after that. For long-running workflows, save the result URL to your own storage once you've seen state === "SUCCESS" — our tempfile mirrors expire on the upstream provider's schedule (KIE: ~24h; fal: ~7d), but we auto-save to R2 when autoSaved: true and that URL is durable.
Credits work the same whether you use the platform UI or the API. 1 credit = $0.005. Subscription credits refresh monthly and do not roll over. Bundle credits never expire. Subscription credits drain first.
| PLAN | PRICE/MO | MONTHLY CREDITS | PER CREDIT |
|---|---|---|---|
| Free | $0 | 0 | — |
| Starter | $4.99 | 800 | ~$0.006 |
| Studio | $9.99 | 1,700 | ~$0.006 |
| Artist | $24.99 | 3,500 | ~$0.007 |
| Producer | $44.99 | 6,500 | ~$0.007 |
| Mogul | $69.99 | 12,500 | ~$0.006 |
| Ultimate | $149.99 | 30,000 | ~$0.005 |
Subscriptions charge immediately on the first month - there is no free trial.
One-time purchases. Never expire. Stack on top of any subscription.
| BUNDLE | BASE | BONUS | TOTAL CREDITS | PRICE | PER CREDIT |
|---|---|---|---|---|---|
| Loading... | |||||
| CODE | MEANING | RESOLUTION |
|---|---|---|
| INVALID_API_KEY | Key not recognized or revoked | Regenerate from Profile → Developer tab |
| INSUFFICIENT_CREDITS | Balance too low for this operation | Purchase credits at /buy-credits |
| RATE_LIMIT_EXCEEDED | Too many requests | Back off and retry after 60 seconds |
| GENERATION_FAILED | Upstream model error | Retry with different parameters or model |
| INVALID_MODEL | Model not found or unavailable | Check SKILL.md for supported models |
Every AetherWave API ships with a .skill file — a structured Markdown document that teaches any LLM how to operate it. Drop the SKILL.md into your agent's context and it can call AetherWave APIs autonomously.
Works today with:
~/.claude/skills/<name>/ and they auto-load as invocable skills.Prefer MCP? Skip the SKILL.md flow entirely — @aetherwave-studio/mcp wraps every endpoint as a native MCP tool. See the MCP Server section above for one-block install snippets.
Agent integration: Download SKILL.md files from the Skills page. Each file contains full endpoint specs, request/response schemas, pricing, and error handling — everything an agent needs.
# In your agent's system prompt or tool context: # 1. Load the SKILL.md with open("music-generation.SKILL.md") as f: skill_context = f.read() # 2. Pass to your LLM alongside the user's request # The SKILL.md contains everything the model needs: # - Endpoint URLs and methods # - Request/response schemas # - Credit costs # - Error handling # - Authentication (X-AW-Key header)
AetherWave is pioneering harness engineering — the practice of designing creative AI workflows that non-technical founders can operate at a high technical level through AI agents.
We're building an open library of patterns, protocols, and tools for agent-native creative platforms. Contribute or follow along: