Raw schema
{
"type": "object",
"properties": {
"sport": {
"type": "string",
"enum": [
"tennis",
"padel",
"pickleball",
"badminton",
"squash",
"table_tennis"
]
},
"format": {
"description": "Tournament format. round_robin: everyone plays everyone. groups_playoff: round-robin groups then a knockout. single_elimination: knockout with byes. americano/mexicano: rotating-partner doubles, points per round (mexicano pairs each round from standings). OMIT when the organiser hasn't clearly chosen โ the call then returns a menu of explained options to show them instead of creating anything.",
"type": "string",
"enum": [
"round_robin",
"groups_playoff",
"single_elimination",
"americano",
"mexicano"
]
},
"name": {
"description": "Defaults to '<Sport> tournament <date>'",
"type": "string",
"maxLength": 120
},
"discipline": {
"description": "Default singles; americano/mexicano are always doubles",
"type": "string",
"enum": [
"singles",
"doubles"
]
},
"players": {
"maxItems": 128,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"gender": {
"type": "string",
"enum": [
"m",
"f",
"x"
]
},
"level": {
"type": "number",
"minimum": -10000,
"maximum": 10000,
"description": "Any consistent numeric level/rating โ used only for seeding and balancing"
}
},
"required": [
"name"
]
}
},
"pairs": {
"description": "Doubles: fixed pairs as [name, name] arrays. Omit to auto-pair.",
"type": "array",
"items": {
"minItems": 2,
"maxItems": 2,
"type": "array",
"items": {
"type": "string"
}
}
},
"courts": {
"description": "Default 2",
"type": "integer",
"minimum": 1,
"maximum": 16
},
"court_names": {
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"maxLength": 60
}
},
"start_time": {
"description": "ISO datetime with offset, e.g. 2026-08-01T18:00:00+03:00. Must be within 365 days from today.",
"type": "string"
},
"match_duration_minutes": {
"type": "integer",
"minimum": 5,
"maximum": 240
},
"break_minutes": {
"description": "Changeover between matches/rounds, shown separately from play time (default 0)",
"type": "integer",
"minimum": 0,
"maximum": 60
},
"page_results_entry": {
"description": "Allow anyone with the page link to enter scores courtside. Default false; switchable any time via update_settings or the toggle on the page.",
"type": "boolean"
},
"language": {
"description": "Language of the tournament page, PDFs and player emails. Default en; set et when the organiser works in Estonian.",
"type": "string",
"enum": [
"en",
"et"
]
},
"seeding": {
"description": "Default random",
"type": "string",
"enum": [
"random",
"level"
]
},
"group_count": {
"type": "integer",
"minimum": 2,
"maximum": 8
},
"advance_per_group": {
"type": "integer",
"minimum": 1,
"maximum": 4
},
"third_place_match": {
"description": "Single elimination; default true",
"type": "boolean"
},
"points_per_match": {
"description": "Americano/mexicano; default 21",
"type": "integer",
"minimum": 4,
"maximum": 64
},
"rounds": {
"description": "Americano/mexicano; default from player count",
"type": "integer",
"minimum": 1,
"maximum": 30
},
"location": {
"description": "Venue/location shown to players on the page, e.g. club name + city",
"type": "string",
"maxLength": 160
},
"house_rules": {
"description": "Organiser's house rules, shown on the tournament page (e.g. 'Golden point at deuce')",
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"signup_open": {
"description": "Open self-signup: players add themselves on the shared page (name-only or signed in). Offer this when the organiser has no player list yet.",
"type": "boolean"
},
"signup_cap": {
"description": "Signup limit; beyond it players join a waitlist",
"type": "integer",
"minimum": 4,
"maximum": 128
}
},
"required": [
"sport"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}