Competitions, Seasons & Projects
Competition
A competition is the general, ongoing thing you're organising — "National
Cup", "Regional League" — independent of any particular year. Besides
name (required), a competition can carry an alias, middle_name,
short_name, code, external_code, an organisation name, a
country_code, and a full description. A competition holds no matches or
teams itself — it's a label that projects (below) attach to.
Season
A season is a time period — "2025/2026". It only has a name (required),
alias and description. Like a competition, a season doesn't hold data
directly; projects attach to it.
Project
A project is a competition actually run in a season — this is the entity that holds clubs/teams, stages, rounds and matches. A competition can have many projects over time, one per season it's run in.
Creating a project requires:
namecompetition_id— which competition this project belongs to (a dropdown of published competitions).season_id— which season it's run in (published seasons).sport_type_id— which sport type it uses. Only sport types that already have a profile version assigned are offered.project_type— one ofleague,cup,tournament,friendly,combined_stage,playoff,championship,fight_card,race,race_seriesorrace_weekend. Not every type is valid for every sport — the project type you pick must be in the list of project types the chosen sport type's profile supports, or saving fails with an error naming the sport type.
profile_version_id is not a field you set directly — it's copied
automatically from the selected sport type's own profile version when the
project is saved.
Schedule fields
timezone— defaults to the installation's default timezone if left unset.start_date/end_datedefault_start_time— the default kickoff time used when scheduling matches. If you leave it blank, it's filled in automatically from the sport profile's own default start time, when the profile defines one.
Automation fields
current_round_mode— how the "current round" is determined:manual,start,end,first_matchorlast_match(defaultstart).auto_advance_seconds— seconds before advancing automatically (default7200, i.e. 2 hours).
Lifecycle and publishing
lifecycle_state—draft(default),active,completedorarchived.published— unlike competitions and seasons, new projects default to unpublished.picture— an optional image for the project.- Projects also have their own permissions (
rules) tab, so access can be scoped per project in addition to the component-wide ACL.