/api/v1/competitionsPaginated list of competitions. Organiser drafts are never returned.
searchstringSearches name, city, country, venue and description. At least 2 characters.
Example:
search=kyiv opencountrystringCountry name or ISO 3166-1 alpha-2 code.
Example:
country=UAcountryIdintegerInternal country id, see /filters.
Example:
countryId=804citystringCity name, case-insensitive prefix match.
Example:
city=Kyivstatusopen | completedCompetition status. Several values, comma-separated.
Example:
status=opentypestringCompetition rank, by code. Several values, comma-separated; see /filters for the current list.
Example:
type=ranking_tournamentregistrationStatusopen | closedRegistration state as set by the organiser.
Example:
registrationStatus=openregistrationOpenbooleantrue keeps only competitions accepting entries right now — the same thing as registration.state == "open". Both the opening day and the deadline day count as open.
Example:
registrationOpen=trueperiodupcoming | ongoing | pastPeriod by calendar day. A competition running today is ongoing for the whole day.
Example:
period=upcomingdateFromdateCalendar day, inclusive. Keeps competitions overlapping the range.
Example:
dateFrom=2026-09-01dateTodateCalendar day, inclusive. Keeps competitions overlapping the range.
Example:
dateTo=2026-12-31updatedSincedate-timeOnly competitions changed after this timestamp. For incremental sync; these responses are never cached.
Example:
updatedSince=2026-07-01T00:00:00Zincludecategories, entriesCountExtra data in the response. Several values, comma-separated.
Example:
include=categoriessortstartDate | endDate | name | createdAt | updatedAtField to sort by.
Example:
sort=startDateorderasc | descSort direction.
Example:
order=ascpageintegerPage number, starting at 1.
Example:
page=1limitinteger, 1-100Items per page, 1 to 100. Anything outside the range is a 400, not a silent trim.
Example:
limit=20