API reference
Teams
Team endpoints mirror the Discord signup button: the same verification, capacity, and waitlist rules apply — with an optional force flag for admin overrides.
All paths are relative to https://api.zyron.pro/api/v1/guilds/:guildId/sessions/:tournamentId. Create the tournament first — see Sessions.
List teams
/guilds/:guildId/sessions/:tournamentId/teamsReturns every team in the tournament, including waitlisted and withdrawn teams (see status).
[
{
"teamId": "tm_51fe09c2",
"name": "Alpha Wolves",
"color": "#E91E63",
"status": "active",
"captainDiscordId": "222222222222222222",
"memberDiscordIds": ["222222222222222222", "555555555555555555"],
"registeredAt": "2026-07-12T14:03:55.000Z"
},
{
"teamId": "tm_82ab77d0",
"name": "Bravo",
"color": null,
"status": "waitlisted",
"captainDiscordId": "999999999999999999",
"memberDiscordIds": ["999999999999999999"],
"registeredAt": "2026-07-12T14:10:41.000Z"
}
]Register a team
/guilds/:guildId/sessions/:tournamentId/teamsRegisters a team exactly like the Discord signup button: every member needs a verified Epic link (unless the session allows unverified players), capacity and the waitlist are honored, and the team.registered webhook fires. Returns 201 Created with the team.
| Field | Type | Description |
|---|---|---|
captainDiscordIdrequired | string | The team captain. |
memberDiscordIds | string[] | Remaining members. Total size must fit the session's team format. |
name | string | Team name; a default is generated if omitted. |
force | boolean | true skips the open-registration and access-role gates — for admin tooling. Verification and duplicate checks still apply. |
curl -X POST https://api.zyron.pro/api/v1/guilds/123456789012345678/sessions/t_7d31e0aa9c/teams \
-H "Authorization: Bearer zyr_your_guild_key" \
-H "Content-Type: application/json" \
-d '{
"captainDiscordId": "222222222222222222",
"memberDiscordIds": ["555555555555555555"],
"name": "Alpha Wolves"
}'Same rules as the button
409 conflict means a listed member is already on a team in this tournament. If the lobby is full and the waitlist is enabled, the team is created with status: "waitlisted" instead of being rejected.Update a team
/guilds/:guildId/sessions/:tournamentId/teams/:teamId| Field | Type | Description |
|---|---|---|
name | string | Rename the team. |
color | string | Team color in #RRGGBB format (used on the leaderboard and dropmap). |
forceActivate | boolean | true promotes a waitlisted team to active, bypassing the capacity check. |
Kick a team
/guilds/:guildId/sessions/:tournamentId/teams/:teamIdRemoves the team from the tournament. If the waitlist has teams, the first one is promoted automatically (firing team.promoted); the kicked team gets team.kicked. See the event catalog.
Errors
400 invalid_request for a wrong team size or malformed color; 404 not_found for an unknown tournament or team; 409 conflict for duplicate signups. See Errors.