A working podcast in three calls.
Upload sources, kick off generation, poll until the audio's ready. It's just HTTP.
# 1. Upload a source file (optional)
curl -X POST https://api.sparkpod.ai/v1/files \
-H "Authorization: Bearer sk_..." \
-F "file=@research.pdf"
# → { "id": "f_aB3...", ... }
# 2. Create the podcast
curl -X POST https://api.sparkpod.ai/v1/podcasts \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{
"userPrompt": "Summarize the key findings",
"mode": "deep-dive",
"urls": ["https://example.com/article"],
"files": [{ "id": "f_aB3..." }]
}'
# 3. Poll until step === "completed"
curl https://api.sparkpod.ai/v1/podcasts/p_xyz \
-H "Authorization: Bearer sk_..."Everything the dashboard does.
The v1 API exposes the same podcast pipeline that powers SparkPod. No private endpoints, no second-class features.
Any source, one endpoint
Pass URLs, file IDs, or plain prompts to /v1/podcasts. Same ingestion as the dashboard.
Three generation modes
quick-insight, deep-dive, or narrative-explainer — pick the format that fits the source.
Studio-quality voices
ElevenLabs and Speechify voices, host/guest pairing, inline emotion tags.
Ready-to-ship MP3s
Presigned download URLs with sensible filenames. Stream, embed, or push to your CDN.
Step-level retries
Every podcast tracks its step. Retry just the one that failed instead of starting over.
Single Bearer token
Generate or rotate from your dashboard. No OAuth, no signing — just one header.
Eight endpoints. That's it.
Tight, REST-y, no surprises. Full schemas live in the reference.
- POST
/v1/podcastsKick off podcast generation from URLs, files, or prompts. - GET
/v1/podcastsList your podcasts. Search, filter, paginate. - GET
/v1/podcasts/{id}Poll a podcast — read its step, audio URL, outline, script. - PUT
/v1/podcasts/{id}Update title, outline, script, voice, or visibility. - DELETE
/v1/podcasts/{id}Remove a podcast and its generated audio. - GET
/v1/podcasts/{id}/download-urlPresigned MP3 URL with Content-Disposition: attachment. - POST
/v1/podcasts/{id}/retryRe-run a failed step (outline, script, or audio). - POST
/v1/filesMultipart upload for PDFs, text, images. Returns a file ID.
What teams build with it.
The API is small on purpose so you can wrap it however you want.
Ship audio inside your app
Add "Listen to this article" to a blog, an audio briefing tab to a research tool, daily recaps to an internal dashboard.
Automate your pipeline
Cron-trigger a podcast every morning from yesterday's tickets, RSS feeds, or sales calls. Drop the MP3 into Slack when it's ready.
White-label podcast generation
Wrap the API behind your own UI. Modes and voices give end users a curated experience without rebuilding the audio stack.