Podsquick

Agent-first podcast generation

One tool call in. A two-host episode out.

Podsquick turns source material into a podcast episode two people would actually want to listen to — and returns a timestamped transcript, a citation manifest and show notes alongside the audio, so the agent that called it can quote, chapter or check the episode without ever playing it.

MCP server REST + OpenAPI llms.txt async jobs idempotency keys typed errors

The whole happy path

Pass sources. Everything else has a defensible default.

curl -X POST https://podsmith.pages.dev/api/podcasts \
  -H "authorization: Bearer $PODSQUICK_KEY" \
  -H "content-type: application/json" \
  -d '{"sources":[{"type":"url","url":"https://example.com/annual-report"}]}'

You get a job id straight back. Poll it — each poll also drives the pipeline — and when it says succeeded you have a 12-minute Deep Dive with two British-English hosts, a WebVTT transcript, and a manifest that maps every claim in the episode to the chunk of source text it came from.


Why it sounds like people

An editorial pass first

Before a word of dialogue is written, a planning pass decides what the episode is about, what order makes it comprehensible, and — crucially — the awkward questions a curious listener would interrupt with. Those become the questioning host's lines.

A disfluency engine

Backchannels, interruptions on an em dash, mid-sentence self-corrections, restarts. Tunable from clean to loose, clustered where the conversation gets animated rather than sprinkled evenly. This is the single biggest lever on whether audio sounds human.

Dialogue-native TTS

The conversation is rendered in one pass by a multi-speaker model, so turn-taking and overlap come from the audio model — not from stitching two separate voices together and hoping the timing lands.


Why you can trust the output

Source-bounded, and it says so

The hosts assert only what the sources support. Where the sources are silent on something obvious, the script says so out loud — "the report doesn't actually say" — and the turn is flagged in the transcript.

A gate before the spend

A judge pass scores every substantive claim against the sources. Score below your threshold and the job fails before any audio is rendered, so a badly grounded script never costs you a TTS bill.

The audio is checked too

The rendered episode is transcribed and diffed against the script. Any segment where the audio doesn't say what the script said gets re-rendered once, and the fidelity score lands in the manifest either way.

An audit trail, not a vibe

One immutable manifest per episode: sources, chunk-level citations, model versions, seed, groundedness score with every unsupported claim listed, loudness measurements, cost. Written once, never rewritten.

Disclosed by default

A spoken AI-disclosure line closes the episode, and every manifest carries a disclosure block. Podsquick renders synthetic hosts only and refuses to imitate a real, identifiable person.

Review before you commit

Set require_approval and the job stops after the script, hands you the draft, and renders nothing until you approve. Reject it and you've spent nothing on audio.


Legible to agents by construction

SurfaceWhereWhat it's for
MCP server/mcpSeven tools; generate_podcast needs only sources.
OpenAPI 3.1/openapi.jsonFull schemas, every default documented.
llms.txt/llms.txtThe whole product in the format agents actually read.
Typed errorsevery responseStable code plus a remediation field saying what to change.
IdempotencyIdempotency-KeyRetries return the original job instead of double-spending.
Dry run/api/estimateValidates identically to the real endpoint and prices the job.

What it doesn't do

Podsquick runs entirely on Cloudflare's edge runtime, which sets some honest boundaries. The manifest repeats these on every episode.