← Back to API overview
SEED AUDIO 2.0 DEVELOPER PLATFORM

Seed Audio 2.0 API Documentation

Create complete audio scenes and poll generated results through one stable asynchronous API.

Last updated: July 21, 2026

The Seed Audio 2.0 API is asynchronous. Submit a generation request, save the returned task ID, and poll the status endpoint until the task succeeds or fails. Dialogue, ambience, background music, and sound effects are composed behind one consistent interface.

Base URL

https://api.seedaudio.co/v2

Authentication

Create an API key from your account settings. Send it as a Bearer token with every request.

Authorization: Bearer YOUR_API_KEY
Keep API keys on your server. Never expose a production key in browser code or a public repository.

Billing

  • Web and API requests use the same credit wallet.
  • Audio is billed at 5 credits per generated minute, calculated from actual output duration.
  • The minimum charge for a completed generation is 5 credits.
  • Credits are reserved before generation; unused credits are returned after success.
  • Failed tasks receive a full refund of their reservation.

Create a generation

POST /audio/generations

curl -X POST 'https://api.seedaudio.co/v2/audio/generations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: seed-audio-request-001' \
  -d '{
    "model": "seed-audio-2.0",
    "prompt": "Create a cinematic midnight radio scene with two quiet speakers, soft rain, distant traffic, and a restrained ambient score.",
    "output_format": "mp3",
    "sample_rate": 24000,
    "speed": 1,
    "volume": 1,
    "pitch": 0
  }'

Successful submission returns HTTP 202:

{
  "id": "audio_task_xxx",
  "object": "audio.generation",
  "model": "seed-audio-2.0",
  "status": "processing",
  "billing": { "reserved_credits": 5 },
  "output": null,
  "usage": null,
  "error": null
}

Request fields

FieldTypeRequiredDescription
modelstringyesMust be seed-audio-2.0
promptstringyesAudio-scene prompt, up to 2,048 characters
voicestringnoSupported preset voice ID
audio_urlsstring[]noUp to three public audio reference URLs
image_urlstringnoOne public image URL; cannot be combined with audio references
output_formatstringnomp3, wav, pcm, or ogg_opus; default mp3
sample_ratenumberno8000, 16000, 24000, 32000, 44100, or 48000
speednumbernoPlayback speed from 0.5 to 2
volumenumbernoOutput volume from 0.5 to 2
pitchnumbernoPitch adjustment from -12 to 12
Idempotency-Key is optional but strongly recommended. Reusing the same key with the same request returns the original task without another charge.

Query task status

GET /audio/generations/{task_id}

curl 'https://api.seedaudio.co/v2/audio/generations/audio_task_xxx' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Poll every 3–5 seconds. A successful task returns:

{
  "id": "audio_task_xxx",
  "object": "audio.generation",
  "model": "seed-audio-2.0",
  "status": "succeeded",
  "output": {
    "url": "https://cdn.seedaudio.co/v2/output.mp3",
    "duration_seconds": 43.2,
    "format": "mp3"
  },
  "usage": { "credits": 5 },
  "error": null
}

Possible statuses are queued, processing, succeeded, failed, and canceled.

JavaScript example

const headers = {
  Authorization: `Bearer ${process.env.SEED_AUDIO_API_KEY}`,
  "Content-Type": "application/json",
  "Idempotency-Key": crypto.randomUUID(),
};

const created = await fetch("https://api.seedaudio.co/v2/audio/generations", {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "seed-audio-2.0",
    prompt: "Build a cinematic city sound scene after midnight.",
    output_format: "mp3",
  }),
}).then((response) => response.json());

const task = await fetch(
  `https://api.seedaudio.co/v2/audio/generations/${created.id}`,
  { headers: { Authorization: headers.Authorization } }
).then((response) => response.json());

Python example

import os
import uuid
import requests

base_url = "https://api.seedaudio.co/v2"
headers = {
    "Authorization": f"Bearer {os.environ['SEED_AUDIO_API_KEY']}",
    "Idempotency-Key": str(uuid.uuid4()),
}

created = requests.post(
    f"{base_url}/audio/generations",
    headers=headers,
    json={
        "model": "seed-audio-2.0",
        "prompt": "Create a layered documentary sound scene.",
        "output_format": "mp3",
    },
).json()

task = requests.get(
    f"{base_url}/audio/generations/{created['id']}",
    headers={"Authorization": headers["Authorization"]},
).json()

Errors

Errors use real HTTP status codes and a consistent response body.

{
  "error": {
    "code": "insufficient_credits",
    "message": "At least 5 credits are required",
    "request_id": "request_xxx"
  }
}
HTTPCodeMeaning
400invalid_requestInvalid request parameters
401invalid_api_keyMissing, invalid, or deleted API key
402insufficient_creditsNot enough available credits
403api_access_requiredA paid plan or credit purchase is required
404task_not_foundTask not found or belongs to another account
409idempotency_conflictIdempotency key reused with another request
429rate_limit_exceededRequests are too frequent