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:

  • name
  • competition_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 of league, cup, tournament, friendly, combined_stage, playoff, championship, fight_card, race, race_series or race_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_date
  • default_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_match or last_match (default start).
  • auto_advance_seconds — seconds before advancing automatically (default 7200, i.e. 2 hours).

Lifecycle and publishing

  • lifecycle_statedraft (default), active, completed or archived.
  • 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.