ข้ามไปที่เนื้อหา

เอกสารสำหรับนักพัฒนา

เอกสารประกอบ Audio API

สร้างงาน ค้นหาสถานะ จากนั้นดาวน์โหลดผ่านจุดสิ้นสุดของไซต์ที่ได้รับการตรวจสอบสิทธิ์ เก็บคีย์ API ไว้บนเซิร์ฟเวอร์ของคุณ

จำเป็นต้องมีแพ็กเครดิตที่ชำระเงินจริงหรือการสมัครสมาชิกแบบชำระเงินที่ใช้งานอยู่ เครดิตที่มอบให้เพียงอย่างเดียวไม่สามารถปลดล็อค API ได้ การตอบกลับ 503 หมายความว่าบริการไม่ได้เปิดใช้งานหรือไม่สามารถใช้งานได้ชั่วคราว

1. เริ่มต้นอย่างรวดเร็ว

รันตัวอย่างเหล่านี้ในเทอร์มินัลเซิร์ฟเวอร์ Python ต้องการคำขอติดตั้ง pip 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

จุดสิ้นสุดทั้งหมดต้องมีการอนุญาต: ผู้ถือ งานเป็นของบัญชีและสามารถเข้าถึงได้โดยใช้รหัสที่ใช้งานอื่นจากบัญชีนั้น URL ดาวน์โหลดมีเสถียรภาพ แต่เป็นส่วนตัว อย่าใส่คีย์ใน URL ประวัติการลงชื่อเข้าใช้ใช้การตรวจสอบสิทธิ์เซสชัน

3. ขอพารามิเตอร์

ประเภทเนื้อหา: application/json; สูงสุด 32 กิโลไบต์ ฟิลด์ที่ไม่รู้จักถูกปฏิเสธ URL อ้างอิงต้องใช้ HTTPS สาธารณะ ไม่ใช่ที่อยู่ภายใน

พารามิเตอร์ค่านิยมหมายเหตุ
modelseed-audio-1.0ค่าเริ่มต้นและเป็นรุ่นเดียวเท่านั้น
promptstringจำเป็น: อักขระ Unicode 1–2048 ตัว ไม่ใช่เฉพาะช่องว่าง ตัวแบ่งบรรทัดจะถูกเก็บรักษาไว้
audio_referencesstring[]URL เสียง HTTPS สาธารณะสูงสุด 3 รายการ อ้างอิงตามลำดับเป็น @Audio1/2/3 การอ้างอิงแต่ละรายการ: สูงสุด 10 MB และ 30 วินาที ตรวจสอบโดยบริการ การสร้าง
voicestringค่าที่ตั้งล่วงหน้าตามรายการด้านล่าง ใช้ช่องอ้างอิงเสียงหนึ่งช่อง
image_urlstringURL รูปภาพ HTTPS สาธารณะหนึ่งรายการ ไม่สามารถใช้ร่วมกับการอ้างอิงเสียงหรือเสียงได้
output_formatmp3 / wav / pcm / ogg_opusmp3 เริ่มต้น PCM เป็นไฟล์ดิบและอาจไม่สามารถเล่นในเบราว์เซอร์ได้
sample_rate8000 / 16000 / 24000 / 32000 / 44100 / 48000ค่าเริ่มต้น 24000 Hz
speed / volume0.5–2ทั้งสองค่าเริ่มต้นเป็น 1; จำนวนจำกัดเท่านั้น
pitch-12–12จำนวนเต็ม; ค่าเริ่มต้น 0
multilingualbooleanค่าเริ่มต้นเป็นเท็จ; ส่วนขยาย API ที่ไม่เป็นไปตามภาษาของหน้า
รหัสเสียงที่รองรับ

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. สถานะการเรียกเก็บเงินและงาน

ที่เครดิต 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 การหมดเวลาไม่ได้หมายความว่าการสร้างล้มเหลว: อย่าลองใหม่โดยใช้คีย์ใหม่

ต่อบัญชี: คำขอสร้าง 6 ต่อนาที, 60 รวมการสืบค้นและการดาวน์โหลดต่อนาที และงาน 2 ที่กำลังดำเนินการ คีย์ทั้งหมดมีข้อจำกัดเหล่านี้ร่วมกัน ความจุของไซต์อาจส่งคืน 429 สำรวจทุก 5 วินาที

6. ข้อผิดพลาดและการดาวน์โหลด

HTTPcodeการดำเนินการ
400invalid_requestไม่มีคีย์ idempotency อินพุตไม่ถูกต้อง หรือช่องที่ไม่รู้จัก
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บริการถูกปิดใช้งาน การกำหนดค่าไม่สมบูรณ์ หรือไม่สามารถใช้งานได้ชั่วคราว เก็บรหัสงานและคีย์ idempotency ไว้

การดาวน์โหลดรองรับช่วงไบต์เดียว ช่วงต่อท้าย และ HEAD การตอบกลับจะไม่ถูกแคชหรือเปลี่ยนเส้นทางไปยังสื่อภายนอก ตัวอย่างใช้ MP3; ใช้ส่วนขยายที่เหมาะสมสำหรับรูปแบบอื่น ไม่มีการเสนอการยกเลิกของลูกค้าและการโทรกลับที่ลูกค้ากำหนด สอบถามผลลัพธ์