コンテンツにスキップ
SeedAudio

開発者向けドキュメント

オーディオ API ドキュメント

タスクを作成し、そのステータスをクエリして、認証されたサイトのエンドポイントを通じてダウンロードします。 API キーをサーバー上に保管します。

有料のクレジットパックまたは有効な有料サブスクリプションが必要です。贈られたクレジットだけでは API のロックを解除できません。 503 応答は、サービスがアクティブ化されていないか、一時的に利用できないことを意味します。

1. クイックスタート

これらの例をサーバー端末で実行します。 Python には pip install リクエストが必要です。 JavaScript は Node.js 22 以降を使用します。

cURL

export SEEDAUDIO_ORIGIN='https://seedaudio.now'
export SEEDAUDIO_API_KEY='YOUR_API_KEY'

curl --fail-with-body "$SEEDAUDIO_ORIGIN/api/v1/audio/generations" \
  -H "Authorization: Bearer $SEEDAUDIO_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: rain-scene-001' \
  -d '{"model":"seed-audio-1.0","prompt":"Gentle rain against a window.","output_format":"mp3"}'

# Replace TASK_ID with the returned id. Poll every 5 seconds until terminal.
curl --fail-with-body "$SEEDAUDIO_ORIGIN/api/v1/audio/generations/TASK_ID" \
  -H "Authorization: Bearer $SEEDAUDIO_API_KEY"

# After status is succeeded, download using the same account's active key.
curl --fail-with-body "$SEEDAUDIO_ORIGIN/api/v1/audio/generations/TASK_ID/content" \
  -H "Authorization: Bearer $SEEDAUDIO_API_KEY" -o audio.mp3

JavaScript (Node.js)

const origin = "https://seedaudio.now";
const headers = { Authorization: 'Bearer ' + process.env.SEEDAUDIO_API_KEY };
async function json(response) {
  const data = await response.json();
  if (!response.ok) throw new Error(data.error?.message || 'Request failed');
  return data;
}
// Persist this key with your request; reuse it if the POST response is lost.
const idempotencyKey = 'rain-scene-001';
let task = await json(await fetch(origin + '/api/v1/audio/generations', {
  method: 'POST',
  headers: { ...headers, 'Content-Type': 'application/json', 'Idempotency-Key': idempotencyKey },
  body: JSON.stringify({ prompt: 'Gentle rain against a window.' })
}));
const deadline = Date.now() + 65 * 60 * 1000;
while (['queued', 'processing'].includes(task.status) && Date.now() < deadline) {
  await new Promise(resolve => setTimeout(resolve, 5000));
  task = await json(await fetch(origin + '/api/v1/audio/generations/' + task.id, { headers }));
}
if (task.status !== 'succeeded') throw new Error(task.error?.message || 'Poll deadline reached; keep the task id.');
const response = await fetch(task.output.url, { headers });
if (!response.ok) throw new Error('Download failed');
const { writeFile } = await import('node:fs/promises');
await writeFile('audio.mp3', new Uint8Array(await response.arrayBuffer()));

Python

import os, time, requests

origin = "https://seedaudio.now"
headers = {"Authorization": "Bearer " + os.environ["SEEDAUDIO_API_KEY"]}
# Keep this key with your request; a new scene needs a new key.
response = requests.post(origin + "/api/v1/audio/generations", timeout=45,
    headers={**headers, "Idempotency-Key": "rain-scene-001"},
    json={"prompt": "Gentle rain against a window."})
response.raise_for_status()
task = response.json()
deadline = time.monotonic() + 65 * 60
while task["status"] in ("queued", "processing") and time.monotonic() < deadline:
    time.sleep(5)
    response = requests.get(origin + "/api/v1/audio/generations/" + task["id"], headers=headers, timeout=90)
    response.raise_for_status()
    task = response.json()
if task["status"] != "succeeded":
    raise RuntimeError(task.get("error") or "Poll deadline reached; keep the task id.")
with requests.get(task["output"]["url"], headers=headers, stream=True, timeout=60) as response:
    response.raise_for_status()
    with open("audio.mp3", "wb") as audio:
        for chunk in response.iter_content(65536):
            audio.write(chunk)

2. エンドポイントとアイデンティティ

https://seedaudio.now

  • POST /api/v1/audio/generations → 202
  • GET /api/v1/audio/generations/{id} → 200
  • GET / HEAD /api/v1/audio/generations/{id}/content → 200 / 206

すべてのエンドポイントには認証: Bearer が必要です。タスクはアカウントに属しており、そのアカウントの別のアクティブなキーを使用してアクセスできます。ダウンロード URL は安定していますが、非公開です。 URL にはキーを決して入れないでください。サインイン履歴ではセッション認証が使用されます。

3. リクエストパラメータ

コンテンツタイプ: application/json;最大 32 KiB。不明なフィールドは拒否されます。参照 URL では、内部アドレスではなく、パブリック HTTPS を使用する必要があります。

パラメータ価値観注意事項
modelseed-audio-1.0デフォルトの唯一のモデル。
promptstring必須: 1 ~ 2048 個の Unicode 文字 (空白のみではない)。改行は保持されます。
audio_referencesstring[]最大 3 つのパブリック HTTPS オーディオ URL。順番に @Audio1/2/3 として参照されます。各参照: 最大 10 MB、30 秒、生成 サービスによってチェックされます。
voicestring以下にリストされているプリセット。 1 つのオーディオ参照スロットを消費します。
image_urlstring1 つのパブリック HTTPS 画像 URL。音声またはオーディオ参照と組み合わせることはできません。
output_formatmp3 / wav / pcm / ogg_opusデフォルトのmp3。 PCM は生のファイルであるため、ブラウザでは再生できない可能性があります。
sample_rate8000 / 16000 / 24000 / 32000 / 44100 / 48000デフォルトは 24000 Hz。
speed / volume0.5–2どちらもデフォルトは 1 です。有限数のみ。
pitch-12–12整数;デフォルトは0。
multilingualbooleanデフォルトは false。ページ言語に従っていない API 拡張機能。
サポートされている音声 ID

stokie_en · vivi_mixed_en_zh_ja_es_id · mindy_en_es_id_pt_zh · kian_en_zh · cedric_en_zh · sophie_en_zh · jean_en_zh · magnus_en_zh · mabel_en_zh · nadia_en_zh · opal_en_zh · pearl_en_zh · quentin_en_zh · corinne_mixed_en_zh · esther_mixed_en_zh · lyla_mixed_en_zh · tracy_es_zh · sandy_es_mixed_en_zh · felix_zh · celeste_zh · monkey_king_zh

4. 請求とタスクのステータス

1 分あたり 75 クレジットの場合、料金は秒単位で切り上げられ、最小値は 10 クレジット、上限は 150 クレジットです。作成予約 150;成功すると差分が返され、失敗すると予約が返されます。元のクレジットの有効期限は変更されません。

8 / 30 / 60 / 120 秒の場合、それぞれ 10 / 38 / 75 / 150 クレジットがかかります。返金または異議申し立てを受けた購入では、新しい API タスクを作成できなくなります。サブスクリプションの場合は当期分の支払いが基準となり、次の期間の支払いが完了するまで続きます。その他の有効な有料購入があれば引き続き利用できます。

queued → processing → succeeded / failed

成功した場合は、プライベート ストレージと請求の両方が完了したことを意味します。回復は最大 60 分間続きます。配信または信頼できる期間が失敗した場合は、予約されたクレジットが返されます。エラーにはサイト側の情報のみが含まれます。

成功した応答の例

{
  "id": "TASK_ID",
  "object": "audio.generation",
  "model": "seed-audio-1.0",
  "status": "succeeded",
  "billing": {
    "reserved_credits": 150,
    "charged_credits": 38,
    "refunded_credits": 112
  },
  "output": {
    "url": "https://seedaudio.now/api/v1/audio/generations/TASK_ID/content",
    "format": "mp3",
    "sample_rate": 24000,
    "duration": 30
  },
  "usage": {
    "audio_seconds": 30
  },
  "error": null
}

5. 再試行と制限

べき冪性キーは必須です: 1 ~ 128 文字、数字、または ._:-。新しいタスクごとに新しいキーを使用し、再試行時にキーと本文を保存します。キーは、レコードの有効期間中、アカウントおよび API バージョン内で一意です。同じキーと本体は元のタスクを返します。変更された本文は 409 を返します。タイムアウトは作成が失敗したことを意味するものではありません。新しいキーを使用して再試行しないでください。

アカウントごと: 1 分あたりの 6 作成リクエスト、1 分あたりのクエリとダウンロードの組み合わせ 60、実行中のタスク 2。すべてのキーはこれらの制限を共有します。サイト容量は 429 を返す場合もあります。5 秒ごとにポーリングします。

6. エラーとダウンロード

HTTPcodeアクション
400invalid_request冪等キーが欠落しているか、無効な入力または不明なフィールドがあります。
401invalid_api_keyキーが見つからないか、無効であるか、取り消されています。
402insufficient_credits利用可能なクレジットが 150 未満です。
403purchase_required利用資格のある支払い済みクレジットパックまたは有効な有料サブスクリプションがありません(例: 支払いが返金された、または異議申し立てを受けた)。
404not_found見つからないか、このアカウントが所有していません。
409idempotency_conflict / not_ready同じキーで異なる入力が使用されているか、オーディオの準備ができていません。
413request_too_largeJSON が 32 KiB を超えています。
416Range無効なバイト範囲です。複数の範囲はサポートされていません。
429rate_limit / concurrency_limit再試行する前に、Retry-After を待ってください。
503api_unavailable / temporarily_unavailableサービスが無効になっているか、構成が不完全であるか、一時的に利用できません。タスク ID と冪等キーを保持します。

ダウンロードでは、シングルバイト範囲、サフィックス範囲、および HEAD がサポートされます。応答はキャッシュされず、外部メディアにリダイレクトされません。例では MP3 を使用します。他の形式には適切な拡張子を使用してください。クライアントのキャンセルと顧客定義のコールバックは提供されません。結果を問い合わせます。