---
title: "Stock Sentiment"
method: GET
path: "/polymarket/stocks/v1/stock/{ticker}"
tags: ["Polymarket Stocks"]
---

# Stock Sentiment

`GET /polymarket/stocks/v1/stock/{ticker}`

Returns Polymarket-based sentiment and activity for one stock ticker.

The response combines:
- Period metrics for the date window defined by `days` or `from`/`to`.
- Representative market-level evidence in `top_mentions`.
- A compact current market read in `pulse`.

**Fields:**
- `sentiment_score`, `bullish_pct`, `bearish_pct`: outcome-aware sentiment derived from Polymarket market prices and outcomes
- `buzz_score`: normalized activity score for the selected period; both bullish and bearish activity can increase buzz
- `trend`: recent flow momentum, comparing the current 3 UTC days with the previous 3 UTC days using trades, volume, market breadth and liquidity; this is not stock price movement
- `trade_count`, `market_count`, `unique_traders`, `total_liquidity`: period activity, breadth, observed participation and liquidity
- `daily_trend`: daily activity and sentiment values for the selected window
- `top_mentions`: representative Polymarket markets behind the ticker-level signals, including market-level `sentiment_score` and `buzz_score`
- `pulse`: compact current interpretation from the latest stored open-market snapshots

**Notes:**
- `pulse` is current-state oriented and does not duplicate aggregate response fields.
- Use `top_mentions` for concrete market examples; `pulse` intentionally stays compact.
- `top_mentions` includes only markets observed active/open in the selected period; ranking prioritizes outcome-aware directional evidence, keeps opposing signals visible when present, then uses trade count, market status, volume and liquidity as tie-breakers.
- Prices, volume and liquidity in `top_mentions` come from the selected in-period snapshot, not necessarily the latest live market state.
- `active` indicates whether the market is currently open, so older in-period evidence can now be inactive, resolved or expired.
- `market_status` can be `tradable`, `open`, `resolved`, `expired` or `inactive`.
- For windows longer than snapshot retention, aggregate metrics can still use `polymarket_daily_stats`; `top_mentions` is limited to retained or stored representative market snapshots.
- Returns `200` with `found: false` when the ticker is supported but this service has no qualifying data in the requested window. Returns `404` only when the ticker is unsupported.

## Path parameters

- `ticker` string, required — Stock ticker symbol (e.g., TSLA, $AAPL, BRK.A)

## Query parameters

- `from` string, date, nullable — Start date in YYYY-MM-DD. Inclusive UTC date.
- `to` string, date, nullable — End date in YYYY-MM-DD. Inclusive UTC date. Omit to use the current UTC date.
- `days` integer — Deprecated v1 compatibility shorthand. Prefer `from` and `to` for reproducible UTC date windows.

## Response `200`

Successful Response

- PolymarketStockDetailResponse — Detailed Polymarket data for a single stock.
  - `ticker` string, required — Stock ticker symbol
  - `company_name` string, nullable — Company name from ticker_reference
  - `found` boolean, required — Legacy v1 data-availability flag. `true` means this service has qualifying data for this asset/window. `false` means the asset is supported, but this service has no qualifying data for the requested window. Planned for removal in v2.
  - `buzz_score` number, nullable — Buzz score (0-100)
  - `trend` 'rising' | 'falling' | 'stable', nullable — Flow momentum over the current 3 UTC days vs previous 3 UTC days using trades, volume, market breadth and liquidity; not price movement. For `from`/`to`, anchors at `to` (or now when `to` is today).
  - `period_days` integer, nullable — Analysis period in days
  - `trade_count` integer, nullable — Trade count in period
  - `market_count` integer, nullable — Distinct markets that existed for ticker within the selected UTC window, counted by market-catalog lifetime overlap
  - `current_market_count` integer, nullable — Number of currently open markets in the latest UTC-day snapshot for ticker; use this for live-only market breadth
  - `unique_traders` integer, nullable — Exact distinct union of observed proxy and explicit maker wallet hashes for the delivered scope and UTC window; null when retained wallet-level trades do not fully cover the window; not a complete market-wide participant census
  - `sentiment_score` number, nullable — Orderbook-aware implied sentiment; null when no directional sentiment evidence exists in the selected period
  - `positive_count` integer, nullable — Deprecated. Outcome-aware bullish market count retained for v1 compatibility; prefer bullish_pct with trade_count and market_count for public analysis.
  - `negative_count` integer, nullable — Deprecated. Outcome-aware bearish market count retained for v1 compatibility; prefer bearish_pct with trade_count and market_count for public analysis.
  - `neutral_count` integer, nullable — Deprecated. Outcome-aware neutral/unclassified market count retained for v1 compatibility; prefer bullish_pct, bearish_pct, trade_count and market_count for public analysis.
  - `bullish_pct` integer, nullable — Outcome-aware bullish market percentage
  - `bearish_pct` integer, nullable — Outcome-aware bearish market percentage
  - `total_liquidity` number, nullable — Windowed aggregated liquidity signal in USD over the selected period; not a current snapshot
  - `daily_trend` PolymarketDailyTrendItem[], nullable — Daily activity breakdown for the selected period
    - `date` string, required — Date in YYYY-MM-DD format
    - `trade_count` integer, required — Trade count on this date
    - `sentiment_score` number, nullable — Outcome-aware implied sentiment on this date; can come from orderbook evidence or legacy traded price evidence, null when no sentiment evidence exists
    - `buzz_score` number, nullable — Buzz score on this date; null when neither a daily aggregate nor a live fallback could be computed for this date
    - `bullish_pct` integer, nullable — Outcome-aware bullish market-direction percentage for this date
    - `bearish_pct` integer, nullable — Outcome-aware bearish market-direction percentage for this date
  - `top_mentions` PolymarketTopMention[], nullable — Top markets with an active/open snapshot during the retained snapshot portion of the selected UTC-day period for this ticker (including the current UTC day so far), capped at 10 and sorted as representative sentiment evidence: outcome-aware directional markets first, opposing signals kept visible when present, then trade count, with non-open markets de-prioritized and 24h volume and liquidity as tie-breakers. For windows longer than raw snapshot retention, ticker analytics still use `polymarket_daily_stats`, but this representative snapshot list is limited to retained `polymarket_market_snapshots`. Item prices and liquidity come from the selected in-period snapshot, not necessarily the current market state. `active` indicates whether the market is currently open, so historical in-period evidence can now have a non-open current state. `market_status` gives the compact current state.
    - `condition_id` string, required — Polymarket condition ID
    - `question` string, required — Market question/title
    - `market_type` string, required — Derived market type
    - `trade_count` integer, nullable — UTC-day trade count from the selected in-period snapshot
    - `sentiment_score` number, required — Outcome-aware market price sentiment for the selected in-period snapshot; prefers orderbook midpoint when available, falls back to YES/NO price and returns neutral 0.0 when direction is unclassified
    - `buzz_score` number, nullable — Market-level activity buzz score for this selected in-period snapshot
    - `yes_price` number, nullable — YES price from the selected in-period snapshot; not necessarily live
    - `no_price` number, nullable — NO price from the selected in-period snapshot; not necessarily live
    - `liquidity` number, required — Selected in-period snapshot liquidity in USD; not necessarily live
    - `volume_24h` number, required — Selected in-period snapshot rolling 24h volume in USD; not necessarily live
    - `end_date` string, nullable — Market end date (ISO)
    - `active` boolean, required — Whether the representative market state is open; snapshot-backed rows use current state, historical daily examples use stored representative state
    - `market_status` 'tradable' | 'open' | 'resolved' | 'inactive' | 'expired', required — Compact market status for this representative item; snapshot-backed rows use current state, historical daily examples use stored representative state
  - `pulse` PolymarketTickerPulse — Compact interpretation layer for current ticker-level Polymarket data.
    - `mood` 'bullish' | 'bearish' | 'mixed' | 'event_driven' | 'illiquid' | 'unclear', required — Current compact Polymarket interpretation for this ticker
    - `confidence` number, required — Interpretation confidence capped by coverage, trade breadth, spread, liquidity and recency
    - `thin_data` boolean, required — True when current evidence is insufficient for a strong directional interpretation
    - `why` string[], required — Stable machine-readable reason codes explaining the pulse interpretation
    - `warnings` string[] — Stable machine-readable data quality, freshness and tradability warnings
    - `evidence` PolymarketPulseEvidence, required — Compact data-quality evidence for the ticker-level Polymarket pulse.
      - `directional_coverage` number, nullable — Share of current open snapshot markets with outcome-aware directional evidence
      - `traded_market_pct` number, nullable — Share of current open snapshot markets with trades in the latest UTC day
      - `zero_trade_market_pct` number, nullable — Share of current open snapshot markets without trades in the latest UTC day
      - `avg_spread` number, nullable — Average YES-token spread across current open snapshot markets with bid/ask spread evidence
      - `snapshot_at` string, date-time, nullable — Latest stored snapshot timestamp used by the pulse read model

## Other responses

- `401` — Authentication failed
- `403` — Historical data limit exceeded
- `404` — Unsupported ticker
- `422` — Invalid period or query parameters
- `429` — Rate limit exceeded
- `503` — Database temporarily unavailable
- `504` — Analytics request deadline exceeded

---

[API](https://skmtc.net/adanos/apis/adanos-market-sentiment-api.md) · [All operations](https://skmtc.net/adanos/apis/adanos-market-sentiment-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/adanos/adanos-market-sentiment-api/revisions/351caf64ba81/schema)
