ZenMic API Documentation
Transform text into natural-sounding audio with our simple, powerful REST API. Generate scripts, synthesize speech, and manage podcasts.
Introduction
The API is the latest version of the ZenMic API. It's a streamlined, unified API that powers both the Studio frontend and external integrations. Every endpoint uses Bearer token authentication with a single /api/ base path.
https://zenmic.com/api/All responses are JSON. Success:
{"success":true,"data":{...}}. Errors include an "error" field.
Authentication
Include your API key in the Authorization header. Find your API key in the sidebar under Get Your API Key.
Authorization: Bearer YOUR_API_KEY
POST Generate Script
Convert a topic, uploaded files, or both into a structured podcast script with scene, speaker profiles, and dialogue.
/api/scriptRequest Body
{
"topic": "The future of AI in healthcare, 3 minutes, in English",
"project_name": "Default Project",
"files": [
{
"name": "report.pdf",
"mimeType": "application/pdf",
"data": "base64_encoded_content..."
}
]
}
{
"success": true,
"data": {
"title": "AI in Healthcare",
"transcript": "s1: Welcome to the project...\n\ns2: Thanks for having me...",
"scene": "A bright modern studio...",
"notes": "Style:\n* Warm, intimate pacing\n* Natural pauses",
"voice1": "Charon",
"voice2": "Zephyr",
"full_script": "## \"AI in Healthcare\"\n\n..."
}
}
POST Generate Audio
Convert a dialogue script into high-fidelity TTS audio. Returns a 202 with a polling URL. Audio is generated asynchronously in the background.
/api/audioRequest Body
{
"script": "s1: Welcome to the project...\n\ns2: Thanks for having me, let's dive in...",
"voice1": "Charon",
"voice2": "Zephyr",
"title": "AI in Healthcare",
"scene": "A bright modern studio",
"director_notes": "Warm, conversational pacing"
}
{
"success": true,
"data": {
"id": "a1b2",
"status": "queued",
"poll_url": "/api/status?id=a1b2"
}
}
GET Poll Status
Poll the status of an audio generation job. No authentication required (audio IDs are public).
/api/status?id=AUDIO_ID{
"success": true,
"data": {
"id": "a1b2",
"status": "succeeded",
"title": "AI in Healthcare",
"duration": 187,
"created_at": "2026-06-06 12:00:00",
"audio_url": "https://zenmic.com/audio/a1b2"
}
}
POST Generate Idea
Get a random podcast audio idea based on your project's context and past audios.
/api/ideasRequest Body
{
"project_name": "Tech Talks"
}
{
"success": true,
"data": {
"idea": "In English language, 3 minutes long, discussion about how AI is transforming medical diagnosis."
}
}
POST Audios (Manage)
List, delete, retry, or toggle publish status for audios. Requires authentication.
/api/audiosList audios
GET /api/audios?project_id=My%20Podcast
Authorization: Bearer YOUR_API_KEY
Delete audio
POST /api/audios
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{"action": "delete", "audio_id": "a1b2"}
Retry failed audio
POST /api/audios
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{"action": "retry", "audio_id": "a1b2"}
Toggle publish
POST /api/audios
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{"action": "toggle_publish", "audio_id": "a1b2"}
You can also fetch full audio details (including transcript) via GET:
GET /api/audios?id=a1b2
Authorization: Bearer YOUR_API_KEY
POST Projects (Manage)
Create, switch, or update podcast projects. Requires authentication.
/api/projectsCreate project
POST /api/projects
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{"action": "create", "name": "My New Project"}
List projects
GET /api/projects
Authorization: Bearer YOUR_API_KEY
POST Login
Used by the frontend for Google and email magic link sign-in. This endpoint is not intended for external API use. It creates a PHP session and returns the user's API key for subsequent Bearer auth.
/api/login