The Podmenti API
Everything the site does, programmatically: search podcasts, list episodes, fetch transcripts as text, JSON, SRT or VTT, with segment and word-level timestamps, queue new episodes for transcription, and ask AI Search to find a topic, name or keyword in any episode. One key, one credit balance, shared with the website.
Authentication
Accounts need a verified email, there's no way to get a spendable key without proving
control of a real inbox. Start at POST /api/v1/register/start, click the link
it emails you (or hit POST /api/v1/register/confirm with the token from that
link if you'd rather stay in a terminal), then pass the returned key as a bearer token.
curl -X POST https://podmenti.com/api/v1/register/start \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
# check your email, then either click the link or:
curl -X POST https://podmenti.com/api/v1/register/confirm \
-H "Content-Type: application/json" \
-d '{"token": "<from the emailed link>"}'
# every call after that:
curl https://podmenti.com/api/v1/me \
-H "Authorization: Bearer pm_YOUR_KEY" Endpoints
POST /api/v1/register/start | {"email"}: emails a one-time verification link. Same address
twice re-sends your existing key instead of creating a duplicate account.
|
POST /api/v1/register/confirm | {"token"}: the token from the emailed link. Free, includes
24 credits on first confirmation.
|
GET /api/v1/me | Balance and everything you've unlocked. |
GET /api/v1/search?q= | Podcast search. Shows we index continuously are flagged indexed. |
GET /api/v1/shows/{feed_id}/episodes?max=100 |
Episodes with transcript_id and status: ready,
processing or none. Up to 1000, which covers a show's full
history except a handful of the most prolific, where PodcastIndex itself stops
tracking further back (response includes truncated: true when that's
the case).
|
GET /api/v1/transcripts/{transcript_id} |
The transcript, including the original audio_url (whatever host serves
it: Megaphone, Art19, Libsyn...). ?format=json (plain segments) and
?format=text are free.
?format=json×tamps=1&words=1, srt,
vtt and timestamped txt need an unlock.
|
POST /api/v1/unlock | {"transcript": "<id>"}: 3 credits, once per
transcript, then every format is yours forever.
|
POST /api/v1/requests |
Queue episodes for transcription. Free: 3 episodes, within 24 hours. With
"rush": true: 25 credits per episode, front of the queue,
typically within the hour, up to 25 at once. Episodes already transcribed, by anyone,
are never charged or re-queued: the response splits results into
already_transcribed (free, instant) and queued (what you're
actually paying rush for). Emails you when the queued ones are done.
|
POST /api/v1/ai-search/query | AI Search: search one transcribed episode for a topic, name or keyword. 8 credits (any paid plan, see pricing), returns verbatim quotes with timestamps. See below. |
Word-level timestamps
Our transcriber stores the start time of every single word, not just every subtitle line.
After unlocking, ?format=json×tamps=1&words=1 returns them:
{
"segments": [{
"start": 61.4, "end": 66.9,
"text": "And I'm Tim Houlihan. So we talk with researchers",
"words": [
{"w": "And", "s": 61.4}, {"w": "I'm", "s": 61.55},
{"w": "Tim", "s": 61.72}, {"w": "Houlihan.", "s": 61.94}, …
]
}, …]
} That powers karaoke-style highlighting, precise audio deep links, clip cutting and search that jumps to the exact second. SRT and VTT exports drop straight into video editors and players.
One honest caveat: shows using dynamic ad insertion re-splice their audio file over time, so
the copy at audio_url today can run a little longer or shorter than what these
timestamps were originally cut against, usually by a few seconds per ad break. We already
detect and correct for this drift on Bookmenti's own extracted book-mention quotes; the same
correction hasn't been extended to these raw transcript timestamps yet.
AI Search
Instead of downloading a transcript and searching it yourself, ask a question and get back
exactly where it's answered. This is the same kind of extraction that runs Bookmenti's
book-mention pipeline at scale, pointed at whatever you ask instead of a fixed "find books"
instruction: see how it works for a real example. Give
POST /api/v1/ai-search/query a transcript_id and a
topic ("mentions of Acme Corp", a person's name, a product, a claim you want
fact-checked), and it returns verbatim quotes with timestamps:
curl -s -X POST https://podmenti.com/api/v1/ai-search/query -H "$AUTH" \
-H "Content-Type: application/json" \
-d '{"transcript_id": "'$ID'", "topic": "mentions of Stripe"}'
{
"found": true,
"summary": "The host describes switching their billing to Stripe.",
"mentions": [{
"quote": "we moved our whole billing stack over to Stripe last quarter",
"context": "The host explains why they migrated payment providers.",
"timestamp_seconds": 842,
"listen_url": "https://podmenti.com/t/{transcript_id}#t=842"
}],
"credits": 77
}
The episode has to be transcribed first: queue it with POST /api/v1/requests
{"rush": true} if transcript_status isn't ready
yet, then query it. Each call is 8 credits, spent from a paid plan's monthly
allowance (the free tier covers unlocks and rush, not this), and only charges on a successful result: a
failed query is refunded automatically. Want this running continuously across a show, with a
webhook when something new turns up, instead of one call at a time? Write to
contact@podmenti.com, that's next.
A full example
# find the show
curl -s "https://podmenti.com/api/v1/search?q=huberman" -H "$AUTH"
# list episodes, grab a transcript_id with transcript_status "ready"
curl -s "https://podmenti.com/api/v1/shows/1365758/episodes" -H "$AUTH"
# read it free
curl -s "https://podmenti.com/api/v1/transcripts/$ID?format=text" -H "$AUTH"
# unlock once (3 credits), then take every format
curl -s -X POST https://podmenti.com/api/v1/unlock -H "$AUTH" \
-H "Content-Type: application/json" -d '{"transcript": "'$ID'"}'
curl -sO "https://podmenti.com/api/v1/transcripts/$ID?format=srt" -H "$AUTH" Pricing and limits
- Plans: 500/mo for $20/mo, 2000/mo for $60/mo, 10000/mo for $75/mo at /credits. Credits reset every billing cycle, no rollover.
- Unlock: 3 credits per transcript, permanent. Rush: 25 credits per episode. Both free-tier eligible.
- AI Search: 8 credits per query, any paid plan (not Free).
- Rate limit: 5,000 requests per key per day (X-RateLimit-Remaining header).
- Errors are JSON:
{"error": {"code", "message"}}. 402 means credits are needed.
Building something bigger, need higher limits, or want an MCP connector for your AI assistant? Write to contact@podmenti.com.