เอกสาร API

เชื่อมต่อ TTS.ai เข้ากับแอพพลิเคชันของคุณ ด้วย REST API ของเรา รูปแบบที่เข้ากันได้กับ OpenAI เพื่อการย้ายที่ง่าย

แอปพลิเคชัน REST เข้ากันได้กับ OpenAI การตอบสนอง JSON สนับสนุนการสตรีม

รายละเอียด

API ของ TTS.ai ช่วยให้คุณสามารถเข้าถึงคุณสมบัติของแพลตฟอร์มได้โดยใช้โปรแกรม: การสังเคราะห์ข้อความเป็นเสียง, การแปลคำพูดเป็นข้อความ, การคอลลินเสียง, การเพิ่มคุณภาพเสียง, และอื่นๆ API ใช้มาตรฐาน REST กับร่างคำขอ/คำตอบ JSON

กุญแจ API

รับกุญแจ API ของคุณจาก ตั้งค่าบัญชีผู้ใช้. ใช้ได้กับโปรและเอ็นเตอร์ไพรส์

ที่อยู่ URL พื้นฐาน

https://api.tts.ai/v1/

อนุญาต

หมายเลขผู้ถือผ่าน Authorization ส่วนหัว

การตรวจสอบสิทธิ์

ระดับฟรี — ไม่จำเป็นต้องใช้กุญแจ แจ้งข่าวโดยนิรนามไปยัง /v1/tts/ ทำงานโดยไม่มีการยืนยันใดๆ สูงสุด 5,000 ตัวอักษร/วันต่อ IP โดยใช้แบบจำลองฟรีของเรา (piper, vits, melotts, kokoro). ลงทะเบียนเพื่อรับบัญชีฟรี เพื่อรับโบนัสตัวละคร 15,000 ตัว และเข้าถึงตัวอย่างพิเศษ

สำหรับรุ่นพิเศษและอัตราค่าบริการที่สูงขึ้น ตรวจสอบด้วยโทเค็นผู้ถือใน Authorization ส่วนหัว.

ส่วนหัว HTTP
Authorization: Bearer sk-tts-your-api-key-here
เก็บกุญแจ API ไว้เป็นความลับ อย่าแบ่งปันมันในโค้ดด้านไคลเอนต์, แหล่งเก็บข้อมูลสาธารณะ, หรือปูมบันทึก เปลี่ยนกุญแจเป็นประจำจากการตั้งค่าบัญชีผู้ใช้ของคุณ

เครื่องมือพัฒนาโปรแกรมName

เครื่องมือพัฒนาโปรแกรม (SDK) อย่างเป็นทางการช่วยให้การรวม TTS.ai เข้ากับโปรแกรมของคุณง่ายขึ้น ทั้งสองอย่างเป็นโอเพนซอร์สและมีให้ดาวน์โหลดบน GitHub

Python

pip install ttsai
from tts_ai import TTSClient

client = TTSClient(api_key="sk-tts-...")
audio = client.generate(
    text="Hello world!",
    model="kokoro"
)
client.save(audio, "output.wav")
GitHub

JavaScript / Node.js

npm install @ttsainpm/ttsai
const { TTSClient } = require('@ttsainpm/ttsai');

const client = new TTSClient({
  apiKey: 'sk-tts-...'
});
const audio = await client.generate({
  input: 'Hello world!',
  model: 'kokoro'
});
await client.saveToFile(audio, 'output.wav');
GitHub

ที่อยู่ URL พื้นฐาน

ที่อยู่ URL พื้นฐาน: https://api.tts.ai/v1/

จุดจบทั้งหมดจะเกี่ยวข้องกับที่อยู่ URL พื้นฐานนี้ ตัวอย่างเช่น จุดจบของ TTS คือ:

POST https://api.tts.ai/v1/tts/

ค่าจำกัดอัตรา

ค่าจำกัดอัตรา API ขึ้นอยู่กับแผน:

วางแผน คำขอ/ นาที ร่วมกัน ความยาวข้อความสูงสุด
ว่าง 10 2 500 อักขระ
เริ่ม 30 3 1,000,000 อักษร
โปร 60 5 1,000,000 อักษร
เอ็นเตอร์ไพรส์ 300 20 50,000 ตัวอักษร

หัวข้อจำกัดอัตราจะถูกรวมไว้ในทุกการตอบสนอง: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

ค่าสินเชื่อ

บริการ ค่า หน่วย
TTS (โมเดลฟรี: Piper, VITS, MeloTTS) 1,000 ตัวอักษร ต่อ 1,000 ตัวอักษร
TTS (โมเดลมาตรฐาน: Kokoro, CosyVoice 2, ฯลฯ) 2,000 ตัวอักษร ต่อ 1,000 ตัวอักษร
TTS (รุ่นพิเศษ: Tortoise, Chatterbox, ฯลฯ) 4,000 ตัวอักษร ต่อ 1,000 ตัวอักษร
คำพูดเป็นข้อความName 2,000 ตัวอักษร ต่อนาทีของเสียง
การคัดลอกเสียง 4,000 ตัวอักษร ต่อ 1,000 ตัวอักษร
ตัวเปลี่ยนเสียงName 3,000 ตัวอักษร ต่อนาทีของเสียง
เพิ่มประสิทธิภาพเสียง 2,000 ตัวอักษร ต่อนาทีของเสียง
ลบเสียงร้อง / แยกเสียงร้อง 3,000-4,000 ตัวอักษร ต่อนาทีของเสียง
การแปลภาษาComment 5,000 ตัวอักษร ต่อนาทีของเสียง
การสนทนาด้วยเสียงName 3,000 ตัวอักษร ต่อรอบ
เครื่องมือค้นหาคีย์และ BPM ว่าง --
ตัวแปลงเสียงName ว่าง --

ข้อความเป็นเสียงName

POST /v1/tts/

แปลงข้อความเป็นเสียงพูด นำกลับมาเป็นแฟ้มเสียงในรูปแบบที่ร้องขอ

ตำแหน่งของคำร้อง

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
model string ไม่มี หมายเลขรุ่น (เช่น kokoro, chatterbox, piper) หากละเลย ระบบจะเลือกรุ่นที่รองรับ ภาษา ที่ร้องขอไว้อัตโนมัติ — kokoro สำหรับภาษา en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper สำหรับภาษาอื่นๆที่รองรับ (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.)
text string ใช่ ข้อความที่จะแปลงเป็นเสียง จำนวนจำกัดต่อการร้องขอ: 500 อักขระ (นิรนาม), 5,000 (บัญชีฟรี), 1,000,000 (แพ็คเกจจ่ายเงิน) ข้อมูลที่เข้าถึงยาวจะถูกแยกออกเป็นชิ้นเล็ก ๆ โดยอัตโนมัติจากเซิร์ฟเวอร์
voice string ใช่ หมายเลขเสียง (ใช้ /v1/voices/ เพื่อแสดงรายการเสียงที่ใช้ได้)
format string ไม่มี รูปแบบการส่งออก: mp3 (ปริยาย), wav, flac, ogg
speed float ไม่มี ตัวคูณความเร็วในการพูด ค่าปริยาย: 1.0 ช่วง: 0.5 ถึง 2.0
language string ไม่มี รหัสภาษา (ตัวอย่างเช่น en, es). ตรวจสอบอัตโนมัติหากละเลย
instructions string ไม่มี ตัวบ่งชี้การปฏิบัติ/ ส่ง (≤500 อักขระ) ตัวอย่างเช่น < code >\
pronunciations object | array ไม่มี คำพูดที่ใช้ในแต่ละคำร้องขอจะถูกบันทึกไว้ ใช้ {\\
stream boolean ไม่มี เปิดใช้งานการตอบสนองการสตรีม ค่าปริยาย: false

คำขอตัวอย่าง

cURL
curl -X POST https://api.tts.ai/v1/tts/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kokoro",
    "text": "Hello from TTS.ai! This is a test.",
    "voice": "af_bella",
    "format": "mp3"
  }' \
  --output output.mp3

แท็ก SSML

หมุนตัวเลข, วัน, เงินตรา, หมายเลขโทรศัพท์, และคำย่อใน

เข้าใจข้อมูลเข้าพูดเป็น
cardinal1234one thousand two hundred thirty-four
ordinal21twenty-first
date1999-12-31เดือนธันวาคม 31, 1999
time14:30two thirty PM
telephone+1-555-867-5309plus one five five five eight six seven…
currency$1,234.56one thousand two hundred thirty-four dollars and fifty-six cents
spell-outNASAN A S A

รูปแบบวันที่ปริยายคือ mdy สำหรับภาษาอังกฤษ และ dmy สำหรับภาษาอื่น ๆ; ใช้แทนด้วย format=\

ตัวอย่าง
{
  "model": "kokoro",
  "voice": "af_bella",
  "text": "Your appointment is on <say-as interpret-as=\"date\">2026-04-26</say-as> at <say-as interpret-as=\"time\">14:30</say-as>. Please call <say-as interpret-as=\"telephone\">+1-555-867-5309</say-as> if you need to reschedule."
}

การตอบสนอง

The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result.

Step 1: Submit request

Response (JSON)
{
  "uuid": "77b71db532874ce98e84a69a2d740d4c",
  "job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
  "status": "queued",
  "credits_used": 11,
  "credits_remaining": 15000
}

Step 2: Poll for result

GET /v1/speech/results/?uuid=<job_uuid>

Poll this endpoint every 1-2 seconds until status is completed or failed.

Polling response (completed)
{
  "status": "completed",
  "result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}
Polling response (still processing)
{
  "status": "processing"
}

Step 3: Download audio

Fetch the result_url from the completed response to download the audio file.

ตัวอย่างเต็ม

Python
import requests, time

API_KEY = "sk-tts-your-key"
BASE = "https://api.tts.ai"

# 1. Submit TTS request
resp = requests.post(f"{BASE}/v1/tts/", json={
    "model": "kokoro",
    "text": "Hello from TTS.ai!",
    "voice": "af_bella"
}, headers={"Authorization": f"Bearer {API_KEY}"})
data = resp.json()
uuid = data["uuid"]

# 2. Poll for result
while True:
    result = requests.get(f"{BASE}/v1/speech/results/",
        params={"uuid": uuid}).json()
    if result["status"] == "completed":
        # 3. Download audio
        audio = requests.get(result["result_url"])
        with open("output.mp3", "wb") as f:
            f.write(audio.content)
        break
    elif result["status"] == "failed":
        raise Exception(result.get("error", "Generation failed"))
    time.sleep(1.5)

Streaming alternative: For supported models (Kokoro, MeloTTS), use POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.

คำพูดเป็นข้อความName

POST /v1/stt/

บันทึกเสียงเป็นข้อความ รองรับภาษา 99 ภาษาด้วยการตรวจจับอัตโนมัติ

ตำแหน่งของคำร้อง (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
file file ใช่ แฟ้มเสียง (MP3, WAV, FLAC, OGG, M4A, MP4, WebM) ขนาดสูงสุด 100MB
model string ไม่มี โมเดล STT: whisper (ปริยาย), faster-whisper, sensevoice
language string ไม่มี รหัสภาษา. auto สำหรับตรวจจับอัตโนมัติ (ปริยาย)
timestamps boolean ไม่มี รวมสแตมป์เวลาระดับคำ ค่าปริยาย: false
diarize boolean ไม่มี เปิดใช้งานการจัดเรียงข้อมูลของตัวเล่าเรื่อง ค่าปริยาย: false

การตอบสนอง

การตอบสนอง JSON
{
  "text": "Hello, this is a transcription test.",
  "language": "en",
  "duration": 3.5,
  "segments": [
    {
      "start": 0.0,
      "end": 1.8,
      "text": "Hello, this is",
      "speaker": "SPEAKER_00"
    },
    {
      "start": 1.8,
      "end": 3.5,
      "text": "a transcription test.",
      "speaker": "SPEAKER_00"
    }
  ]
}

การคัดลอกเสียง

POST /v1/tts/clone/

สร้างเสียงพูดในโคลนเสียง อัพโหลดเสียงและข้อความอ้างอิง

ตำแหน่งของคำร้อง (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
reference_audio file ใช่ เสียงอ้างอิง (แนะนำ 10- 30 วินาที) ขนาดสูงสุด 20 เมกะไบต์
text string ใช่ ข้อความที่จะพูดในเสียงที่ถูกโคลน
model string ไม่มี โมเดลคลอน: chatterbox (ปริยาย), cosyvoice2, gpt-sovits
format string ไม่มี รูปแบบผลลัพธ์: mp3 (ปริยาย), wav, flac
language string ไม่มี โค้ดภาษาเป้าหมาย ที่ต้องรองรับโดยโมเดลที่เลือกไว้

การตอบสนอง

คืนข้อมูลเสียงเป็นข้อมูลแบบบินารี่ เหมือนกับจุดจบของ TTS

ตัวเปลี่ยนเสียงName

POST /v1/voice-convert/

แปลงเสียงให้เป็นเสียงที่แตกต่างกัน โหลดเสียงต้นฉบับและเลือกเสียงเป้าหมาย

ตำแหน่งของคำร้อง (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
file file ใช่ แฟ้มเสียงต้นฉบับ (MP3, WAV, FLAC) ขนาดสูงสุด 50 เมกะไบต์
target_voice string ใช่ หมายเลขเสียงเป้าหมายที่จะแปลงเป็น (ใช้ /v1/voices/ เพื่อแสดงรายการเสียงที่ใช้ได้)
model string ไม่มี โมเดลการแปลงเสียง: openvoice (ปริยาย), knn-vc
format string ไม่มี รูปแบบการส่งออก: wav (ปริยาย), mp3, flac

คำขอตัวอย่าง

cURL
curl -X POST https://api.tts.ai/v1/voice-convert/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@source_audio.mp3" \
  -F "target_voice=af_bella" \
  -F "model=openvoice" \
  -o converted.wav

การตอบสนอง

คืนค่าแฟ้มเสียงที่แปลงเป็นข้อมูลแบบบินารี่

การแปลภาษาComment

POST /v1/speech-translate/

แปลเสียงที่พูดออกมาจากภาษาหนึ่งไปยังอีกภาษาหนึ่ง ใช้การรวมการพูดเข้ากับข้อความ การแปล และข้อความเข้ากับการพูดในโทรศัพท์ครั้งเดียว

ตำแหน่งของคำร้อง (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
file file ใช่ แฟ้มเสียงต้นฉบับในภาษาต้นฉบับ ขนาดสูงสุด 100 เมกะไบต์
target_language string ใช่ รหัสภาษาเป้าหมาย (เช่น es, fr, de, ja)
voice string ไม่มี เสียงสำหรับแปลผลลัพธ์ หากละเลยจะถูกเลือกอัตโนมัติ
preserve_voice boolean ไม่มี พยายามรักษาลักษณะเสียงของผู้พูดเดิมไว้ ค่าปริยาย: false

การตอบสนอง

การตอบสนอง JSON
{
  "original_text": "Hello, how are you?",
  "translated_text": "Hola, como estas?",
  "source_language": "en",
  "target_language": "es",
  "audio_url": "https://api.tts.ai/v1/results/translate_abc123.mp3",
  "credits_used": 5
}

พูดเป็นเสียงName

POST /v1/speech-to-speech/

เปลี่ยนสไตล์การพูด อารมณ์ หรือการนำเสนอโดยไม่เปลี่ยนเนื้อหา เหมาะสำหรับปรับแต่งระดับเสียง ความเร็ว และความแสดงออก

ตำแหน่งของคำร้อง (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
file file ใช่ แฟ้มเสียงคำพูดต้นฉบับ ขนาดสูงสุด 50MB
voice string ใช่ หมายเลขเสียงเป้าหมายสำหรับเสียงที่ออกมา
model string ไม่มี โมเดล: openvoice (ปริยาย), chatterbox
emotion string ไม่มี อารมณ์เป้าหมาย: กลาง, มีความสุข, เศร้า, โกรธ, ตื่นเต้น
speed float ไม่มี ปรับความเร็ว ค่าปริยาย: 1.0 ช่วง: 0.5 ถึง 2.0

การตอบสนอง

คืนค่าแฟ้มเสียงที่ถูกแปลงเป็นข้อมูลแบบบินารี่

เครื่องมือเสียงName

จุดสิ้นสุดของการประมวลผลเสียงเพื่อเพิ่มประสิทธิภาพ ลบเสียงร้อง แบ่งสเตม และอื่นๆ

POST /v1/audio/enhance/

เพิ่มคุณภาพเสียง ลดเสียงรบกวน เพิ่มความชัดเจน ความละเอียดสูง

file fileแฟ้มเสียงที่จะปรับปรุง
denoise booleanเปิดใช้การลบสัญญาณรบกวน (ค่าปริยาย: true)
enhance_clarity booleanเพิ่มความชัดเจนในการพูด (ค่าปริยาย: true)
super_resolution booleanปรับระดับคุณภาพเสียง (ค่าปริยาย: false)
strength integer1-3(เบา, กลาง, แรง) ค่าปริยาย: 2
POST /v1/audio/separate/

แยกเสียงร้องออกจากเสียงเครื่องดนตรี (ลบเสียงร้อง) หรือแยกเป็นส่วนต่างๆ

file fileแฟ้มเสียงที่จะแยกออก
model stringdemucs (ค่าปริยาย) หรือ spleeter
stems integerจำนวนของต้นไม้: 2, 4,5หรือ6(ปริยาย: 2)
format stringรูปแบบผลลัพธ์: wav, mp3, flac
POST /v1/audio/dereverb/

ลบเสียงสะท้อนและเสียงสะท้อนจากการบันทึกเสียง

file fileแฟ้มเสียงที่จะประมวลผล
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ ว่าง

วิเคราะห์เสียงเพื่อตรวจจับกีตาร์, BPM และสัญลักษณ์เวลา

file fileแฟ้มเสียงที่จะวิเคราะห์
การตอบสนอง
{
  "key": "C",
  "scale": "Major",
  "bpm": 120.0,
  "time_signature": "4/4",
  "camelot": "8B",
  "compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
POST /v1/audio/convert/ ว่าง

เปลี่ยนรูปแบบเสียงระหว่างรูปแบบต่างๆ

file fileแฟ้มเสียงที่จะแปลง
format stringรูปแบบเป้าหมาย: mp3, wav, flac, ogg, m4a, aac
bitrate integerอัตราส่งออกแบบบิตต่อวินาที หน่วยเป็น kbps: 64, 128, 192, 256, 320
sample_rate integerอัตราตัวอย่าง: 22050, 44100, 48000
channels stringmono หรือ stereo

การสนทนาด้วยเสียงName

POST /v1/voice-chat/

ส่งเสียงหรือข้อความ และรับคำตอบจาก AI ด้วยการสังเคราะห์เสียง

ตำแหน่งของคำร้อง (multipart/form-data หรือ JSON)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
audio file ไม่มี* ข้อมูลนำเข้าเสียง (ต้องการ audio หรือ text)
text string ไม่มี* ข้อความเข้า (ต้องการ audio หรือ text)
voice string ไม่มี เสียงสำหรับคำตอบของ AI ค่าปริยาย: af_bella
tts_model string ไม่มี โมเดล TTS สำหรับคำตอบ ค่าปริยาย: kokoro
system_prompt string ไม่มี ตั้งค่าระบบแจ้งเตือนสำหรับ AIName
conversation_id string ไม่มี ทำต่อไปกับการสนทนาที่มีอยู่

การตอบสนอง

การตอบสนอง JSON
{
  "conversation_id": "conv_abc123",
  "user_text": "What is the capital of France?",
  "ai_text": "The capital of France is Paris.",
  "audio_url": "https://api.tts.ai/v1/audio/tmp/resp_xyz.mp3",
  "credits_used": 3
}

คำสั่ง TTS แบบบั๊ก

POST /v1/tts/batch/

ส่งข้อความหลายข้อเพื่อสร้าง TTS แบบคู่กัน หากต้องการ สามารถรับการเรียกกลับของ webhook เมื่องานทั้งหมดเสร็จสมบูรณ์แล้ว

พารามิเตอร์

พารามิเตอร์ประเภทคำอธิบาย
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringที่อยู่ URL ที่จะส่งผลลัพธ์เมื่อการทำงานกลุ่มเสร็จสมบูรณ์

การตอบสนอง

การตอบสนอง JSON
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

ความคืบหน้าการสำรวจด้วย GET /v1/tts/batch/result/?batch_id=abc123

ฝังเสียง

POST /v1/voice-embed/

คำนวณก่อนการฝังเสียงจากข้อมูลเสียงที่อ้างถึง ใช้ embed_ id ที่คืนมาในคำขอคลอนเสียงภายหลังเพื่อสร้างเสียงได้ทันที

พารามิเตอร์

พารามิเตอร์ประเภทคำอธิบาย
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

การตอบสนอง

การตอบสนอง JSON
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

ตรวจสอบสภาพ

GET /v1/health/

ตรวจสอบสถานะของเซิร์ฟเวอร์ GPU, โมเดลที่โหลดแล้ว และขนาดของคิว ไม่จำเป็นต้องตรวจสอบสิทธิ์ เก็บไว้ในแคชเป็นเวลา 30 วินาที

การตอบสนอง

การตอบสนอง JSON
{
  "status": "online",
  "latency_ms": 45,
  "queue_size": 3,
  "models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}

รายการโมเดล

GET /v1/models/

แสดงรายการของโมเดลที่ใช้ได้ทั้งหมดพร้อมกับความสามารถของมัน

การตอบสนอง

การตอบสนอง JSON
{
  "models": [
    {
      "id": "kokoro",
      "name": "Kokoro",
      "type": "tts",
      "tier": "standard",
      "languages": ["en", "ja", "ko", "zh", "fr"],
      "supports_cloning": false,
      "supports_streaming": true,
      "credits_per_1k_chars": 2
    },
    {
      "id": "chatterbox",
      "name": "Chatterbox",
      "type": "tts",
      "tier": "premium",
      "languages": ["en"],
      "supports_cloning": true,
      "supports_streaming": true,
      "credits_per_1k_chars": 4
    }
  ]
}

รายการเสียง

GET /v1/voices/

แสดงรายการเสียงที่ใช้ได้ทั้งหมด โดยสามารถกรองตามรุ่นหรือภาษาได้

พารามิเตอร์ของคำถาม

พารามิเตอร์ประเภทคำอธิบาย
model string ตัวกรองตามหมายเลขโมเดล (เช่น kokoro)
language string ตัวกรองโดยใช้รหัสภาษา (เช่น en)
gender string ตัวกรองตามเพศ: ผู้ชาย, หญิง, กลาง

การตอบสนอง

การตอบสนอง JSON
{
  "voices": [
    {
      "id": "af_bella",
      "name": "Bella",
      "model": "kokoro",
      "language": "en",
      "gender": "female",
      "preview_url": "https://api.tts.ai/v1/voices/preview/af_bella.mp3"
    }
  ],
  "total": 142
}

ชื่อเสียง ใหม่

GET /v1/speech/subtitles/?uuid=<job_uuid>&format=srt|vtt&download=1

สร้างคำอธิบายฉบับย่อที่ทำซ้ำกันสำหรับงาน TTS ที่เสร็จสมบูรณ์ ใช้การปรับแต่ง Whisper บนเสียง และส่งผลลัพธ์เป็น SRT หรือ WebVTT ผลลัพธ์จะถูกเก็บไว้ในแคชบนดิสก์ ดังนั้น การเรียกใช้ครั้งที่สองสำหรับ uuid เดียวกัน จะเป็นการอ่านจากดิสก์

พารามิเตอร์ของคำถาม

พารามิเตอร์จำเป็นคำอธิบาย
uuidใช่หมายเลข UUID ของงานที่คืนมาจาก /v1/tts/ หรือ /v1/voice-clone/
formatไม่มีsrt (ปริยาย) หรือ vtt
downloadไม่มี1 เพื่อส่ง Content-Disposition: attachment เพื่อให้เบราว์เซอร์บันทึกแทนที่จะแสดง
languageไม่มีข้อแนะนำเกี่ยวกับโมเดลการจัดเรียง (จะตรวจสอบอัตโนมัติหากละเลย)
cURL
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt

คำอธิบายการออกเสียงName ใหม่

GET POST DELETE /api/v1/pronunciations/

บอกกลไก TTS ว่าต้องออกเสียงคำเฉพาะอย่างไร รายการที่บันทึกไว้จะถูกใช้อัตโนมัติกับคำร้องขอ TTS ทุกครั้งที่คุณทำขึ้น จำกัดจำนวนรายการต่อบัญชี 200 รายการ

ตำแหน่งของคำร้อง (POST)

พารามิเตอร์ประเภทคำอธิบาย
wordstringคำที่จะใช้แทนที่ (เช่น GIF, Anthropic) คำที่ตรงกับขอบเขตคำ
replacementstringวิธีการสะกดคำสำหรับโมเดล (เช่น jiff, ann THROP ick)
languagestringตัวเลือกรหัส ISO หากว่าง = ใช้กับภาษาทั้งหมด
case_sensitivebooleanค่าปริยาย false ใช้ตัวอักษรตัวเล็กและตัวใหญ่ตรงกัน เมื่อ true
cURL
# Save an entry
curl -X POST https://tts.ai/api/v1/pronunciations/ \
  -H "Authorization: Bearer sk-tts-..." \
  -H "Content-Type: application/json" \
  -d '{"word": "GIF", "replacement": "jiff"}'

# List your entries
curl https://tts.ai/api/v1/pronunciations/ -H "Authorization: Bearer sk-tts-..."

# Delete entry by id
curl -X DELETE "https://tts.ai/api/v1/pronunciations/?id=42" -H "Authorization: Bearer sk-tts-..."

คุณยังสามารถส่งการเปลี่ยนแปลงตามคำร้องขอโดยไม่ต้องบันทึกมันได้อีกด้วย - ประกอบด้วย pronunciations บนการเรียก /v1/tts/ ใด ๆ เช่น ตัวอย่างหรือแถบ (ดูที่ พารามิเตอร์จุดจบของ TTS)

ตัวบอกเล่าบทความ ใหม่

ทิ้งแท็ก < code>< script ลงบนหน้าบทความใด ๆ และผู้เข้าชมจะได้รับแถบผู้อ่านที่กำหนดเองซึ่งจะบอกเล่าเรื่องที่เกิดขึ้นบนหน้าเมื่อคลิกที่มัน ตรวจจับเนื้อหาบทความอัตโนมัติ สนับสนุนเสียง/ โมเดล/ ตำแหน่ง/ สีที่เน้น

HTML
<script src="https://tts.ai/narrator.js"
    data-pk="pk-tts-your-publishable-key"
    data-voice="af_bella"
    data-model="kokoro"
    data-extract="auto"
    data-position="bottom"
    data-color="#e60000"
    data-locale="en"></script>

ตัวเลือก

พารามิเตอร์คำอธิบาย
data-pkกุญแจที่สามารถเผยแพร่ได้ (pk-tts-...). การจำกัดโดเมนจะถูกบังคับใช้ผ่านช่อง allowed_domains ของกุญแจ
data-voiceหมายเลขเสียง ค่าปริยาย af_bella
data-modelหมายเลขโมเดล TTS ค่าปริยาย kokoro
data-extractauto (ปริยาย) — ลองใช้ตัวเลือก article/ main/. post- content/. entry- content, กลับไปใช้กลุ่มย่อหน้าที่หนาแน่นที่สุด หรือส่งตัวเลือก CSS ใด ๆ ไปยังเอเลี่ยนที่กำหนดไว้
data-positionbottom (ปริยาย) หรือ top
data-colorสีที่ใช้เน้น (สี CSS ใดๆ) ค่าปริยาย #e60000
data-min-chars / data-max-charsข้ามบาร์ หากบทความมีจำนวนอักขระน้อยกว่าจำนวนอักขระขั้นต่ำ (ค่าปริยาย 200) ปิดการเข้ารหัสที่จำนวนอักขระสูงสุด (ค่าปริยาย 50, 000)

ต้นฉบับบน GitHub:

วิดเจ็ตปุ่มฟัง

แบบปุ่มฝังในบรรทัด แสดงผลอยู่ด้านข้างแท็ก < code>< script และเล่นสแนปสักระยะที่ถูกกระตุ้นด้วยปุ่ม รูปร่างแตกต่างจากตัวบอกเล่าบทความด้านบน (ซึ่งจะแทรกแถบที่กว้างกว่าหน้าเว็บและบอกเล่าบทความทั้งหมด)

HTML
<script src="https://tts.ai/widget.js"
    data-voice="af_bella"
    data-model="kokoro"
    data-style="full"
    data-theme="light"></script>

เสียงที่บันทึกไว้ (โคลนที่ยั่งยืน)

โหลดข้อมูลเสียงที่อ้างถึงครั้งเดียว, เรียกคืน voice_id ที่คงอยู่, จากนั้นอ้างถึง id นั้นในคำขอ TTS แทนที่จะอัพโหลดเสียงใหม่ทุกครั้งที่โทร เหมาะสำหรับการรวมเสียงที่มีปริมาณสูง

ค่า: พื้นที่เก็บข้อมูลฟรี (ไม่มีค่าเช่าวันละ 1 ครั้ง, ไม่มีขีดจำกัดช่องว่าง) ค่าอัพโหลด: 500 ตัวอักษรต่อเสียง ค่าใช้จ่ายต่อการใช้งาน: +50 ตัวอักษรที่เพิ่มเข้าไปในแต่ละการสร้าง TTS ที่อ้างถึงเสียงที่บันทึกไว้, นอกเหนือจากค่าการสร้างปกติ จัดเก็บเสียงที่คุณไม่จำเป็นในขณะนี้ไว้ในแฟ้มเพื่อเก็บไว้ในสภาพพักฟื้น; เรียกใช้งานใหม่เมื่อใดก็ได้ ทั้งสองอย่างเป็นการเรียกใช้ API ฟรี

โหลดเสียง

POST https://tts.ai/api/v1/user-voices/ ต้องการการตรวจสอบสิทธิ์

แบบฟอร์มหลายส่วน ช่อง: แฟ้ม (จำเป็น, 5-30s เสียง), ชื่อ (จำเป็น), ภาษา (เลือกได้, ปริยาย en), โมเดล (เลือกได้ — เลือก cosyvoice2 สำหรับ zh/ ja/ ko ถ้าไม่ openvoice), consent_confirmed (จำเป็น, ค่า true ใดๆก็ได้)

curl -X POST https://tts.ai/api/v1/user-voices/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@reference.wav" \
  -F "name=My Narrator" \
  -F "language=en" \
  -F "consent_confirmed=true"

# Response:
{
  "public_id": "uv_a1b2c3d4e5f6",
  "id": 42,
  "name": "My Narrator",
  "model_name": "openvoice",
  "language": "en",
  "reference_audio_url": "https://tts.ai/media/user-voices/....wav",
  "storage_status": "active",
  "created_at": "2026-04-17T03:45:00+00:00"
}

ใช้เสียงที่บันทึกไว้ใน TTS

POST ไปที่ /api/v1/tts/ (ข้อควรระวัง: เวบ VPS ไม่ใช่ api.tts.ai) ด้วย user_voice_id เราจะโหลดเสียงที่เก็บไว้ และนำไปสู่การคลาวด์

curl -X POST https://tts.ai/api/v1/tts/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello from my saved voice","user_voice_id":"uv_a1b2c3d4e5f6"}'

# Returns a queued job — poll /v1/speech/results/?uuid=... for the audio URL.

รายการ / ลบ

GET    https://tts.ai/api/v1/user-voices/           # list your saved voices + quota info
DELETE https://tts.ai/api/v1/user-voices/?public_id=uv_a1b2c3d4e5f6

แฟ้มสำรองข้อมูล / เรียกใช้ใหม่ (ฟรี)

เสียงที่เก็บไว้ในแฟ้มสำรองข้อมูลจะยังคงอยู่ในบัญชีของคุณ แต่จะไม่สามารถใช้ใน TTS ได้ เหมาะสำหรับผู้ใช้ที่ไม่ได้ใช้งาน ดังนั้น รายการของคุณจะยังคงสะอาด

POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/

ตัวอย่างโค้ด

ข้อความเป็นเสียงName

คำขอไพธอนStencils
import requests

API_KEY = "sk-tts-your-key"

# Text to Speech
response = requests.post(
    "https://api.tts.ai/v1/tts/",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "model": "kokoro",
        "text": "Hello from TTS.ai!",
        "voice": "af_bella",
        "format": "mp3"
    }
)

with open("output.mp3", "wb") as f:
    f.write(response.content)

print(f"Credits used: {response.headers.get('X-Credits-Used')}")

คำพูดเป็นข้อความName

คำขอไพธอนStencils
# Speech to Text
with open("recording.mp3", "rb") as f:
    response = requests.post(
        "https://api.tts.ai/v1/stt/",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"file": f},
        data={"model": "faster-whisper", "timestamps": "true"}
    )

result = response.json()
print(result["text"])

การคัดลอกเสียง

คำขอไพธอนStencils
# Voice Cloning
with open("reference.wav", "rb") as ref:
    response = requests.post(
        "https://api.tts.ai/v1/tts/clone/",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"reference_audio": ref},
        data={
            "text": "This speech uses a cloned voice.",
            "model": "chatterbox"
        }
    )

with open("cloned_output.mp3", "wb") as f:
    f.write(response.content)

ข้อความเป็นเสียงName

เรียกจาวาสคริปต์
const API_KEY = 'sk-tts-your-key';

// Text to Speech
const response = await fetch('https://api.tts.ai/v1/tts/', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'kokoro',
    text: 'Hello from TTS.ai!',
    voice: 'af_bella',
    format: 'mp3'
  })
});

const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();

คำพูดเป็นข้อความName

เรียกจาวาสคริปต์
// Speech to Text
const formData = new FormData();
formData.append('file', audioFile);
formData.append('model', 'faster-whisper');

const response = await fetch('https://api.tts.ai/v1/stt/', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${API_KEY}` },
  body: formData
});

const result = await response.json();
console.log(result.text);

ข้อความเป็นเสียงName

cURL
# Text to Speech
curl -X POST https://api.tts.ai/v1/tts/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"kokoro","text":"Hello!","voice":"af_bella","format":"mp3"}' \
  -o output.mp3

คำพูดเป็นข้อความName

cURL
# Speech to Text
curl -X POST https://api.tts.ai/v1/stt/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@recording.mp3" \
  -F "model=faster-whisper" \
  -F "timestamps=true"

การคัดลอกเสียง

cURL
# Voice Cloning
curl -X POST https://api.tts.ai/v1/tts/clone/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "reference_audio=@reference.wav" \
  -F "text=This uses a cloned voice." \
  -F "model=chatterbox" \
  -o cloned.mp3

เพิ่มประสิทธิภาพเสียง

cURL
# Audio Enhancement
curl -X POST https://api.tts.ai/v1/audio/enhance/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@noisy_audio.mp3" \
  -F "denoise=true" \
  -F "enhance_clarity=true" \
  -o enhanced.mp3

รหัสข้อผิดพลาด

ข้อผิดพลาดทั้งหมดจะส่งผลลัพธ์เป็น JSON ด้วย error สนาม

รูปแบบการตอบสนองข้อผิดพลาด
{
  "error": {
    "code": "insufficient_credits",
    "message": "You do not have enough characters for this request.",
    "characters_required": 4000,
    "characters_available": 2000
  }
}
สถานะ HTTPหมายเลขข้อผิดพลาดคำอธิบาย
400 bad_request พารามิเตอร์ที่ร้องขอไม่ถูกต้อง โปรดตรวจสอบข้อความข้อผิดพลาดเพื่อดูรายละเอียด
401 unauthorized กุญแจ API หายไปหรือไม่ถูกต้อง
402 insufficient_credits ตัวอักษรไม่เพียงพอ โปรดซื้อเพิ่มที่ / pricing /
403 forbidden คุณไม่มีสิทธิ์ในการเข้าถึงทรัพยากรนี้ (เช่น ถามงานของผู้ใช้อื่น) การเข้าถึง API นั้นมีให้ในทุกแพ็คเกจ
404 not_found ไม่พบตัวอย่างหรือเสียง
413 file_too_large แฟ้มที่อัพโหลดไปเกินขนาดที่กำหนด
429 rate_limited คำขอมากเกินไป ตรวจสอบหัวข้อจำกัดอัตรา
500 internal_error เซิร์ฟเวอร์ผิดพลาด ลองใหม่ทีหลัง
503 model_loading กำลังโหลดโมเดล ลองใหม่อีกครั้งในอีกไม่กี่วินาที

เวบฮูก

สำหรับทาสก์ที่ใช้เวลาทำงานนาน (การแยกสายพันธุ์, TTS แบบแบต), คุณสามารถให้พารามิเตอร์ webhook_url เมื่อทาสก์เสร็จสมบูรณ์ เราจะส่งผลลัพธ์ไปยังที่อยู่ URL ของคุณ

ค่าใช้จ่ายของ Webhook
{
  "event": "task.completed",
  "task_id": "task_abc123",
  "status": "success",
  "result_url": "https://api.tts.ai/v1/results/task_abc123",
  "credits_used": 12,
  "created_at": "2025-01-15T10:30:00Z",
  "completed_at": "2025-01-15T10:30:45Z"
}
ผลการทำงานของเวบฮุคจะสามารถดาวน์โหลดได้ภายใน 24 ชั่วโมงหลังจากเสร็จสิ้นการทำงาน โปรดตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลดมันแล้ว

พร้อมที่จะสร้างหรือยัง?

รับกุญแจ API และเริ่มรวม TTS.ai เข้ากับแอปพลิเคชันของคุณ