Payment methods are split by mount: the plain
/api/v2/... paid routes accept
Bearer API keys, session JWTs, and MCP OAuth only; the /api/v2/x402/...
twins accept wallet payments (x402 / MPP) only. Wrong-mount credentials get
403 account_only / 403 wallet_only.
Why “source” and not “publication”
A publication is a Substack. A source is anything Drip reads from — a podcast has no posts on Substack, and a YouTube channel has no feed at all. V1 called all of thempublications, which was wrong for podcasts and
misleading for everything else. V2 uses one word for the whole set.
The v1 routes still work and are unchanged. See
Legacy publication routes for the V1 shapes.
GET /api/v2/sources
Lists the curated, chat-visible catalog. Free, no auth.
platform is how you tell a podcast from a newsletter: PODCAST_RSS marks a
podcast feed. There is no dedicated podcast route in V2 — filter the catalog
on platform instead.
GET /api/v2/sources/search
Resolves a source by name, author, show title, or URL. Free, no auth.
q is required and must be at least 2 characters. At most 3 matches come
back, ranked. If several look plausible, ask the user which one they meant
rather than guessing.
platform is an optional exact-match filter on the source type — same values
as the catalog’s platform field: SUBSTACK, BEEHIIV, GENERIC_RSS,
PODCAST_RSS, EMAIL, TWITTER, BOOK, YOUTUBE. Use platform=PODCAST_RSS
to find podcast shows. An unknown value returns 400.
GET /api/v2/sources/{sourceSlug}
One source plus its recent posts. Free, no auth.
- Works for any enabled indexed source, not just the curated catalog.
limitis 1-100. Omit it to get every post with a ready summary.isPodcastmarks podcast episodes — those unlock to atranscriptrather than only a summary.priceCentsis what unlocking that post costs. Show it as$X.XXand confirm before paying.404when the source is unknown or disabled.
GET /api/v2/sources/{sourceSlug}/{postSlug} (paid)
The full post: metadata plus the synthesizedSummary (and transcript for
podcast episodes) after payment.
sourceId and sourceSlug where V1 used publicationId and
publicationSlug. Everything else matches.
The first successful pay unlocks that post forever for the paying subject.
Later reads are free. Store the
unlockToken (or the X-Drip-Unlock response
header) and send it back for free re-reads. API key, JWT, and MCP OAuth all
share one Drip-user entitlement.
GET /api/v2/sources/{sourceSlug}/stock-picks (paid)
The source’s analyst profile: pick totals, direction-adjusted performance, win
rate, per-author split, top picks, and the latest calls.
- PRO / EXPERT subscribers are served free.
- Everyone else pays one flat price per call via x402 or MPP.
- The body uses a
sourceblock where V1 usedpublication.
Hosted MCP
The same routes are available as MCP tools:unlock_post takes publicationSlug and postSlug — the argument name
predates the source rename and is shared with the in-app chat tool.
Errors
Non-402 errors return
{ "error", "code", "hint" }. error is the human
message, code is machine-readable, hint points at recovery.
