V2 — GET /api/v2/stock-picks
The recommended endpoint. It resolves the caller’s plan from the bearer
credential first, then either serves the request from the subscription window
free of charge or routes anonymous / FREE callers through the same
pay-per-use flow as V1.
Subscription access (Bearer API key, OAuth token, or session JWT)
- EXPERT readers get full history. PRO is clamped to the live 7-day window.
- In-plan requests are never charged and count against the API key’s
monthly request allowance (
429when exhausted). - An explicit
dateoutside the plan window returns403; out-of-window ranges are silently clamped — readmeta.allowedRange/meta.appliedRange.
Pay-per-use (anonymous or FREE)
No free API access. Call the free quote, confirm theamountUsd, then pay. The
paid path accepts date / limit only (filters and ranges are paid-tier
features).
V2 query parameters
Each
picks[] item includes date, ticker, direction, action, author,
publicationSlug, publicationTitle, articleUrl (Drip’s sellable URL when a
post is attributed), conviction, convictionLabel, evidenceQuote,
rationaleSnippet, publishedAt, and prices (entry, current,
returnPct — direction-adjusted).
V2 errors: 400 invalid query, 401 bad bearer, 402 payment required,
403 explicit date/range outside the plan window, 404 no picks (paid path),
429 request allowance exhausted.
V1 — GET /api/v1/stock-picks (legacy, still available)
The original endpoint. It always returns one effective UTC calendar day —
the latest day with picks by default, or date=YYYY-MM-DD for a specific day.
Pricing is a flat unit price × the number of distinct attributed source
articles in the response; call GET /api/v1/stock-picks/quote for the exact
total, then pass the quoted dateUsed on the paid request. A 404 means no
picks exist for that day — do not pay.
dateUsed, startDate, endDate, asOf, count, and items[]
with ticker, tickerExchange, instrumentType, action, direction,
authorConviction, convictionLabel, activePick, evidenceQuote,
rationaleSnippet, articleTitle, articleUrl, author, publishedAt,
publicationSlug, and postSlug.
Migrating from V1 to V2
- Switch URLs —
/api/v1/stock-picks→/api/v2/stock-picksand/api/v1/stock-picks/quote→/api/v2/stock-picks/quote. Single-day callers can keep passingdate=YYYY-MM-DDunchanged. - Authenticate — if the caller has a PRO or EXPERT plan (Bearer API key, OAuth, or JWT), in-window reads become free, no quote or payment needed. The paid path for everyone else stays quote → confirm → pay.
- Adapt the response —
items[]becomespicks[],dateUsed/startDate/endDatebecomemeta+ adateon each pick, and the item fields change:
- Pagination — for ranges use
limitDays+cursor; the response’spagination.nextCursorcontinues older. Previously impossible beyond one day. - Errors — keep treating
404as “no picks, do not pay”. New:403for an explicit out-of-windowdate,429for an exhausted API-key allowance. - MCP — prefer
quote_stock_picks_v2/list_stock_picks_v2(confirmSpend: trueon the paid path only). The V1 tools (quote_stock_picks/list_stock_picks) remain available.
Hosted MCP
The four stock-picks tools map 1:1 to these routes:
MCP defaults to V2 (
list_stock_picks_v2). On the paid path, always call the
matching quote tool first, show amountUsd as $X.XX, confirm with the user,
then call with confirmSpend: true.
