/api/v1.
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 clamped to the allowed window. A PRO range with no overlap returns403— readmeta.allowedRange/meta.appliedRange.
Pay-per-use (anonymous or FREE)
No free API access. Call the free quote, confirm theamountUsd, then pay with
an x402 client or a bearer credential backed by Drip credits. Freeze the quote’s
dateUsed and use the same limit on the paid request. The paid path selects
one day using date / limit; sort orders that day’s rows. Ranges, author /
direction / query filters, pagination, and prices apply to subscription reads
and are ignored on the paid path.
Stock-pick bundles are charged per request. A purchase does not create a
lifetime post unlock.
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, tickerExchange, instrumentType,
assetId, assetResolutionStatus, and asset.
assetResolutionStatus is RESOLVED, UNRESOLVED, or PENDING. Use assetId
and asset (id, name, kind, symbol, exchangeMic, currency) for
identity; a ticker alone can refer to different assets. asset and assetId
are null until resolved. instrumentType is the legacy extraction type;
asset.kind identifies resolved equities, ETFs, or crypto.
Historical subscription reads may also include prices (entry, current,
returnPct, currency). Returns are direction-adjusted. Prices are omitted
for the current day, pay-per-use requests, includePrices=false, unresolved
assets, and unavailable or mismatched provider data.
A successful subscription query can return picks: []. On the paid path,
no matching picks returns 404. Free quote responses include dateUsed,
startDate, endDate, asOf, count, attributedPostCount, amountUsd, and
posts[] containing publicationSlug and per-source amountUsd; quotes do not
expose post slugs or pick rows.
V2 errors: 400 invalid query, 401 bad bearer, 402 payment required,
403 outside the plan window or insufficient credits, 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, postSlug, assetId, assetResolutionStatus, and asset.
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:
Use V2 explicitly (
list_stock_picks_v2). Both list tools require an API key or
OAuth token with mcp:unlock; anonymous wallet payments use HTTP instead. 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.
