CS2 data reference

Map vetoes

The pick/ban sequence, including the decider that no team chose.

GET /v1/{game}/matches/{id}/vetoes returns the map pool negotiation in order, one row per step.

Vetoes are known before play starts, so this is often populated on a scheduled match while every other sub-resource is still empty.

The steps

order is 1-based and rows come back in it. choice_type is one of:

ValueMeaningteam_id
banA team removed this map from the poolThe team that banned
pickA team chose this map to be playedThe team that picked
deciderThe map left over once vetoing finishednull

A decider has no acting team, so team_id is null there. Code that assumes every veto row has a team will fail on the last step of most series.

Reading a sequence

vetoes = get(f"/v1/cs2/matches/{match_id}/vetoes")["data"]

for v in vetoes:
    who = v["team_id"] or "—"
    print(f"{v['order']}. {v['choice_type']:8} {v['map_name']:14} {who}")

A typical bo3: ban, ban, pick, pick, ban, ban, decider.

What it tells you

The veto is a statement of preference under pressure: which maps a team is willing to spend a ban on, and which they'll pick when it counts. Cross-referenced with per-map records it shows whether a team's stated preferences match their actual results — the two diverge more often than you'd expect.

map_name uses the same Valve identifiers as map results, so the two join directly.

On this page