Core concepts

IDs, slugs and time

UUIDv7 identifiers, human-readable slugs, and the timestamp formats the API uses.

Identifiers

Every resource id is a UUIDv7 — canonical, 36 characters, lowercase and hyphenated:

019f3d18-c15f-7319-81a7-343e8a80a578

UUIDv7 embeds a millisecond timestamp in its leading bits, so ids sort roughly by creation time. That is an implementation detail, not a contract: don't parse a timestamp out of an id or infer ordering from one. It does mean ids from the same era share a visible prefix (019f…), which is a handy sanity check that you're looking at our data.

Ids are validated by format, not by version — a v4 UUID is accepted as well-formed and then simply matches nothing.

Slugs

Teams, players and tournaments also have a slug: lowercase, hyphenated, unique within the game.

natus-vincere      s1mple      pgl-major-singapore-2026

A slug works anywhere a path id does, so you can address a resource straight from a name you already have. Matches have no slug.

Slugs are stable but not guaranteed permanent — an organisation rename can change one. If you're storing a reference for the long term, store the UUID and treat the slug as a display convenience.

Timestamps

Every timestamp is RFC 3339 in UTC, with a trailing Z:

{ "scheduled_at": "2026-07-04T15:36:36.403882Z" }

Sub-second precision appears where the source has it (odds captures) and is absent where it doesn't (scheduled fixtures). Parse with a standard RFC 3339 parser rather than a fixed-width format string — time.Parse(time.RFC3339, …), datetime.fromisoformat(…), new Date(…) all handle both.

There is no timezone parameter. Everything is UTC; convert at the display layer.

Date-only parameters

Filters that take a day rather than an instant use YYYY-MM-DD:

?date_from=2026-07-01&date_to=2026-07-31

Both bounds are inclusive of the entire day in UTC. X-Quota-Reset is the one header that carries a full RFC 3339 instant rather than a date.

Nulls

A nullable field is null, never omitted and never an empty string — except where the API deliberately uses "" for "no value on file" (short_name, real_name, nationality). Arrays are [] rather than null when empty. So null always means "no value", and you never have to distinguish "absent" from "explicitly nothing".

On this page