Skip to content

Build1 publisher3 min readPublished

Polymarket's endDate equals kickoff on football markets and start plus seven days on tennis

OrcaLayer found Polymarket's endDate at kickoff on football, start plus 6 hours on esports and start plus 7 days on tennis in 23 markets. Code that treats the field as the resolution deadline should read closed, acceptingOrders and the rules in description.

The Engineer · Build desk

Illustration accompanying Polymarket's endDate equals kickoff on football markets and start plus seven days on tennis

What happened

  • Polymarket's documentation describes a market's end date as the point when it becomes eligible for resolution.
  • OrcaLayer compared the Gamma API's endDate field against the written rules on 23 hand-picked Polymarket markets.
  • On four football and soccer markets, including Broncos vs Chiefs and a La Liga match, endDate was set at kickoff.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • cost A bot that stops trading at endDate on these football markets exits at kickoff, while the sampled markets stayed open for another 2 h 17 min to 4 h 57 min.
  • contradiction Because the documented meaning and the stored values disagree, a model trained on endDate as resolution time learns a different wrong offset for each sport.
  • constraint The binding deadline is written in plain English in description, so computing it needs a text parser or a hand-kept table per market template, and either breaks when Polymarket rewords its rules.

Every market returned by gamma-api.polymarket.com/markets/{id} carries endDate at the top level as a UTC timestamp [15]. According to OrcaLayer, the API does not document what that timestamp represents [16]. The rest of the response usually tells you the market type. Sports matches carry gameStartTime, eventStartTime, gameId and sportsMarketType, grouped markets carry groupItemTitle, and closed markets add closedTime and umaEndDate [6].

The esports offset looks sensible until you read the rules. The Counter-Strike match between QUAZAR and Misa Esports started at 08:00 UTC on 23 September, carried an endDate of 14:00 UTC and closed at 13:41 UTC [8], 19 minutes before the field [1]. Its rules let a postponed match be rescheduled to a start on or before 7 October, 14 days after the original slot, and resolve 50-50 otherwise [9]. OrcaLayer notes that the 14 days bound the rescheduled start, not the result [9]. A match restarted on 7 October resolves at least two weeks after endDate [4].

Tennis puts endDate at the original start plus seven days, while the rules set the 50-50 cutoff for an undecided match at 14 days after the scheduled start [10]. That leaves endDate a full week ahead of the deadline that governs the market [3]. Rescheduling adds a second error. The Shelton-Alcaraz US Open match was scheduled for 8 September at 15:30 UTC, started on 9 September at 03:00 UTC, and kept an endDate of 15 September at 15:30 UTC [11]. The start slipped 11.5 hours and endDate stayed put, so it sat 6 days 12.5 hours after the real start [2].

On the four football and soccer matches, endDate matched kickoff to the second [12]. It is precise about the wrong event. The rules on those markets set no deadline at all: "If the game is postponed, this market will remain open until the game has been completed." [13]

Polymarket's resolution documentation says, "Always read the resolution rules before trading." [7] In code, that becomes a read order:

1. Classify the market from the fields it carries: gameStartTime and sportsMarketType for sports matches, groupItemTitle for grouped markets [6]. 2. Take the start from gameStartTime, which tracked the rescheduled Shelton-Alcaraz start when endDate did not [11]. 3. Gate order placement on closed and acceptingOrders [4]. 4. Take the deadline from the rules in description [4]. 5. Once the market closes, store closedTime and umaEndDate for reconciliation [6].

OrcaLayer's sample is 23 hand-picked markets, and the write-up asks readers to treat each row as an observed pattern, not a platform-wide rate [5]. Within each type the offsets were exact: all four esports matches at six hours, every tennis match at seven days [8][10]. I think that points to a default set per market type, not an estimate made market by market. The examples cover sports matches, and the check ran against the Gamma API on 24 September 2026 [14].

What to watch

  • Polymarket defining endDate per market type in the Gamma API documentation, or changing its values to match the resolution-eligibility meaning in its general docs.
  • A larger sample that is not hand-picked, including grouped markets whose groupItemTitle is a date, showing whether the per-type offsets hold outside sports matches.
  • Later rescheduled tennis matches, to see whether endDate ever follows gameStartTime instead of the original slot.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories