Skip to content
PodData
In pilot Developers

Quotes with their speaker and second, by API

A REST API, webhooks and an MCP endpoint that return quotes, never transcripts: the exact words, who said them, the show, the date and the second, with a page to cite. All three are in pilot. Keys come with it.

The REST API In pilot

One address, JSON, a key

The addresses below aren’t open yet. They’re what pilot teams get with a key.

  • Base address https://api.poddata.ai/v1
  • Send your key as Authorization: Bearer pd_live_…. A key belongs to a team and is shown once.
  • JSON only. Times are ISO 8601 in UTC, and seconds are numbers.
  • Lists page with a cursor: ?limit= (20 unless you say, at most 100) and ?cursor=. A since cursor returns only what’s new, for polling.
  • Errors are { "error": { "code", "message" } } with the matching status.
curl "https://api.poddata.ai/v1/quotes?q=memory+prices&person=sam-altman" \
  -H "Authorization: Bearer pd_live_…"

A quote, as the API returns it

{
  "data": [
    {
      "id": "q_example",
      "text": "until right now, I don’t think making memory has ever been a great business over a long period of time.",
      "speaker": {
        "id": "p_example",
        "name": "Sam Altman",
        "role": "Co-founder & CEO, OpenAI",
        "status": "confirmed"
      },
      "show": {
        "id": "s_example",
        "name": "Cheeky Pint"
      },
      "episode": {
        "id": "e_example",
        "title": "Why Sam Altman is against a single superintelligence",
        "date": "2026-10-29"
      },
      "starts_at": 1676,
      "ends_at": 1682,
      "clock": "video",
      "url": "https://poddata.ai/q/q_example",
      "source_url": "https://www.youtube.com/watch?v=iMsUcCYNKqY&t=1676s",
      "cite": "Sam Altman, Co-founder & CEO, OpenAI. Cheeky Pint, Oct 29, 2026, at 27:56. https://poddata.ai/q/q_example",
      "corrected": null
    }
  ],
  "next": null
}

A real quote, in the shape the API returns. The ids, the address on poddata.ai and the end second are made up for the example.

The routes

RouteWhat it does
GET /quotesQuotes, newest first. Filter by meaning (q), person, company, show, from, to, confirmed (true unless you say otherwise) and since
GET /quotes/{id}One quote
GET /peopleThe people we follow. Filter by q, kind and company
GET /people/{id}One person, with their latest quotes
GET /showsThe shows we follow, each with its latest episode’s date
GET /coverageCounts and freshness: sources, episodes indexed in the last 7 and 30 days, the median time from feed to index
GET /trackersYour team’s trackers
POST /trackersMake a tracker from a sentence, with its name and how it’s delivered
POST /trackers/previewWhat a sentence would have caught in the last 90 days. Saves nothing
PATCH /trackers/{id}Change a tracker’s name, sentence, status, delivery or recipients
DELETE /trackers/{id}Delete a tracker. Its matches stay readable for 30 days
GET /trackers/{id}/matchesA tracker’s matches, newest first, each with its quote. Takes since
POST /matches/{id}/feedbackSay a match was right ("good") or wrong ("not_this")
GET, POST, DELETE /webhooksList, register or remove your webhooks. The secret is shown once
POST /webhooks/{id}/testSend a ping
GET /usageYour team’s counts by day and kind
Rules and limits

Quotes, never transcripts

80 words at most

Nothing returns more than 80 words in a row from an episode, and one key gets at most 20 quotes from one episode a day.

120 requests a minute

For each key, and 60 tracker previews a day for each team. Past a limit, you get 429 with Retry-After.

Confirmed speakers first

Quotes whose speaker is unconfirmed are left out unless you ask for them with confirmed=false.

Webhooks In pilot

Each new quote, posted to you

Register an address and get a secret, shown once. Each event is a POST with a JSON body.

  • Events: match.created, quote.corrected and ping.
  • Signature: X-PodData-Signature: t=…,v1=…, where v1 is the HMAC-SHA256 of t.body with your secret. Refuse a t older than five minutes.
  • Retries: anything but a 2xx within 10 seconds is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours, with the same event id.
  • Turned off after 20 failures in a row, and your team’s owner gets an email.
import { createHmac, timingSafeEqual } from 'node:crypto';

// header is X-PodData-Signature; body is the raw request body.
function verify(header, body, secret) {
  const { t, v1 = '' } = Object.fromEntries(header.split(',').map((p) => p.split('=')));
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const want = createHmac('sha256', secret).update(`${t}.${body}`).digest('hex');
  return want.length === v1.length && timingSafeEqual(Buffer.from(want), Buffer.from(v1));
}
The MCP endpoint In pilot

PodData inside your AI assistant

Streamable HTTP at https://api.poddata.ai/mcp, with the same key as the REST API. Each quote it returns carries its line to cite and its page.

ToolWhat it does
search_quotesSearch quotes by meaning, person, show and date
list_trackersYour team’s trackers
preview_trackerWhat a sentence would have caught
create_trackerMake a tracker from a sentence, after a preview
tracker_matchesA tracker’s latest matches
not_thisMark a match as wrong
{
  "mcpServers": {
    "poddata": {
      "type": "http",
      "url": "https://api.poddata.ai/mcp",
      "headers": { "Authorization": "Bearer pd_live_…" }
    }
  }
}

Get a key with the pilot.

Tell us what you’re building and who you need to hear. We’ll reply by email, and set you up with a key.

Request pilot access

Request pilot access

PodData is in pilot. Tell us who you need to hear and what about, and we’ll reply by email.

Nothing can be bought yet. Pick the plan you’d want.
One sentence is enough: a person, a topic, or both.

We keep what you send to answer it, as our privacy policy says. Or write to hello@poddata.ai.