Skip to main content
The Polymarket CLOB pays maker rewards on a curated set of markets. Each rewarded market carries one or more reward configs (clob_rewards[]), each with a daily rate, a max spread, and a min order size. Struct exposes these through the markets list (filter has_rewards=true, sort sort_by=rewards) and via the markets stream and CLOB rewards rooms for live updates.

When to use this

  • Market-maker tooling: a leaderboard of “where can I earn the most rebates today?”
  • Reward eligibility checks: filter to markets with rewards_max_spread your strategy can hit.
  • Sponsor monitoring: track new sponsors joining or rates changing on a watched market.

Step 1: list reward-bearing markets

has_rewards=true keeps only markets with at least one active reward config; sort_by=rewards orders the response by combined daily rate descending.

Step 2: read the reward fields

Each market row carries a top-level total_daily_rate (the combined daily rate across all sponsors on that market) and a clob_rewards[] array with the per-config breakdown: The combined total_daily_rate is the right number for the dashboard’s primary sort. The per-config breakdown is what you show on the row’s expanded view.

Step 3: keep the dashboard fresh

Two paths, depending on freshness needs:

Coarse: re-poll on an interval

Live: subscribe to the markets stream

polymarket_markets_stream accepts the same has_rewards filter and pushes full market rows whenever they change.
The stream only pushes rows that actually changed since the last flush, so re-sorting by total_daily_rate runs in bounded time per tick.

Step 4: stream raw reward config changes

For sponsor-level events (a new sponsor joining a market, a rate change, an end date hit) subscribe to polymarket_clob_rewards. Each clob_rewards_update carries the full reward config so you can merge into a per-market reward map.
See CLOB Rewards for the full config shape.

Common combinations

Follow-on

To check whether your own quotes are inside the reward band on the markets you maker on, subscribe to polymarket_order_book for the same condition_ids. Compare the live spread to each market’s rewards_max_spread and flag rows where you’re out of band.
Last modified on April 28, 2026