======================================================================== STUDIO API — AGENT REFERENCE (plain text) by CortexAI.io ======================================================================== This document describes the PUBLIC HTTP API only. Use it to integrate image, music, voice, and helper endpoints. Do NOT assume undocumented fields or internal behavior. Human docs UI: https://studio.claude.gg/docs This file: https://studio.claude.gg/docs.txt API index JSON: https://studio.claude.gg/v1 Model catalog: https://studio.claude.gg/v1/models Live status: https://studio.claude.gg/v1/status BASE URL ------------------------------------------------------------------------ All API routes are under: https://studio.claude.gg/v1 Example: curl https://studio.claude.gg/v1/models AUTHENTICATION ------------------------------------------------------------------------ Generation and paid features require an API key on every request: Authorization: Bearer YOUR_API_KEY — or — x-api-key: YOUR_API_KEY Unknown or revoked key → 401 invalid_api_key Admin keys have no quotas; regular keys follow rate limits below. No key required (public): GET /health GET /v1 GET /v1/models GET /v1/models/:id GET /v1/status GET /v1/config GET /v1/logos GET /v1/logos/:slug GET /v1/music/tags GET /v1/music/stream/:id (opaque id) GET /docs.txt Playground browser login (optional, cookie session): POST /v1/auth/signin { email, password } GET /v1/auth/me (session cookie) POST /v1/auth/logout Returns user profile + usage; sets pg_session cookie. For API integrations, use an API key directly — not the playground session. RATE LIMITS (per API key, POST only) ------------------------------------------------------------------------ Image generations: 3 / minute Music generations: 3 / minute Voice + audio: 15 / minute Helpers (enhance etc): 30 / minute (not counted toward daily) Daily (image+music+voice): 500 / day Daily reset: 03:00 Europe/Istanbul (all keys together) Next daily reset: 2026-09-13T00:00:00.000Z Failed requests (≥400): 20 / minute error budget GET polls, downloads, model lists are NOT metered. Daily quota is a calendar day (resets at 03:00), not a rolling 24h window. Response headers on metered calls: x-ratelimit-limit-minute x-ratelimit-remaining-minute x-ratelimit-limit-day x-ratelimit-remaining-day 429 example: { "error": { "message": "...", "type": "rate_limit_error", "code": "rate_limited", "scope": "music", "limit": 3, "retry_after": 42 } } Check quota: GET https://studio.claude.gg/v1/usage (requires API key) ERRORS ------------------------------------------------------------------------ Validation (client input) — 400: { "error": { "message": "...", "type": "invalid_request_error", "code": "validation_error", "details": [{ "field": "model", "message": "..." }] } } Not found — 404 Rate limited — 429 Server errors — 500/502/503 with generic message (no internal details): { "error": { "message": "Server Error. Please try again later.", "type": "server_error", "code": "server_error" } } Music-specific public codes (examples): lyrics_too_long, lyrics_taken, validation_error, rate_limited ENDPOINT INDEX ------------------------------------------------------------------------ GET /health GET /v1 GET /v1/config GET /v1/usage GET /v1/status GET /v1/models GET /v1/models/:id POST /v1/images/generations GET /v1/images/:batchId GET /images/:id.png (proxied image URL from poll/generate) GET /v1/logos GET /v1/logos/:slug?theme=light|dark|color GET /v1/music/tags POST /v1/music/tokenize POST /v1/music/lyrics/enhance POST /v1/music/generations GET /v1/music/generations/:id GET /v1/music/stream/:id GET /v1/music/files/:id GET /v1/music/capacity (requires key; queue depth counts only) GET /v1/voice-clone/status POST /v1/voice-clone/generate GET /v1/audio/voices GET /v1/audio/models POST /v1/audio/generate (tool: sfx | music | tts) POST /v1/prompts/enhance POST /v1/agent/chat (NDJSON stream) POST /v1/auth/signin GET /v1/auth/me POST /v1/auth/logout GET /v1/config ------------------------------------------------------------------------ Public config for clients. Returns: auth_required: true playground_login: bool rate_limits: { per_minute, per_day, notes } GET /v1/status ------------------------------------------------------------------------ Public live metrics — safe feed, no prompts or keys. Model breakdown only includes catalog model IDs. curl https://studio.claude.gg/v1/status IMAGES — OVERVIEW ------------------------------------------------------------------------ 1. GET /v1/models — pick a catalog model id 2. POST /v1/images/generations — start batch 3. GET /v1/images/:batchId — poll until status completed 4. Use url / preview_url / content_url from data[] (proxied /images/... paths) Only catalog model IDs are accepted. Unknown model → 400 with allowed list. Parameter enums (aspect_ratio, quality, resolution) are per-model. POST /v1/images/generations ------------------------------------------------------------------------ Body (JSON): prompt string REQUIRED — text description model string catalog id (default gpt-image-2) aspect_ratio enum per model resolution enum per model if supported (e.g. 1K, 2K, 4K) quality enum low | medium | high (if supported) generations_count int 1–4 (alias: n) wait bool poll until complete server-side (default false) poll_timeout_ms int max wait when wait=true (default 120000, max 300000) Example: curl -X POST https://studio.claude.gg/v1/images/generations \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt":"a red fox in snow, cinematic","model":"gpt-image-2", "aspect_ratio":"16:9","quality":"medium","generations_count":1}' Success response: { "id": "BATCH_ID", "object": "image.generation", "model": "...", "data": [{ "id": "...", "status": "pending|completed|failed", "url": "/images/....png", "preview_url": "...", ... }], "url": "/images/....png" } GET /v1/images/:batchId ------------------------------------------------------------------------ Poll generation batch. Repeat until all items completed or failed. curl "https://studio.claude.gg/v1/images/BATCH_ID" -H "Authorization: Bearer YOUR_API_KEY" data[] item fields (typical): id, status, url, preview_url, content_url, thumbnail_url, error Image URLs are first-party paths under /images/ — use as-is. POST /v1/prompts/enhance ------------------------------------------------------------------------ Auto-enhance an image prompt (helper bucket — not daily quota). Body: { prompt: string (required), model?: catalog id } Response: { "object": "prompt.enhancement", "prompt": "...", "original": "...", "was_enhanced": true|false, "model": "gpt-image-2" } IMAGE MODEL CATALOG ------------------------------------------------------------------------ 23 models. Always validate against GET /v1/models before calling. --- gpt-image-2 --- ID: gpt-image-2 Name: GPT Image 2 Brand: OpenAI Category: generate Description: High quality OpenAI image model. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution, quality Parameters: prompt: string; max_length 10000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K; default "1K" quality: enum; one of: low, medium, high; default "medium" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/openai?theme=light|dark|color --- gpt-image-1.5 --- ID: gpt-image-1.5 Name: GPT Image 1.5 Brand: OpenAI Category: generate Description: Previous GPT image generation model. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution, quality Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K; default "1K" quality: enum; one of: low, medium, high; default "medium" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/openai?theme=light|dark|color --- gpt-image-1 --- ID: gpt-image-1 Name: GPT Image 1 Brand: OpenAI Category: generate Description: Good prompt adherence and image editing. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution, quality Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K; default "1K" quality: enum; one of: low, medium, high; default "medium" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/openai?theme=light|dark|color --- gemini-2.5-flash-image --- ID: gemini-2.5-flash-image Name: Nano Banana Brand: Google Category: generate Description: Quick, high-quality generation and editing (Google). Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 10000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/google?theme=light|dark|color --- gemini-3.1-flash-image --- ID: gemini-3.1-flash-image Name: Nano Banana 2 Brand: Google Category: generate Description: World knowledge, precise text, consistent characters, fast. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 10000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K, 4K; default "1K" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/google?theme=light|dark|color --- gemini-3-pro-image --- ID: gemini-3-pro-image Name: Nano Banana Pro Brand: Google Category: generate Description: Studio quality control, legible text, consistency. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 10000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K, 4K; default "1K" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/google?theme=light|dark|color --- gemini-3.1-flash-lite-image --- ID: gemini-3.1-flash-lite-image Name: Nano Banana Lite Brand: Google Category: generate Description: Faster / lighter Gemini image variant. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 10000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/google?theme=light|dark|color --- flux-2-pro --- ID: flux-2-pro Name: FLUX.2 [Pro] Brand: Black Forest Labs Category: generate Description: Real-world lighting, spatial accuracy, character consistency. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 10000; required aspect_ratio: enum; one of: 21:9, 16:9, 5:4, 4:3, 3:2, 1:1, 2:3, 3:4, 4:5, 9:16, 8:1, 4:1, 1:4, 1:8; default "16:9" resolution: enum; one of: 720p, 1080p, 2K; default "1080p" enhance_prompt: boolean; default false seed: integer; range 0–2147483647 generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/BlackForestLabs?theme=light|dark|color --- flux-1-kontext --- ID: flux-1-kontext Name: FLUX.1 Kontext [Pro] Brand: Black Forest Labs Category: generate Description: Image generation and editing, scene coherence, style control. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" enhance_prompt: boolean; default false seed: integer; range 0–2147483647 generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/BlackForestLabs?theme=light|dark|color --- bytedance-seedream-4 --- ID: bytedance-seedream-4 Name: Seedream 4 Brand: ByteDance Category: generate Description: Up to 4K, strong aesthetics, reference-driven editing. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 2000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K, 4K; default "2K" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/bytedance?theme=light|dark|color --- bytedance-seedream-4.5 --- ID: bytedance-seedream-4.5 Name: Seedream 4.5 Brand: ByteDance Category: generate Description: Up to 4K, multi-image edits, preserves details, dense text. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 2000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 2K, 4K; default "2K" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/bytedance?theme=light|dark|color --- bytedance-seedream-5-lite --- ID: bytedance-seedream-5-lite Name: Seedream 5 Lite Brand: ByteDance Category: generate Description: Up to 3K, multi-image editing, good for product images. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 2000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 2K, 3K; default "2K" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/bytedance?theme=light|dark|color --- bytedance-seedream-5-pro --- ID: bytedance-seedream-5-pro Name: Seedream 5 Pro Brand: ByteDance Category: generate Description: Precise editing, multilingual text, dense infographics. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio, resolution Parameters: prompt: string; max_length 2000; required aspect_ratio: enum; one of: auto, 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" resolution: enum; one of: 1K, 2K; default "2K" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/bytedance?theme=light|dark|color --- recraft-v4.1 --- ID: recraft-v4.1 Name: Recraft V4.1 Brand: Recraft Category: generate Description: Design-focused image generation. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/recraft?theme=light|dark|color --- krea-2-medium --- ID: krea-2-medium Name: Krea 2 Medium Brand: Krea Category: generate Description: Creative image model (medium). Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/krea?theme=light|dark|color --- krea-2-large --- ID: krea-2-large Name: Krea 2 Large Brand: Krea Category: generate Description: Creative image model (large). Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/krea?theme=light|dark|color --- runway-gen4-image --- ID: runway-gen4-image Name: Runway Gen-4 Image Brand: Runway Category: generate Description: Runway image generation (text-to-image only). Capabilities: auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/runway?theme=light|dark|color --- runway-gen4-image-turbo --- ID: runway-gen4-image-turbo Name: Runway Gen-4 Image Turbo Brand: Runway Category: generate Description: Faster Runway image generation (text-to-image only). Capabilities: auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/runway?theme=light|dark|color --- kling-omni-image --- ID: kling-omni-image Name: Kling Omni Image Brand: Kling Category: generate Description: Kling image model. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/kling?theme=light|dark|color --- wan-2.5-preview-image --- ID: wan-2.5-preview-image Name: Wan 2.5 Preview Image Brand: Wan Category: generate Description: Wan image preview model. Capabilities: reference_images, auto_enhance, requires_prompt, aspect_ratio Parameters: prompt: string; max_length 4000; required aspect_ratio: enum; one of: 16:9, 4:3, 1:1, 3:4, 9:16; default "16:9" generations_count: integer; range 1–4; default 1 Logos: GET /v1/logos/wan?theme=light|dark|color --- topaz-image-upscale --- ID: topaz-image-upscale Name: Topaz Image Upscale Brand: Topaz Category: editing Description: Enhances resolution up to 4K while preserving details. Capabilities: reference_images, upscale Parameters: prompt: string; max_length 0 upscale_factor: enum; one of: 2, 4; default 2 generations_count: integer; range 1–1; default 1 Logos: GET /v1/logos/topaz?theme=light|dark|color --- v1 --- ID: v1 Name: Music v1 Brand: CortexAI Category: generate Description: Generate instrumental or vocal tracks from style prompts and lyrics, with live stream preview. Capabilities: reference_images, auto_enhance, requires_prompt, streaming, instrumental Parameters: prompt: string; max_length 500; required lyrics: string; max_length 20000 instrumental: boolean; default true tags: array negative_tags: array enable_streaming: boolean; default true Logos: GET /v1/logos/cortex?theme=light|dark|color --- voice-clone --- ID: voice-clone Name: Voice Clone Brand: CortexAI Category: generate Description: Clone a voice from a short sample and synthesize speech from transcript text. Capabilities: reference_images, auto_enhance, requires_prompt, sample_upload, saved_voice_per_key Parameters: transcript: string; required clip: file language: string; default "en" speed: number volume: number emotion: string Logos: GET /v1/logos/cortex?theme=light|dark|color LOGOS ------------------------------------------------------------------------ GET https://studio.claude.gg/v1/logos — provider catalog (13 providers) GET https://studio.claude.gg/v1/logos/:slug?theme=light|dark|color — SVG logo slug can be provider id or model id (resolved automatically). Add redirect=0 to get JSON metadata instead of SVG body. MUSIC — OVERVIEW (model id is always v1) ------------------------------------------------------------------------ Do NOT send a model field — fixed to v1. Flow: 1. POST /v1/music/generations 2. GET /v1/music/generations/:id — poll parent or variant id 3. While streaming → GET /v1/music/stream/:variantId 4. When completed → GET /v1/music/files/:variantId Statuses: queued | streaming | completed | failed Recommended: • Use free-text prompt (style/mood). Omit tags unless you need hard constraints. • If tags is sent, include at least one (empty array rejected). • At most one of prompt_strength and style_scale may be > 1.0 • Defaults: style_scale 4.5, prompt_strength 1.0 • Instrumental: instrumental true, no lyrics • With vocals: instrumental false + lyrics required • Lyrics max 1531 BPE tokens (use POST /v1/music/tokenize to count) GET /v1/music/tags ------------------------------------------------------------------------ Style tag vocabulary (~4000 entries). No API key. Query: q or search (filter), limit (max 2000), offset curl "https://studio.claude.gg/v1/music/tags?q=synth&limit=20" Response: { "object":"list", "model":"v1", "data":["tag",...], "count", "total", "offset", "limit", "q" } POST /v1/music/tokenize ------------------------------------------------------------------------ Count lyrics tokens (BPE, limit 1531). Helper bucket. Body: { "lyrics": "..." } (alias: text) Response: { "object":"music.tokenize", "model":"v1", "tokens": N, "limit": 1531, "remaining": N, "over": false } POST /v1/music/lyrics/enhance ------------------------------------------------------------------------ AI lyricist — expand idea + style into full lyrics. Helper bucket. Body: idea / lyrics / text — theme or draft (at least one of idea or prompt required) prompt / style — music style line language / lang — optional stream: true — SSE live typing (events: start, delta, done, error) Non-stream response: { "object":"music.lyrics_enhancement", "lyrics":"...", "model":"v1", "was_enhanced": true } POST /v1/music/generations ------------------------------------------------------------------------ Body: prompt string style/mood (max 500 chars). Alias: style lyrics string required when not instrumental instrumental boolean default true if no lyrics tags string[] optional; if set, min 1 tag negative_tags string[] optional prompt_strength float 1.0–4.0 (default 1.0) style_scale float 1.0–12.0 (default 4.5) length_range [min,max] seconds, multiples of 30 enable_streaming boolean stream_format ogg | mp3 Returns job id + usually two variants (A/B): { "id":"mg_...", "object":"music.generation", "status":"queued", "model":"v1", "variants":[{ "id":"mg_..._a", "status":"queued" }, ...] } GET /v1/music/generations/:id ------------------------------------------------------------------------ Poll parent job or variant id. When streaming: stream_url present When completed: audio_url → /v1/music/files/:id progress field 0–99 while generating Variant completed example: { "id":"mg_..._a", "status":"completed", "title":"...", "duration":182.4, "audio_url":"/v1/music/files/mg_..._a" } GET /v1/music/stream/:id | GET /v1/music/files/:id ------------------------------------------------------------------------ stream — progressive live audio while generating (no auth on opaque id) files — final audio after completed; supports HTTP Range Open streams only when user plays — avoid background stream spam. VOICE CLONE ------------------------------------------------------------------------ Clone a voice from a short sample, then synthesize speech from text. GET /v1/voice-clone/status Returns whether this API key already has a saved voice sample. POST /v1/voice-clone/generate multipart/form-data OR JSON Fields: clip / file / audio — voice sample (required on first use) clip_base64 / audio_base64 — alternative to file upload transcript / text / prompt — REQUIRED speech text to synthesize language — default en speed, volume, emotion — optional force — re-clone even if sample exists Response: { "object":"voice.speech", "mime":"audio/mpeg", "audio_base64":"...", "audio_url":"data:audio/mpeg;base64,...", "has_voice":true, "setup":true|false, "reused":true|false, "clip_id":"vc_..." } After first successful upload, later calls can omit the clip (reuses saved voice). AUDIO — POST /v1/audio/generate ------------------------------------------------------------------------ Unified audio endpoint. tool must be: sfx | music | tts Common: text string required sfx (sound effects): duration_seconds 0.5–30 or omit for auto prompt_influence 0–1 (default 0.3) loop boolean number_of_generations 1–4 music (text-to-music via audio API): duration_seconds, prompt_influence, etc. tts (text-to-speech): voice_id string required — from GET /v1/audio/voices model_id optional stability, similarity_boost, style, speed — optional voice settings GET /v1/audio/voices — list voices (paginated, filterable) Query: search, page, page_size, gender, age, accent, language, category GET /v1/audio/models — list TTS / audio models AGENT CHAT — POST /v1/agent/chat ------------------------------------------------------------------------ NDJSON stream (application/x-ndjson). Helper bucket. Body: { "messages": [{ "role":"user"|"assistant", "content":"...", "images":["url",...], "results":[...] }] } Max 24 messages kept; content truncated to 8000 chars each. Stream event types (one JSON object per line): { "type": "status", ... } { "type": "tool_start", "tool": "generate_image"|"edit_image", ... } { "type": "tool_end", ... } { "type": "image", "url": "...", ... } { "type": "text", "delta": "..." } { "type": "done", "reply": "...", "images": [...], "tool_trace": [...] } { "type": "error", "message": "..." } Agent can generate and edit images via tool calls routed through the image API. Returns 503 agent_not_configured if agent is disabled on server. QUICKSTART (copy-paste) ------------------------------------------------------------------------ # 1. List models curl https://studio.claude.gg/v1/models # 2. Generate image curl -X POST https://studio.claude.gg/v1/images/generations \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt":"sunset over mountains","model":"gpt-image-2","aspect_ratio":"16:9"}' # 3. Poll curl "https://studio.claude.gg/v1/images/BATCH_ID" -H "Authorization: Bearer YOUR_API_KEY" # 4. Music curl -X POST https://studio.claude.gg/v1/music/generations \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt":"lofi hip hop","instrumental":true}' PRIVACY & CLIENT RULES ------------------------------------------------------------------------ Never log or expose API keys. Status feed never includes user prompts or keys. Use first-party /images/ and /v1/music/files/ URLs — do not guess upstream hosts. On validation errors, read error.details[] for field-level fixes. On 429, honor retry_after seconds. Poll image batches every 2–3s; music every 1–2s (faster when streaming). CORS is open for browser tools. ======================================================================== Generated for agents · 2026-09-12T11:53:01.040Z Base: https://studio.claude.gg/v1 ========================================================================