AI Podcast
Multi-voice podcast generation — auto / manual / reuse-script modes
AI Podcast synthesizes a multi-role script into a multi-speaker conversation, with per-role voices, background music, subtitles, and single/multi-track output. Async task; poll for status after submitting.
Base URL:
https://api.aiclonevoicefree.com| Auth:Authorization: Bearer sk_...
POST /api/v2/voice/podcast
| Field | Type | Required | Notes |
|---|---|---|---|
mode | string | ✅ | auto (generate script from topic) / manual (bring your own segments) / from_db (reuse a script) |
topic | string | ⬜ | Topic for auto mode |
language | string | ⬜ | zh / en |
roles | object[] | ✅ | Role list (below) |
segments | object[] | ⬜ | Required in manual mode; per-line text + voice (below) |
reference_podcast_id | string | ⬜ | Script id reused in from_db mode |
background | object | ⬜ | Background music: intro_url / background_url / intro_volume / background_volume |
pause_ms | int | ⬜ | Pause between segments (ms) |
tts_model | string | ⬜ | TTS model, defaults to server config |
single_track | bool | ⬜ | Return per-role timeline-aligned tracks (handy for video editing) |
generate_subtitle | bool | ⬜ | Generate SRT subtitles |
roles[]: { name, voice_id, audio_url (reference), volume, model (optional per-role override) }
segments[]: { text, voice_id, audio_url, role, speed_ratio, pitch_ratio, volume_ratio, emotion_mode, emotion_vector, emotion_text, pause_ms_after }
Billing
By synthesized character count: CJK chars 2 credits each, others 1 credit each, settled on completion.
402at submit if insufficient.
Example (manual mode)
curl -X POST https://api.aiclonevoicefree.com/api/v2/voice/podcast \
-H "Authorization: Bearer sk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"mode": "manual",
"language": "en",
"roles": [
{ "name": "Host", "audio_url": "https://your-cdn.com/host.wav" },
{ "name": "Guest", "audio_url": "https://your-cdn.com/guest.wav" }
],
"segments": [
{ "role": "Host", "audio_url": "https://your-cdn.com/host.wav", "text": "Welcome to the show." },
{ "role": "Guest", "audio_url": "https://your-cdn.com/guest.wav", "text": "Glad to be here." }
],
"generate_subtitle": true
}'Response 202 → { "task_id": "...", "status": "pending", "capability": "voice", "action": "multi-segment" }
Getting the result
Poll GET /api/v2/tasks/{task_id}; audioUrl is the merged track and srtUrl the subtitle (if enabled). See also AI Dubbing.