Hosted API โ Early Access
The hosted API is not yet publicly available. This page documents the API spec for the upcoming launch. Join the waitlist to get early access. In the meantime, you can self-host from the repo.
API Overview
The PodAnchor API turns any URL into a podcast episode and manages per-user RSS feeds. It's built for AI agents, developers, and teams that need reliable audio delivery without building infrastructure.
Authentication
Include your API key as a Bearer token in the Authorization header of every request.
Authorization: Bearer pa_live_xxxxxxxxxxxxxxxxxxxx
API keys start with pa_live_ for production and pa_test_ for sandbox. Get your key from the account dashboard once the API launches โ join the waitlist to be notified.
Quick Start
Create your first episode in under 60 seconds.
# Create an episode curl -X POST https://api.podanchor.com/v1/episodes \ -H "Authorization: Bearer pa_live_xxxx" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/article"}' # Response { "episode_id": "ep_7f3k9m2n", "status": "processing", "poll_url": "https://api.podanchor.com/v1/episodes/ep_7f3k9m2n" }
from podanchor import PodAnchor client = PodAnchor(api_key="pa_live_xxxx") # Create episode (async โ returns immediately) episode = client.episodes.create( url="https://example.com/great-article", webhook_url="https://yourdomain.com/webhook", ) print(episode.episode_id) # ep_7f3k9m2n print(episode.status) # processing # Or wait synchronously (polls every 5s, up to timeout) episode = client.episodes.wait("ep_7f3k9m2n", timeout=120) print(episode.audio_url) # https://cdn.podanchor.com/...
Create Episode
Convert a URL into a podcast episode. Episode creation is asynchronous โ the API returns immediately with a processing status. Use the poll_url or webhooks to get notified when done.
Request Body
{
"url": "https://example.com/article", // required
"feed_id": "feed_abc123", // optional
"title": "My Custom Episode Title", // optional
"voice": "nova", // optional: alloy|echo|fable|nova|onyx|shimmer
"quality": "hd", // optional: "standard" | "hd"
"webhook_url": "https://..." // optional
}
Response ยท 202 Accepted
{
"episode_id": "ep_7f3k9m2n",
"status": "processing",
"feed_id": "feed_abc123",
"created_at": "2026-02-22T10:00:00Z",
"estimated_ready_at": "2026-02-22T10:02:00Z",
"poll_url": "https://api.podanchor.com/v1/episodes/ep_7f3k9m2n"
}
Get Episode
Retrieve episode status and metadata. Poll this endpoint until status is ready or failed.
{
"episode_id": "ep_7f3k9m2n",
"status": "ready",
"title": "The Future of AI Agents",
"description": "A deep dive into how AI agents...",
"url": "https://example.com/article",
"audio_url": "https://cdn.podanchor.com/episodes/ep_7f3k9m2n.mp3",
"audio_duration_seconds": 312,
"audio_size_bytes": 4981760,
"feed_id": "feed_abc123",
"created_at": "2026-02-22T10:00:00Z",
"ready_at": "2026-02-22T10:01:47Z",
"voice": "nova",
"quality": "hd"
}
List Episodes
List episodes with optional filtering. Cursor-paginated.
Query params: feed_id=feed_abc123 # filter by feed limit=20 # default 20, max 100 cursor=ep_abc # pagination cursor
Delete Episode
Permanently delete an episode and its audio file. Returns 204 No Content. Irreversible.
Create Feed
Available on Agent/API and Team plans. Create isolated podcast feeds per user.
Request
{
"title": "Alice's Podcast",
"user_ref": "alice_001", // your internal user ID
"description": "...", // optional
"language": "en" // optional; default "en"
}
Response ยท 201
{
"feed_id": "feed_xyz789",
"rss_url": "https://feeds.podanchor.com/feed_xyz789.xml",
"title": "Alice's Podcast",
"user_ref": "alice_001",
"created_at": "2026-02-22T10:00:00Z",
"episode_count": 0
}
List Feeds
Delete Feed
Permanently delete a feed and all its episodes. Returns 204 No Content. Irreversible.
Account Info
Webhooks
Provide a webhook_url when creating an episode to receive a POST when it's ready. Useful for agents that want to proactively notify users.
{
"event": "episode.ready",
"episode_id": "ep_7f3k9m2n",
"feed_id": "feed_abc123",
"audio_url": "https://cdn.podanchor.com/episodes/ep_7f3k9m2n.mp3",
"title": "Article Title Here",
"duration_seconds": 312,
"timestamp": "2026-02-22T10:01:47Z"
}
# Verify signature (HMAC-SHA256)
X-PodAnchor-Signature: sha256=abc123...
MCP Server Coming soon
The PodAnchor MCP server is available in the open-source repo. The npm package shown below is not yet published โ the config below previews the planned install experience.
{
"mcpServers": {
"PodAnchor": {
"command": "npx",
"args": ["-y", "@podanchor/mcp-server"],
"env": {
"LINKTOPOD_API_KEY": "pa_live_xxxx"
}
}
}
}
Available MCP Tools
add_to_podcast
Primary
Convert a URL into a podcast episode and add it to your private RSS feed.
list_recent_episodes
Show your recently added podcast episodes.
get_feed_url
Get your private RSS feed URL for subscribing in a podcast app.
OpenClaw Skill Early access
PodAnchor is available as an OpenClaw skill for VanDamme instances. The SKILL.md is live in the repo today. Full hosted-API integration requires an API key (waitlist).
# Install the skill in your VanDamme config skills: - name: PodAnchor source: https://github.com/brocktaylor7/pod-anchor/blob/main/SKILL.md env: LINKTOPOD_API_KEY: "pa_live_xxxx"
The full SKILL.md document defines how VanDamme instances interact with the API, manage per-user feeds, handle errors, and respond to users. It's designed to require zero additional configuration from the agent beyond the API key.
Errors
All errors follow RFC 7807 (Problem Details for HTTP APIs).
{
"type": "https://api.podanchor.com/errors/quota_exceeded",
"title": "Monthly quota exceeded",
"status": 402,
"detail": "Your Personal plan allows 50 credits per month.",
"reset_date": "2026-03-01T00:00:00Z"
}
| Status | Meaning | Common Cause |
|---|---|---|
400 |
Bad Request | Invalid URL, malformed JSON |
401 |
Unauthorized | Missing or invalid API key |
402 |
Payment Required | Monthly quota exceeded |
403 |
Forbidden | Feature requires higher plan |
404 |
Not Found | Invalid episode_id or feed_id |
422 |
Unprocessable | Content too short, paywalled |
429 |
Rate Limited | Too many requests per minute |
500 |
Server Error | Internal error; retry with backoff |
Rate Limits
| Plan | Requests/minute | Concurrent episodes |
|---|---|---|
| Free | 5 | 1 |
| Personal | 20 | 2 |
| Agent/API | 60 | 10 |
| Team | 120 | 20 |
Rate limit info is returned in every response via X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.