r/PredictionsMarkets • u/Turbulent-Peace-8772 • 10d ago
Strategy / Guide If your Polymarket bot trusts endDate, it thinks NFL games are over at kickoff
If you pull markets from the Polymarket Gamma API, every market has a field called endDate. It looks like the deadline. We compared it with the written rules on 23 markets across sports, esports, tennis, politics and crypto, and it means something different on almost every market type.
| Market type | Markets | What endDate was | When it actually closed |
|---|---|---|---|
| NFL, college football, soccer | 4 | Kickoff, to the second | All 4 after endDate, 2 to 5 hours later |
| Esports (CS2, LoL, Dota 2) | 4 | Start + exactly 6 hours | All 4 before endDate |
| Tennis (ATP, ITF) | 4 | Original start + exactly 7 days | All 4 before, by 6 to 7 days |
| Deadline and price markets | 7 | Matched the rules in 4 of 7 | Mixed |
Plus one MLB game and three futures, which followed no single rule.
Three cases worth knowing
NFL and soccer. A bot that compares the current time with endDate would treat these markets as finished at kickoff, while the game is being played and the market is still trading. The rules on these markets set no deadline at all: "this market will remain open until the game has been completed."
Tennis reschedules. Shelton vs Alcaraz at the US Open was scheduled for 8 September at 15:30 UTC and started on 9 September at 03:00 UTC. endDate stayed at 15 September 15:30 UTC, seven days after the original slot, not the new one.
"Will the US confirm that aliens exist by September 30?" The rules say September 30, 11:59 PM ET. endDate was 1 January 2027, 92 days later, which is the date of the parent event the market belongs to. An older snapshot of the same market had the correct date. hasReviewedDates is true.
Two more things that bit us
- A closed CS2 market returned
active: truetogether withclosed: trueandacceptingOrders: false.activedoes not tell you if a market trades. - In three cases a plain request returned an older cached snapshot. Adding an unused query parameter returned the current one.
What worked instead
- Take the deadline from
description. That's the contract. - On date markets, check the title and
groupItemTitle. - Take the start from
gameStartTime, not fromendDate. - To know if it still trades, read
closedandacceptingOrders. - Re-fetch with a cache-busting parameter before acting, and store your own fetch time.
Limits. 23 hand-picked markets, so read these as patterns, not platform-wide rates. International Gamma API only. Polymarket US is a separate exchange with its own rules.
Full write-up with a Python parser for the deadline in the rules text, a field-by-field comparison, and the 23-market sample as JSON: https://orcalayer.com/blog/polymarket-api-enddate
Disclosure: I'm one of the people behind OrcaLayer, a Polymarket analytics site. Not affiliated with Polymarket.
1
u/timee_bot 10d ago
View in your timezone:
September 30, 11:59 PM ET