---
title: "Esports Dots History"
method: GET
path: "/api/v2/esports/match/{slug}/dots"
---

# Esports Dots History

`GET /api/v2/esports/match/{slug}/dots`

## Request

- Base URL: `https://orcalayer.com` (the document declares no server; this is the origin it was published from)
- URL: `https://orcalayer.com/api/v2/esports/match/{slug}/dots`
- Auth: none declared

The last `window` seconds of a match's fills as canvas dots (same schema as the live
`dots` stream: [t_ms, market_id, price_bp, usd_cents, side_yes, significant, mask, taker, name]). Public;
used to freeze the cockpit at the end of a finished match (QA 05.09, blocker 1).
`to` = the match's last fill (or now for a live one).

The ceiling was 1800 until 15.09.2026, and the cockpit asks for 6h (`Cockpit.tsx`, the
one lazy whole-match pull that looks for the biggest fills when the 4-minute window holds
nothing of size). So every one of those calls answered 422, the component never set its
state, and `live.tick` re-fired the effect every 5 seconds for the length of the match:
613 refusals in the week 07-13.09, 180 more on 15.09 alone, all on live matches, all with
our own match page as the referer. Measured before raising it: a 6h window on a live CS2
match is 2,556 fills, and the endpoint answers the largest allowed window in 0.26s / 21KB.
12 x 1800 = 6h exactly, which is the longest a BO5 plus its pre-match trading runs.

## Path parameters

- `slug` string, required

## Query parameters

- `window` integer
- `market` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/orcalayer/apis/orcalayer-api.md) · [All operations](https://skmtc.dev/orcalayer/apis/orcalayer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/orcalayer/apis/orcalayer-api/revisions/5d1d509daba6?raw)
