DEVELOPER DOCS

Build with
AetherWave APIs

Music, images, video — every flagship creative model through one API key and one credit pool. MCP server live.

AetherWave Studio - A full AI creative studio, at your agent's command | Product Hunt

One integration, every flagship model

🔑 One key, one bill
Skip the dance of 10 provider accounts, 10 payment methods, 10 quota budgets. 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.
⚡ Built-in fallback chains
When a provider flakes upstream, we auto-failover. Grok video calls drop through KIE to fal.ai with a 150s hard cap on each leg — your job either lands or fails cleanly. No 20-minute ghost requests, no stranded credits, no support tickets.
🤖 Agent-native by design
First-class Model Context Protocol server published as @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.
01
✨
Sign Up
Create a free account at aetherwavestudio.com
02
🔑
Generate Key
Profile → Developer tab → Generate API Key
03
💳
Buy Credits
One credit pool for platform and API use
04
⛟
Ship
Add X-AW-Key header and start creating

API Key

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 · check your balance
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.

One config block. Every creative tool, every model.

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.

Connect in Claude (no API key)

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:

remote MCP connector URL
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.

📦 Install
Published on npm: @aetherwave-studio/mcp
Source: github.com/AetherWave-Studio/aetherwave-mcp
Runtime: Node 18+
🔎 Discovery (4)
aetherwave_balance
aetherwave_list_image_models
aetherwave_list_video_models
aetherwave_list_master_presets
🎨 Generation (3)
aetherwave_generate_image
aetherwave_generate_video
aetherwave_generate_music
📷 Image utility (4)
aetherwave_edit_image
aetherwave_upscale_image
aetherwave_reframe_image
aetherwave_remove_background
🎥 Video utility (3)
aetherwave_upscale_video
aetherwave_remove_background_video
aetherwave_reframe_video
🎧 Audio & Gallery (2)
aetherwave_master_audio
aetherwave_list_my_creations
🔑 Auth
One environment variable: 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 Code

bash · add MCP server
claude mcp add aetherwave \
  -e AETHERWAVE_API_KEY=aw_live_your_key_here \
  -- npx -y @aetherwave-studio/mcp

Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/; Windows: %APPDATA%\Claude\):

claude_desktop_config.json
{
  "mcpServers": {
    "aetherwave": {
      "command": "npx",
      "args": ["-y", "@aetherwave-studio/mcp"],
      "env": {
        "AETHERWAVE_API_KEY": "aw_live_your_key_here"
      }
    }
  }
}

Cursor / Continue / any MCP client

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.

Full reference

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.

Creative AI APIs

Each skill is a self-contained API with its own SKILL.md file that any LLM agent can read and operate.

Platform Endpoints

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

Generation Endpoints

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

Quick Start

python · generate a record label
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)
javascript · generate music
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 · generate an image
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

What to expect back

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).

POST /api/generate-image

response · 200 OK
{
  "taskId": "img_1748547821934_a3k9p2qr",
  "message": "Image generation started",
  "creditsUsed": 5,
  "expectedImages": 6
}

GET /api/generate-image/status/:taskId

response · pending / processing
{
  "state": "PROCESSING",
  "status": "PROCESSING",
  "progress": 45,
  "creditCost": 5
}
response · SUCCESS (terminal)
{
  "state": "SUCCESS",
  "status": "SUCCESS",
  "images": [
    "https://media.aetherwavestudio.com/.../image-1.png",
    "https://media.aetherwavestudio.com/.../image-2.png"
  ],
  "autoSaved": true,
  "creationIds": ["creation_..."]
}
response · FAILED (terminal, credits refunded)
{
  "state": "FAILED",
  "status": "FAILED",
  "error": "Upstream model returned content-policy refusal"
}

POST /api/generate-video

response · 200 OK (job accepted)
{
  "taskId": "task_1748547821934_xqp9r2",
  "message": "Video generation started",
  "creditCost": 36,
  "duration": 6,
  "resolution": "720p"
}
GET /api/generate-video/status/:taskId · SUCCESS
{
  "state": "success",
  "data": {
    "video": {
      "url": "https://media.aetherwavestudio.com/.../video.mp4"
    },
    "fallbackProvider": null
  },
  "kieTaskId": "6d38d323d4070569c0bdf583956770d1",
  "creationId": "creation_...",
  "autoSaved": true
}

POST /api/generate-music

Two modes. The meaning of prompt changes between them, and that is the single most common source of confusion:

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.

POST /api/generate-music · CUSTOM MODE
{
  "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
}
POST /api/generate-music · SIMPLE MODE
{
  "prompt": "Dreamy lo-fi hip hop, vinyl crackle, rainy night",  // a description
  "instrumental": false,
  "model": "V5_5"
}
GET /api/music-status/:taskId · SUCCESS
{
  "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.

One Credit Pool

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.

Subscription Plans

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.

Credit Bundles

One-time purchases. Never expire. Stack on top of any subscription.

BUNDLE BASE BONUS TOTAL CREDITS PRICE PER CREDIT
Loading...

Buy Credits →

Error Codes

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

SKILL.md Files (Claude, Cursor, Continue, any LLM)

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:

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.

Video Generation Skill Image Generation Skill Music Generation Skill
agent integration pattern
# 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)

Harness Engineering

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:

github.com/AetherWave-Studio/harness-engineering →