Subscribe to all Changes:
- Add to any RSS reader using the URL:
https://docs.polymarket.us/changelog/rss.xml - Slack has a built-in reader: use
/feed subscribe https://docs.polymarket.us/changelog/rss.xml
- Weekly maintenance window moved to Thursday 2:00am–6:00am ET, effective July 9, 2026. Previously, the window was every Thursday, 6:00am–8:00am ET. Affects both the Institutional API and Retail API.
- Live status: status.polymarketexchange.com.
- Scheduled maintenance window — Tuesday, July 7, 2:00am–6:00am EDT. Affects both the Institutional API and Retail API. Please note the time change, as this is different than our normal hours.
- Live status: status.polymarketexchange.com.
- Soccer To Advance is now a single two-sided instrument.
soccer_game_to_advancemarkets are created as one moneyline instrument carrying both teams (long and short), instead of two separate per-team Yes/No instruments. Live starting with the World Cup quarter-finals. - First instrument:
aadc-fwc-fra-mar-2026-07-09-to-advance(France vs Morocco, July 9) — a single id. It is not two instruments (aadc-fwc-fra-mar-2026-07-09-to-advance-fraandaadc-fwc-fra-mar-2026-07-09-to-advance-mar). - Fields:
outcome_typeismoneylineandmarket_sport_typeissoccer_game_to_advance. - All To Advance games from here on use this format. Read both sides off the one instrument — Retail:
marketSidesfromGET /v1/market/slug/{slug}; Institutional:long_participant_id/short_participant_idfromSearchInstruments/GetInstrument.
- Politics and tennis winner futures liquidity rewards are reduced, effective 8:00pm ET, Thursday July 2 (00:00 UTC, Friday July 3):
- Politics: $500/day → $250/day per event, pro-rated across all markets within the event.
- ATP & WTA winner futures: $1,000/day → $500/day per tournament winner futures event.
- Wimbledon winner futures: $5,000 per draw per day → $2,500 per draw per day ($5,000/day total across the men’s and women’s draws, down from $10,000/day).
- Discount factors and target sizes are unchanged. Full details on the Liquidity Incentive Program page.
- Upcoming — these markets become a single two-sided instrument. Instead of two separate per-team instruments, each of the following is created as one instrument with both participants (a single long/short winner market):
soccer_game_to_advance— Soccer To Advance, starting with the World Cup quarter-finals onwardesports_map_winner_1/esports_map_winner_2/esports_map_winner_3andesports_game_winner_1/esports_game_winner_2/esports_game_winner_3— esports map / game winner**tennis_set_1_winner/tennis_set_2_winner/tennis_set_3_winner— tennis set winner**
- One market, two sides. Each market now exposes a single instrument carrying both teams/players (
long_participant_id/short_participant_id; Retail two-sidedmarketSides) rather than one Yes/No market per participant. Read both sides off the one instrument instead of expecting two separate markets per event. - Effective for newly created instruments only. Existing instruments keep their current shape. Soccer To Advance applies starting with the World Cup quarter-finals onward; esports map/game winner and tennis set winner apply to instruments created from Friday night (July 3, 2026) onward.
- Where to read it: Retail —
marketSidesandsportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —long_participant_id/short_participant_idandmarket_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- Nathan’s Hot Dog Eating Contest markets (July 4, 2026) now carry $13,000 in liquidity rewards, effective July 2.
- Men’s contest — $10,000. Each of the four men’s events — Chestnut to win, winner without Chestnut, winner’s total hot dogs & buns, and men’s record broken — has $2,500: $1,250 Early + $1,250 Day-of (discount factor 0.40/0.35, target size 2,500), distributed pro-rata across eligible instruments.
- Women’s contest — $1,000 per day. Each of the four women’s events — Sudo to win, winner without Sudo, winner’s total hot dogs & buns, and women’s record broken — has $250 per day (discount factor 0.35, target size 2,500), distributed pro-rata across eligible instruments.
- Full details on the Liquidity Incentive Program page.
lastPriceSampleis being removed. As of Friday, July 3, 2026, this field should no longer be considered supported — do not rely on it in your integration going forward.- Where it appears:
- Retail Markets WebSocket (
wss://api.polymarket.us/v1/ws/markets) — bothSUBSCRIPTION_TYPE_MARKET_DATAandSUBSCRIPTION_TYPE_MARKET_DATA_LITEresponses. - REST —
GET /v1/markets/{slug}/bboandGET /v1/markets/{slug}/book.
- Retail Markets WebSocket (
- Use
longQuote/shortQuoteinstead on the lite response (SUBSCRIPTION_TYPE_MARKET_DATA_LITEandGET /v1/markets/{slug}/bbo) — these fields already carry the equivalent data. The full response (SUBSCRIPTION_TYPE_MARKET_DATAandGET /v1/markets/{slug}/book) has no equivalent replacement field.
- Scheduled maintenance window — Thursday, July 2, 2:00am–6:00am EDT. Affects both the Institutional API and Retail API. Please note the time change, as this is different than our normal hours.
- Live status: status.polymarketexchange.com.
- Wimbledon match winner markets are now decimalized. Wimbledon and Wimbledon qualifiers match winner markets (
tennis_match_winner) were initially listed with full cent ticks. New markets for the rest of the tournament are decimalized with a 0.5 cent ($0.005) tick size. - Existing instruments are unaffected — they keep the tick they were created with.
- Read the tick per instrument before trading. Retail —
market.orderPriceMinTickSizefromGET /v1/market/slug/{slug}; Institutional —instrument.tickSizefromSearchInstruments/GetInstrument. Do not assume 1 cent ticks.
- Tennis props:
- All tennis prop markets (alongside the
tennis_match_winnermoneyline):tennis_match_games_spread— handicap on games wontennis_match_sets_spread— handicap on sets wontennis_match_total_games— total games played across the matchtennis_match_total_sets— total sets played across the matchtennis_match_exact_score— exact set scoretennis_set_1_winner/tennis_set_2_winner/tennis_set_3_winner— per-set winner
- Soccer half BTTS and First Team to Score are live. The following enums are added to
market_sport_type(RetailsportsMarketType):soccer_game_first_half_btts— both teams to score in the first halfsoccer_game_first_half_first_team_to_score— first team to score in the first half (per-team plus a “None” outcome)soccer_game_second_half_btts— both teams to score in the second halfsoccer_game_second_half_first_team_to_score— first team to score in the second half (per-team plus a “None” outcome)
- Each market counts its own half only. First-half markets count goals up to and including minute 45 (plus first-half stoppage time); second-half markets count minutes 46 through 90 (plus second-half stoppage time). Goals scored in extra time never count toward either half.
- Settlement timing. First-half markets settle once the first half is complete (halftime); second-half markets settle at full time. If a half is goalless, the First Team to Score market resolves None.
- Standard 1 cent (
$0.01) tick size — these are not decimalized. - Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- Subjects API is deprecated. The Subjects endpoints —
GET /v1/subjects,GET /v1/subjects/{id},GET /v1/subjects/slug/{slug}, and their/marketsvariants — are deprecated and will be removed on June 29, 2026. They are no longer used, and their documentation has been removed from the API reference. If you currently depend on them, please reach out before the removal. - Deprecated Market, MarketSide, and Event fields. The following response fields are now marked deprecated in the API reference and will be removed on June 29, 2026. They continue to work until then — please migrate to the structured replacements:
- Market
marketTypeandsportsMarketTypeV2→sportsMarketType - Market
outcomes/outcomePrices(JSON strings) →marketSides[] - Event
participants→teams MarketSide.team→ the market side’s participant dataMarketSide.participantId, and Marketarchived,manualActivation,gameStartTime→ being removed from public responses
- Market
- Deprecated fields are flagged in the API reference so you can identify them while migrating. Removal is scheduled for June 29, 2026.
- Soccer extra-time markets are live for the World Cup. The following enums are added to
market_sport_type(RetailsportsMarketType) on knockout fixtures:soccer_game_goes_to_extra_time— binary Yes/No: will the match go to extra time?soccer_team_extra_time_spread— spread on the extra-time goal marginsoccer_game_extra_time_total— Over/Under total goals in extra timesoccer_game_extra_time_btts— both teams to score in extra timesoccer_game_extra_time_first_team_to_score— first team to score in extra time (per-team plus a “None” outcome)
- Extra time only. The spread, total, both-teams-to-score, and first-team-to-score markets count only goals scored in extra time — they exclude 90 minutes plus stoppage time and any penalty shootout.
soccer_game_goes_to_extra_timesettles Yes once the tie is level after regulation and proceeds to extra time. - If the match does not reach extra time, the four extra-time scoring markets settle to the last fair market price (
soccer_game_goes_to_extra_timesettles No). - Created pre-match for knockout games, alongside the other team props, once the main match market is open. Group-stage fixtures do not list these markets.
- Standard 1 cent (
$0.01) tick size — these extra-time markets are not decimalized. (Only the full-game World Cup spreads and totals use the 0.5 cent tick.) - Example slugs (Round of 32, South Africa vs Canada,
fwc-rsa-can-2026-06-28):- Goes to extra time:
astatc-fwc-rsa-can-2026-06-28-goes-et - Extra-time spread:
asc-fwc-rsa-can-2026-06-28-et-neg-1pt5(and-neg-0pt5,-pos-0pt5,-pos-1pt5) - Extra-time total:
tsc-fwc-rsa-can-2026-06-28-et-1pt5 - Both teams to score (ET):
astatc-fwc-rsa-can-2026-06-28-et-btts - First team to score (ET):
astatc-fwc-rsa-can-2026-06-28-et-ftts-rsa(and-can,-none)
- Goes to extra time:
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- Cricket now covers international & domestic T20. In addition to IPL, the match winner market is now live for T20 Internationals, Major League Cricket, the T20 Blast (men’s and women’s), and the Women’s T20 World Cup.
- Same market type — no integration changes. Each match lists one match winner market (
market_sport_type = "cricket_match_winner", RetailsportsMarketType = "cricket_match_winner"), identical in structure to IPL. It resolves to the official match winner; a no result, tie, or abandonment with no declared winner resolves to $0.50. - Liquidity rewards — $500 per match on the match winner market, split early / day-of / live = $25 / $75 / $400 (discount factors 0.40 / 0.35 / 0.30, target size 10,000 each). IPL keeps its own $20,000 structure.
- Example slugs (Major League Cricket):
aec-mlc-sfu-soe-2026-06-27(San Francisco Unicorns vs Seattle Orcas),aec-mlc-mny-lakr-2026-06-27(MI New York vs Los Angeles Knight Riders). - Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema and Liquidity Rewards.
- Soccer To Advance is live for the World Cup. Knockout fixtures now list a To Advance market (
market_sport_type = soccer_game_to_advance, RetailsportsMarketType = "soccer_game_to_advance"). It is created per knockout game once the main match market is open. - Structure: each knockout tie has two separate instruments — one per team (e.g. “Will South Africa advance?” and “Will Canada advance?”), each a binary Yes/No market. They resolve on the team that progresses over the whole tie — regulation, extra time, and penalties — not the 90-minute result.
- Decimalized 0.5 cent tick size (
$0.005). Do not assume 1 cent ticks. Read tick size per instrument before validating or submitting orders:- Retail API:
market.orderPriceMinTickSizefromGET /v1/market/slug/{slug}(expect0.005). - Institutional API:
instrument.tickSizefromSearchInstruments/GetInstrument(expect0.005); divide integer prices byinstrument.priceScale(e.g.priceScale == 1000→price = 5is$0.005).
- Retail API:
- Example slugs (Round of 32, South Africa vs Canada, event
aadc-fwc-rsa-can-2026-06-28-to-advance):- South Africa to advance:
aadc-fwc-rsa-can-2026-06-28-to-advance-rsa - Canada to advance:
aadc-fwc-rsa-can-2026-06-28-to-advance-can
- South Africa to advance:
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- Maintenance window — Friday, June 26, 2:30am–4:30am EST. Affects both the Institutional API and Retail API. Please note the time change, as this is different than our normal hours.
- Live status: status.polymarketexchange.com/incidents/d936p4wqsp77.
GET /v1/portfolio/positionswill be paginated. The endpoint will return up to 100 positions per page instead of the entire set in a single response.- Action required for large accounts. To retrieve all of your positions, follow the
nextCursorvalue (sent as thecursorquery parameter) until the response returnseof: true. Accounts with more than 100 positions that do not paginate will only receive the first page. - No change for smaller accounts. Accounts with 100 or fewer positions still receive every position in a single response, now with
eof: true. - Why: returning every position in one response caused request timeouts and out-of-memory errors for accounts with very large position lists (tens of thousands of positions).
- Rollout: rolling out soon — we’ll announce the enablement date here in advance. Subscribe to the RSS feed to be notified before it ships.
- Where to read it:
GET /v1/portfolio/positions. See Portfolio API.
- Backfill complete. Every open instrument in production now carries
market_sport_type, including full-game winner/spread/total and full-time/match/fight winner markets. - Map on
market_sport_typealone — you no longer need to checkoutcome_type.market_sport_typefully identifies a market’s structure and period on its own. outcome_typeis still there, just don’t rely on it for mapping. It remains populated on every instrument but is subject to change; treat it as informational only and migrate any mapping logic tomarket_sport_type.- One exception: season/event-long futures carry no
market_sport_typeand are still identified byoutcome_type = "futures". - Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- Starting Monday, June 22, 2026, every instrument in production will have
market_sport_typefilled in — including full-game winner/spread/total (and full-time / match / fight winner), which previously left it unset (see v0.0.48 for the enum list). - Backfill: we’ll backfill all open instruments with
market_sport_typeon Monday, June 22. outcome_typeremains on the instrument and is unchanged (moneyline/spreads/totals/drawable_outcome). However, please do not use this for mappings and use sport_market_type instead, outcome_type will be deprecated in the coming weeks.- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- Every instrument now carries an explicit
market_sport_type— production Tuesday, June 23, 2026. This adds full-game winner/spread/total and full-time/match winner markets, which previously left it unset (see v0.0.48 for the enum list). - Backfill: we’ll backfill all open instruments with the new
market_sport_typeon Tuesday, June 23 at 12:00pm ET. - You can now fully identify an instrument from
market_sport_typealone — it encodes both market structure (winner/spread/total) and period (full game, first half, etc.). Use it as your single source of truth going forward. outcome_typeis deprecated. Please don’t rely on it — it’s subject to change. Migrate any logic keyed offoutcome_typetomarket_sport_typebefore Tuesday.- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument. See Sports Schema.
- New tennis match props (coming soon). The following enums are added to
market_sport_type(RetailsportsMarketType):- Games:
tennis_match_games_spread,tennis_match_total_games - Match:
tennis_match_exact_score - Set winner (one type per set):
tennis_set_1_winner,tennis_set_2_winner,tennis_set_3_winner
- Games:
- Set Winner covers only the guaranteed sets — best-of-3: sets 1-2 (
tennis_set_1_winner,tennis_set_2_winner); best-of-5: sets 1-3 (addstennis_set_3_winner). - Exact Match Score resolves on the final score in sets (best-of-3:
2-0/2-1; best-of-5:3-0/3-1/3-2). - Resolution: games spread and total games settle on total games across the completed match; set winner settles per set; exact match score settles on the final sets score. If a match is not completed (walkover, retirement, cancellation, or postponement beyond the scheduled window), the market settles at the last fair market price.
- Coverage: ATP and WTA singles matches.
- Example slugs (ATP, event
atp-novdjo-caralc-2026-06-06):- Games spread:
asc-atp-novdjo-caralc-2026-06-06-gs-neg-3pt5 - Total games:
tsc-atp-novdjo-caralc-2026-06-06-tg-22pt5 - Exact match score:
astatc-atp-novdjo-caralc-2026-06-06-es-2-0 - Set winner (Set 1):
astatc-atp-novdjo-caralc-2026-06-06-set1-sw1
- Games spread:
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument.
- Full-game and full-match markets now carry an explicit
market_sport_type— live in preprod now. Previously these markets leftmarket_sport_typeunset and were identifiable only byoutcome_type(moneyline/spreads/totals/drawable_outcome). Newly created instruments now also carry a fine-grainedmarket_sport_type, consistent with the existing period markets (e.g.basketball_team_first_half_spread). The following enums are added tomarket_sport_type(RetailsportsMarketType):- Basketball — full game (NBA, WNBA, CBB, WCBB):
basketball_team_full_game_winner,basketball_team_full_game_spread,basketball_team_full_game_total - Football — full game (NFL, CFB):
football_team_full_game_winner,football_team_full_game_spread,football_team_full_game_total - Baseball — full game (MLB):
baseball_team_full_game_winner,baseball_team_full_game_spread,baseball_team_full_game_total - Hockey — full game (NHL):
hockey_team_full_game_winner,hockey_team_full_game_spread,hockey_team_full_game_total - Match / fight winner:
tennis_match_winner,cricket_match_winner,esports_match_winner,ufc_fight_winner - Soccer — full-time 3-way winner:
soccer_team_full_time_winner(outcome_typestaysdrawable_outcome). Soccer full-game spread/total already carriedsoccer_team_full_game_spread/soccer_team_full_game_totaland are unchanged.
- Basketball — full game (NBA, WNBA, CBB, WCBB):
outcome_typeis unchanged and continues to be populated on new instruments (moneyline/spreads/totals/drawable_outcome), so existing structural logic keeps working.- Existing instruments are not modified. Instruments created before this change keep their current values and leave
market_sport_typeunset; the new enums appear only on newly created instruments. During the transition, treat a full-game market with an unsetmarket_sport_typeas full-game. - Rollout: live in preprod now. We’ll announce the production date here in advance — subscribe to the RSS feed to be notified before it ships to production.
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument.
- Maintenance window — Wednesday, June 17, 6:00am–9:00am EST. Affects both the Institutional API and Retail API. Please note the time change, as this is different than our normal hours. This is a one-off time change.
- World Cup futures liquidity rewards increased (effective 12:00am ET, Friday June 12):
- Tournament Winner Futures: $1,500/day → $5,000/day.
- Group Winners & Golden Boot Futures: $750/day → $1,500/day.
- Exotic Futures: $500/day → $1,000/day.
- Discount factors and target sizes unchanged.
- Soccer spread/total markets now use the
spreads/totalsoutcome_typefor every period. Previously, soccer first-half, second-half, and team-total markets were listed withoutcome_type = "props". They now use the same structuraloutcome_typeas full-game spreads/totals, matching basketball and baseball period markets. The period is encoded bymarket_sport_type.- Spread →
outcome_type = "spreads":soccer_team_first_half_spread,soccer_team_second_half_spread. - Total →
outcome_type = "totals":soccer_team_first_half_total,soccer_team_second_half_total,soccer_team_total_goals,soccer_team_total_goals_first_half.
- Spread →
- Action recommended: identify market structure from
outcome_typeand the period frommarket_sport_type. Do not assume soccer period spread/total markets areprops. See Sports Schema. - Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —outcome_typeandmarket_sport_typefromSearchInstruments/GetInstrument.
- World Cup liquidity rewards increased (effective 2:00pm ET, Thursday June 11): Total per game raised from $30,000 → $50,000.
- Moneyline/spreads/totals: $20,000 → $35,000 (Moneyline $26,250, Spreads $4,375, Totals $4,375).
- Player Props: $5,000 → $7,500 ($3,750 Pre-game + $3,750 Live).
- Team Props: $5,000 → $7,500 ($3,750 Pre-game + $3,750 Live).
- Discount factors and target sizes unchanged.
- Maintenance window — Thursday, June 11, 3:00am–5:00am EST. Please note the time change, as this is different than our normal hours. This is a one-off time change.
We heard feedback from some of our users that they needed more time to fully migrate to partial contracts, so we pushed back full rollout. All newly listed instruments will become partial-contract markets on Thursday, June 11, 2026 at 5:00 PM ET (21:00 UTC). Long-dated futures markets listed before then and all World Cup instruments are partial-contract markets, so all market makers and API users should support partial-contract instruments now.
- NHL hockey market types are live. The following enums are added to
market_sport_type(RetailsportsMarketType):- Game:
hockey_game_overtime(will the game go to overtime?)hockey_game_double_overtime(will the game go to double overtime?)
- Player props:
hockey_player_goalshockey_player_assistshockey_player_points
- Game:
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument.
- UFC market types are live. The following enums are added to
market_sport_type(RetailsportsMarketType):ufc_method_of_victoryufc_go_the_distanceufc_round_of_victoryufc_round_of_finishufc_method_of_finish
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument.
- Soccer market types are live. The following enums are added to
market_sport_type(RetailsportsMarketType):- Team — full game:
soccer_team_full_time_winnersoccer_team_full_game_spreadsoccer_team_full_game_total
- Team — first half:
soccer_team_first_half_winnersoccer_team_first_half_spreadsoccer_team_first_half_total
- Game props:
soccer_game_btts(both teams to score)soccer_game_first_team_to_scoresoccer_game_exact_scoresoccer_game_total_corners
- Player props:
soccer_player_goalssoccer_player_assists
- Team — full game:
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument.
- NBA Playoffs props expansion (effective 1:00pm ET, Friday June 5): Props pool increased from $10,000 → $20,000 per game. Categories reorganized:
- Player Props: $10,000/game ($5,000 Day-of + $5,000 Live).
- Game Props (new): $5,000/game ($2,500 Day-of + $2,500 Live).
- Other Props (new): $5,000/game ($2,500 Day-of + $2,500 Live).
- Team Props removed.
- NBA Playoffs Moneyline reduction (Live): $56,500 → $50,000 per game.
- NBA Playoffs total liquidity per game: $100,000 → $103,500 ($83,500 moneyline/spreads/totals + $20,000 props).
- NBA Pool row updated: Early $4,000 / Day-of $14,000 / Live $85,500.
- Props discount factor and target size are consistent across all categories: 0.35 / 2,500 for both Day-of and Live.
- World Cup liquidity rewards: start time pushed to 6:00pm ET, Thursday June 4 (was June 3).
- Starting Monday, June 8, 2026 at 12:00 PM EST, every newly listed instrument will be a partial-contract market. Existing instruments are unchanged. Do not assume whole-contract quantities — derive the partial scale per instrument before submitting orders.
- Institutional API — derive the scale, then convert:
instrument.fractionalQtyScale— divide raw integer quantities by this to get decimal contracts. For example, withfractionalQtyScale == 100,quantity = 1is0.01contracts andquantity = 100is1full contract.instrument.minimumTradeQty— the smallest tradable integer quantity.- Initial partials use
fractionalQtyScale == 100andminimumTradeQty == 1, so the minimum order is 1% of a contract. - On the
Ordermessage,fractional_quantity_scale(field 49) carries the same scale for convertingorder_qty,cum_qty, andleaves_qty.
- Retail API — read the minimum, then handle decimals:
minimumTradeQtyon the market object (for exampleGET /v1/market/slug/{slug}) is expressed in contracts, so0.01means a 1%-of-a-contract minimum.- Treat
quantity,cumQuantity, andleavesQuantityas decimals, and use the decimal portfolio fields (netPositionDecimal,qtyBoughtDecimal, …).
- NBA quarter spread + total markets and game-to-overtime (preprod now, production by midnight EST on June 2, 2026). The following enums are added to
market_sport_type(RetailsportsMarketType):- Spread:
basketball_team_first_quarter_spread,basketball_team_second_quarter_spread,basketball_team_third_quarter_spread,basketball_team_fourth_quarter_spread - Total:
basketball_team_first_quarter_total,basketball_team_second_quarter_total,basketball_team_third_quarter_total,basketball_team_fourth_quarter_total - Game-to-overtime:
basketball_game_overtime
- Spread:
- Resolution: each quarter market settles on points scored in that quarter only; 4th-quarter markets exclude overtime. The game-to-overtime market settles at the conclusion of the game.
- Example slugs (NBA Finals, New York vs. San Antonio,
nba-ny-sa-2026-06-03):- 1st quarter spread:
asc-nba-ny-sa-2026-06-03-q1-neg-2pt5, total:tsc-nba-ny-sa-2026-06-03-q1-56pt5 - 4th quarter spread (excl. OT):
asc-nba-ny-sa-2026-06-03-q4-neg-1pt5, total:tsc-nba-ny-sa-2026-06-03-q4-51pt5 - Game-to-overtime:
astatc-nba-ny-sa-2026-06-03-ot
- 1st quarter spread:
- Where to read it: Retail —
sportsMarketTypefromGET /v1/market/slug/{slug}; Institutional —market_sport_typefromSearchInstruments/GetInstrument.
- NBA second half + new player props (preprod now, production June 2, 2026 at 6:00 PM EST): Basketball second-half team markets and six additional player props are live in preprod and will be deployed to production on June 2, 2026 at 6:00 PM EST. The following enums are added to the instrument
market_sport_typefield (RetailsportsMarketType):- Team — second half:
basketball_team_second_half_winnerbasketball_team_second_half_spreadbasketball_team_second_half_total
- Player props:
basketball_player_reboundsbasketball_player_threesbasketball_player_stealsbasketball_player_blocksbasketball_player_double_doublebasketball_player_triple_double
- Team — second half:
- Example slugs (NBA Finals, New York vs. San Antonio,
nba-ny-sa-2026-06-03):- Team — second half:
- 2H moneyline:
atc-nba-ny-sa-2026-06-03-sh-ny,atc-nba-ny-sa-2026-06-03-sh-sa,atc-nba-ny-sa-2026-06-03-sh-draw - 2H spread:
asc-nba-ny-sa-2026-06-03-sh-neg-10pt5,asc-nba-ny-sa-2026-06-03-sh-pos-1pt5 - 2H total:
tsc-nba-ny-sa-2026-06-03-sh-105pt5
- 2H moneyline:
- Player props (each strike is its own market; player segment is first-3-of-first + first-3-of-last name):
- Rebounds:
astatc-nba-ny-sa-2026-06-03-reb-vicwem-gte11 - Three-pointers made:
astatc-nba-ny-sa-2026-06-03-threes-jalbru-gte3 - Steals:
astatc-nba-ny-sa-2026-06-03-stl-jalbru-gte2 - Blocks:
astatc-nba-ny-sa-2026-06-03-blk-vicwem-gte2 - Double-double:
astatc-nba-ny-sa-2026-06-03-dd-vicwem-gte1 - Triple-double:
astatc-nba-ny-sa-2026-06-03-td-vicwem-gte1
- Rebounds:
- Team — second half:
- Resolution — second half excludes overtime: Second-half team markets (spread, total, moneyline) settle on points scored in the third and fourth quarters only; overtime is not included.
- Resolution — player props: The new counting props (rebounds, three-pointers made, steals, blocks) settle on full-game box-score totals including overtime, consistent with the existing points and assists props. Double-double and triple-double resolve Yes/No — Yes when the player records 10 or more in at least two (double-double) or three (triple-double) of points, rebounds, assists, steals, or blocks.
- Where to read it:
- Retail API — read
sportsMarketTypefrom the market object (for exampleGET /v1/market/slug/{slug}). - Institutional API — read
market_sport_typefrom instrument reference data (SearchInstruments/GetInstrument).
- Retail API — read
- NBA Finals Game 2: New York vs. San Antonio Game 2 of the NBA Finals (
aec-nba-ny-sa-2026-06-05) will be listed on Monday, June 1, 2026 and will be the first market with a 0.5 cent tick size ($0.005). The remainder of NBA Finals markets will also use 0.5 cent ticks. - Retail API: read
market.orderPriceMinTickSizefrom the market response before submitting orders. For this market, useGET /v1/market/slug/aec-nba-ny-sa-2026-06-05and expectorderPriceMinTickSize: 0.005. - Institutional API: read
instrument.tickSizefrom instrument reference data (SearchInstruments/GetInstrument). For this instrument,instrument.tickSize = 0.005. - Institutional price scale: prices submitted to the Institutional API are integer values. Read
instrument.priceScalefrom the same instrument reference data response and divide submitted or returned integer prices by that value to get dollar prices. For example, ifinstrument.priceScale == 1000,price = 5means$0.005,price = 500means$0.50, andprice = 1000means$1.00. With a 0.5 cent tick andpriceScale == 1000, valid integer prices move in 5-unit increments. - Action recommended: do not assume 1 cent ticks. Read tick size and price scale per market or instrument before validating or submitting orders.
- Markets API: market responses now document
minimumTradeQtyalongsideorderPriceMinTickSize.- Applies to
GET /v1/markets,GET /v1/market/id/{id},GET /v1/market/slug/{slug}, and documented Retail API responses that embed the market object, including Events, Search, Sports, Sports Legacy, and Subjects. minimumTradeQtyis expressed in contracts. For example,0.01means the minimum order size is 1% of a contract.orderPriceMinTickSizeis expressed in dollars. For example,0.005means half-cent ticks.
- Applies to
- Market data: order book and trade quantity fields can contain decimal contract quantities.
GET /v1/markets/{slug}/bookand Markets WebSocket book levels returnqtyas a decimal string.- Markets WebSocket trade
quantity.valueis also a decimal string.
- Orders API: order
quantityfields support decimal contract quantities on partial-contract markets.- Applies to
POST /v1/orders,POST /v1/order/preview,POST /v1/order/{orderId}/modify,POST /v1/orders/batched, andPOST /v1/orders/batched/modify. - Order request and response
quantity,cumQuantity, andleavesQuantityfields are JSON numbers and can contain decimals. - Private WebSocket order snapshots and updates use the same order quantity fields; execution
lastSharesis a decimal string. - Multi-leg execution
legPrices[].qtyis a decimal string. - Submit prices and quantities already aligned to the market’s documented precision. Extra precision can be normalized in responses rather than rejected.
- Applies to
- Portfolio API: use decimal quantity fields for positions and trades.
GET /v1/portfolio/positionsreturnsnetPositionDecimal,qtyBoughtDecimal,qtySoldDecimal,bodPositionDecimal, andqtyAvailableDecimal.GET /v1/portfolio/activitiestrade payloads returnqtyDecimal; the older tradeqtyfield is rounded and deprecated.- Private WebSocket position messages can include
netPositionDecimal,qtyBoughtDecimal,qtySoldDecimal,bodPositionDecimal, andqtyAvailableDecimal. - The older integer position fields
netPosition,qtyBought,qtySold,bodPosition, andqtyAvailableremain for backward compatibility but are rounded and deprecated for partial-contract markets.availablePositionsis also deprecated.
- Action recommended: regenerate clients from the updated OpenAPI schemas and read quantity/tick constraints from each market before submitting orders. Do not assume whole-contract quantities or 1-cent price ticks, and do not rely on server-side rejection for extra decimal precision.
- Two additive fields on the
Ordermessage:fractional_quantity_scale(field 49,int64) — the fractional quantity scale copied from the instrument at order creation time. Divide raw integer quantities (order_qty,cum_qty,leaves_qty, etc.) by this value to get the properly scaled decimal quantity.price_to_quantity_filled(field 41,map<int64, int64>) — quantity filled at each price point over the life of the order. The key is the price, the value is the quantity filled at that price.
- Where they appear: every response that returns an
Orderor anExecution(which embedsOrder), across the Institutional Trading and Report APIs and the gRPC order stream:- Trading API:
GET /v1/trading/orders/open(GetOpenOrders) and theCreateOrderSubscriptionstream (snapshot orders andupdate.executions[].order). - Report API:
POST /v1/report/orders/search(SearchOrders),GET /v1/report/orders/{order_id}(GetOrder),POST /v1/report/executions/search(SearchExecutions), andGET /v1/report/executions/{exec_id}(GetExecution).
- Trading API:
- Backward compatible: both fields are additive. Existing clients are unaffected; unset values decode as the proto defaults (
0and an empty map). - Action recommended: rebuild your gRPC clients from the latest proto bundle to pick up the new fields.
- Partial contracts in preprod:
aec-mlb-az-mil-2026-06-15is open in preprod as a dummy partial contract instrument.- Read
instrument.fractionalQtyScaleto determine how submitted integer order quantities are scaled. For example, ifinstrument.fractionalQtyScale == 100, submittingquantity = 1means 0.01 contracts,quantity = 50means 0.50 contracts, andquantity = 100means 1 full contract. - Read
instrument.minimumTradeQtyfor the lowest scaled integer quantity that can be traded. For example, ifinstrument.minimumTradeQty == 1andinstrument.fractionalQtyScale == 100, the minimum valid order quantity is1, which represents 0.01 contracts, or 1% of a contract. - Initial partial contract instruments will have
instrument.fractionalQtyScale == 100andinstrument.minimumTradeQty == 1, meaning the minimum order size is 1% of a contract.
- Read
- Decimalization in preprod: dummy instruments are open in preprod for smaller tick-size handling:
aec-nba-mil-was-2026-06-15has a 0.5c tick size.aec-nhl-edm-ana-2026-06-15has a 0.25c tick size.- Read
instrument.priceScaleto determine how submitted integer order prices are scaled. For example, ifinstrument.priceScale == 1000, submittingprice = 5means $0.005,price = 500means $0.50, andprice = 1000means $1.00. - Read
instrument.tickSizefor the tick size in dollars. For example, a 0.5c tick size is expressed asinstrument.tickSize = 0.005, and a 0.25c tick size is expressed asinstrument.tickSize = 0.0025.
- Action recommended: read these values from the instrument before submitting orders. Do not infer quantity scale, price scale, or tick size from symbol, product category, or market type.
- New ledger endpoints for reconciliation, point-in-time replay, and end-of-day reporting:
- Position ledger (REST):
GET /v1/positions/ledger,GET /v1/positions/ledger/download— paginated query + streamed CSV of position changes (with both deltas and post-change cumulative state). See Position Ledger. - Balance ledger (REST):
GET /v1/funding/balance-ledger,GET /v1/funding/balance-ledger/download— paginated query + streamed CSV of cash balance changes (deposits, withdrawals, fills, fees, corrections). See Balance Ledger. - Balance ledger (gRPC):
CreateBalanceLedgerSubscriptionfor real-time push of balance ledger entries. See Balance Ledger Stream. - All three are scoped under
read:positions. Both ledgers enforce a hard historical floor of2026-05-01T00:00:00Z; pre-floor entries are not retrievable.
- Position ledger (REST):
InstrumentStatsadditions on the market data stream andGetOrderBook/GetBBOresponses:last_trade_qty(field 14,optional int64) — quantity of the most recent trade. Populated after any trade executes on the instrument.settlement_set_time(field 15,optional google.protobuf.Timestamp) — timestamp when the settlement price was set. Populated only when the instrument is in a settled state.
- New
KeepAliveCommandonBiDirectionalStreamMarketDataRequest(fieldkeepalive = 7). Sending one puts a client-to-server frame on the wire without modifying subscription state; the server returns no response. Solves the AWS Application Load Balancer 1-hour idle timeout (RST_STREAM) for long-lived bidirectional subscriptions with no client-to-server traffic. Recommended cadence: every 30–60 minutes (well below the 3600s ALB timeout). Only applies toBiDirectionalStreamMarketData; server-streamingCreateMarketDataSubscriptionis not affected. - Stream limits relaxed: the per-firm cap is now 20 concurrent streams with no per-stream-type restrictions. Previously, some stream types had individual caps; now the 20-stream budget is pooled across all gRPC subscriptions.
- Action recommended: rebuild your gRPC clients from the latest proto bundle to pick up the new endpoints and additive fields above.
- Portfolio Activities API: added two activity types now returned by
GET /v1/portfolio/activities:ACTIVITY_TYPE_TAKER_FEE_REBATE— taker fee rebate credit. Previously surfaced underACTIVITY_TYPE_REFERRAL_BONUS.ACTIVITY_TYPE_LIQUIDITY_PROGRAM— liquidity program payout. Previously surfaced underACTIVITY_TYPE_TRANSFER.
- Both carry an
accountBalanceChangepayload identical in shape to other balance-change activities. - Clients that have not regenerated against the updated OpenAPI schema will decode the new values as unknown enum members. Regenerate to surface the proper label.
- Volume Incentive Program is now live: Program status moved from coming soon to open, with rewards based on share of eligible taker-side notional volume.
- Increase / new reward launch: Added NBA Playoffs Moneyline Volume Rewards with a $100,000 in-game reward pool per market (live May 21, 2026).
- Volume eligibility details: only trades executed between $0.03 and $0.97 count; minimum $500 notional required to qualify for payout.
- Reduction — MLB Futures: reduced from $5,000/day (pooled across instruments) to $1,000/day.
- Reduction — IPL Games: reduced from $40,000/game to $20,000/game; moneyline split updated to $500 / $1,500 / $18,000 (Early / Day-of / Live).
- Reduction — Politics events: reduced from $5,000/day to $1,000/day.
- NBA Props (production): Basketball player props and first half markets are going live in production the morning of May 22, 2026. The
market_sport_typeenums previously released to preprod will be active in production:basketball_player_pointsbasketball_player_assistsbasketball_team_first_half_winnerbasketball_team_first_half_spreadbasketball_team_first_half_total
- Tick size — always read from the instrument, not the contract type: Do not assume that every instrument under a given contract type shares the same minimum price increment. Notably, upcoming World Cup futures are Title Event Contracts (TEC) but will not be decimalized, so they will not share a tick size with existing TEC futures. Pull the tick from the instrument before submitting any order.
- Retail API — read
market.orderPriceMinTickSizefromGET /v1/market/slug/{slug}. - Institutional API — read
instrument.tickSizefrom the instrument reference data response (SearchInstruments/GetInstrument).
- Retail API — read
- Retail API: Removing usernames from trade tape responses
- NBA Props (preprod): Added the following enums to the instrument
market_sport_typefield:basketball_player_pointsbasketball_player_assistsbasketball_team_first_half_winnerbasketball_team_first_half_spreadbasketball_team_first_half_total
- Execution responses: Now exposing commission and trade date fields on all execution-level responses:
commissionNotionalCollected- Commission amount collectedcommissionSpreadPx- Commission spread pricetransactTradeDate- Trade transaction date
- Applies to: SearchExecutions, DownloadExecutions, and CreateOrderSubscription execution updates
- Retail Orders API: documented three batched endpoints:
POST /v1/orders/batched,/v1/orders/batched/cancel,/v1/orders/batched/modify. The first two were already shipped; the third is new. - Retail Orders API: documented
outcomeSide+actionas an alternative tointentonCreateOrderRequest, and added both fields to theOrderresponse.intentis no longer markedrequiredonCreateOrderRequest. Existing requests that sendintentkeep working; regenerated clients will see it flip from required to optional. - Retail Orders API: added enum members that were already on the wire but missing from the schema:
TIME_IN_FORCE_DAY,ORDER_STATE_NEW,EXECUTION_TYPE_NEW,ORD_REJECT_REASON_EXCHANGE_OPTION.
- Corrected production gRPC endpoint from
grpc-api.polymarketexchange.comtogrpc-api.prod.polymarketexchange.com
- Weekly maintenance window moved from Tuesday 4am–6am ET to Thursday 6am–8am ET, effective April 16, 2026
- Updated rate limits across all APIs:
- Institutional Gateway (REST/gRPC): reduced to 100 messages per second per firm
- FIX Protocol: reduced to 150 messages per second per session (all participants)
- Retail API: reduced to 20 requests per second per API key
- FIX API:
Productfield (tag 460) changed from required to optional on New Order Single. All current products on Polymarket areProduct=12(OTHER). - Corrected REST API routes:
/v1/accounts/whoami→/v1/whoami,/v1/accounts/users→/v1/users,/v1/accounts/accounts→/v1/accounts - Fixed price scale examples across documentation to reflect correct values
- Corrected production API base URLs to
api.prod.polymarketexchange.comacross all documentation
- Edited proto files to improve the gRPC streaming experience
statefield changed from required to optional in three messages:MarketDataUpdate.state(field 4) inmarketdatasubscription.protoGetOrderBookResponse.state(field 4) inorderbook.protoGetBBOResponse.state(field 6) inorderbook.proto
- Participants should utilize the instrument state change subscription for state changes
- Updated settlement responses in
marketdatasubscription, addingsettlement_price_calculation_text - Added
price_scaleto order message
- Added Bidirectional Market Data Streaming API:
BiDirectionalStreamMarketDataRPC - Dynamically add and remove symbols during subscription lifetime without reconnecting
- New response types:
SubscriptionAckandSubscriptionErrorfor subscription management - Updated client sample code with new Go and Python examples (Example 20)
- Updated proto packages with bidirectional streaming support
- Added Account Valuation APIs for book-close accounting use cases
POST /v1/valuations/accounts/statement/download: Multi-account summaries as CSV- All new endpoints support historical queries via
as_of_timeoras_of_date - Cross-ISV protection enforced on all valuation endpoints
- Documented configurable instrument queries: pagination, state filtering, and metadata filters
- Added sports league filtering via
metadata.sports_game_league(nfl, nba, mlb, nhl, cbb, cfb) - Added instrument metadata field documentation with sports-specific attributes
- Added Historical Positions API: query positions at any point in time using
as_of_time(RFC3339 timestamp) oras_of_date(trade date) - Use cases: end-of-day reporting, regulatory snapshots, position reconciliation
- Documentation deployment refresh
- Added slow consumer handling option for streaming endpoints with skip-to-head behavior
- Proto files now available for direct download (polymarket-protos.zip)
- Added FAQ clarifying ISV-Participant relationship and participant_id usage
- Added 25 REST API endpoints with full OpenAPI documentation
- New sections: Authentication, Accounts, Orders, Positions, Market Data, Drop Copy
- Organized API documentation by functional category
- Added complete gRPC streaming API documentation with Python code examples for market data and order execution streams
- Introduced Protocol Buffer reference documentation with detailed message structures and field definitions
- Added VPC connection setup guide with AWS PrivateLink configuration instructions
- Created common pitfalls troubleshooting guide for integration issues
- Aesthetic changes including new figures and cleaner formatting of FIX examples.
- First DRAFT of Polymarket Exchange Documentation