GET /api/v2/stock-picks returns those calls grouped by day;
GET /api/v2/tickers/{ticker} returns the calls on a single ticker grouped by
analyst — the same rows, re-keyed.
GET /api/v2/tickers/search
Ticker autocomplete. q is a symbol fragment (max 10 characters); limit is
1-15. Omit q for the most-traded tickers. Free, no auth.
{ "query", "count", "tickers": [...] } ranked by how often the desk
calls the ticker.
GET /api/v2/tickers/{ticker}
Resolves the caller’s plan from the bearer credential first, then either serves
the request from the subscription window or routes wallet callers
through the pay-per-use flow.
Subscription access (Bearer API key, OAuth token, or session JWT)
- PRO / EXPERT are served free with the live window (up to today).
- An API key without a subscription is rejected with
403andreason: "subscription_required". - An authenticated caller without a paid plan spends Drip credits.
Pay-per-use (anonymous)
No free API access without a credential. Pay per use with an x402 client. The pay-per-use path serves the free 7-day-delayed window; subscribers read the live window.Query parameters
Response
Reading stance correctly
sentimentis the only stance signal.directionis retired.summary.byActionexists because stance alone lies. AnEXIT+BEARISHpick is a closed short — Burry covering his position still reads as a bearish call if you only count sentiment. Cross-checkbyActionbefore claiming a desk is bearish.analystscounts each analyst once, however many calls they made.sentimentisnullwhen the stored value was not one of the three — it is counted incallsbut in no stance bucket, never guessed.
Per-mention indicators
Each mention carries the same fields as the picks feed:thesis (AI-generated
summary of the stated reasoning — the readable body for a podcast guest, whose
evidenceQuote is often throwaway chatter), rationaleSnippet, timeframe
(+ timeframeQuote), priceTarget (+ priceTargetQuote) and underlyingTarget
(+ underlyingTargetQuote). Each indicator quotes where the analyst said it.

