Tournament catalogue — the id space `Match.tournament_id` joins (FREE)
Stable tournament identity, one row per tournament × event type, stable across seasons. city/country come from a curated table and category only where our catalogues agree unambiguously on an exact-name join — each is null otherwise, never derived from the tournament name. Each row also carries the CURRENT season's tier / tier_source (added 2026-09-22) — the level in a closed vocabulary (atp_500, challenger_125, wta_125, itf_w35 … | null); the tier is per season, so a match carries its own.
Request
- Base URL: https://api.livetennisapi.com/api/public/v1
- URL: https://api.livetennisapi.com/api/public/v1/tournaments
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Query parameters
Case-insensitive substring match on the tournament name.
Restrict results to one tour. Each value covers its singles and doubles draws, so atp includes ATP doubles and juniors covers the boys' and girls' Grand Slam draws. Omit for all tours. An unrecognised value is a 400 rather than a silent pass-through, so a caller never receives a tour it did not ask for. Applied before pagination, so meta.count reflects the filtered set.
Draw filter (added 2026-08-18) — the axis the tour filter deliberately collapses; the two compose (?tour=itf&draw=doubles is the ITF doubles slice). Same vocabulary as the draw field on Match, decided by the same shared definition, so filter and field cannot disagree. A row whose draw is null — a team tie, or no stated event type and no doubles-team participant — matches NEITHER value: null is an answer, not a wildcard. Two honesty notes: on /tournaments the answer comes from the event type alone (a tournament row has no participants to supply the doubles-team evidence matches have), and draw=doubles alone also returns mixed and exhibition doubles that no tour value reaches. An unknown value is a 400 bad_draw with the allowed values.
Tier filter (added 2026-09-24): comma-separated exact values from the same closed tier vocabulary as Match.tier (?tier=atp_500, ?tier=atp_500,challenger_100). Selects tournaments whose own tier field carries one of the values, which on this resource is the current season's level, because a catalogue row has no season of its own. That is the one difference from ?tier= on /matches and /history/matches, where the value is the level in each MATCH'S season (a tournament keeps one tournament_id while its level moves). Filter and field always read the same season on the same resource, so they cannot disagree. A tournament with no row for the current season matches no value: null means the level is unknown, not absent. Composes with ?tour=, ?draw= and ?search=. Unknown value → 400 bad_tier with the offending values in bad and the full vocabulary in allowed.
Response
Tournaments, name order
Changes
No recorded changes to this operation across all 1 revision of this API.