Skip to main content
Team management encompasses handling team registrations, user accounts, participation approvals, and division assignments.

Team Overview

Teams are groups of users collaborating in CTF competitions. Each team can participate in multiple games.
Teams can have 1 to N members depending on game settings. A team with one member is essentially a solo player.

Viewing Teams

1

Access Team Management

Navigate to Admin PanelTeams
2

Browse Team List

View paginated list of all teams with:
  • Team name
  • Captain information
  • Member count
  • Organization/affiliation
3

Search Teams

Use the search function to find teams by:
  • Team name
  • Member names
  • Email addresses
GET /api/admin/teams?count=100&skip=0

// Response
{
  "data": [
    {
      "id": 1,
      "name": "TeamName",
      "captain": {
        "id": "user-guid",
        "userName": "captain_user"
      },
      "members": [...],
      "organization": "University"
    }
  ],
  "total": 150
}

Editing Team Information

Admins can modify team properties:
Name
string
Team display name
Bio
string
Team biography or description
Organization
string
Affiliated organization, school, or company
Locked
boolean
Lock team to prevent members from joining/leaving during competition
1

Select Team

Click on team name in the team list
2

Edit Properties

Modify team information as needed
3

Save Changes

Changes apply immediately
PUT /api/admin/teams/{id}

{
  "name": "Updated Team Name",
  "bio": "We are awesome",
  "organization": "GZCTF University",
  "locked": false
}

User Management

Viewing Users

Access complete user directory:
1

Navigate to Users

Go to Admin PanelUsers
2

Browse User List

View all registered users with:
  • Username
  • Email
  • Real name
  • Registration date
  • Role (User/Monitor/Admin)

User Roles

User

Standard participant with access to:
  • Game participation
  • Challenge solving
  • Team creation/joining

Monitor

Observer role with access to:
  • Real-time event monitoring
  • Submission viewing
  • Scoreboard insights
  • No management capabilities

Admin

Full platform control:
  • Game creation
  • Challenge management
  • User/team management
  • System configuration

Editing User Information

UserName
string
Unique username (used for login)
Email
string
User email address (must be unique)
RealName
string
User’s full name
StdNumber
string
Student ID or employee number
PhoneNumber
string
Contact phone number
EmailConfirmed
boolean
Mark email as verified
Role
enum
User role: User, Monitor, or Admin
PUT /api/admin/users/{userId}

{
  "userName": "new_username",
  "email": "[email protected]",
  "realName": "John Doe",
  "stdNumber": "2024001",
  "phoneNumber": "+1234567890",
  "emailConfirmed": true,
  "role": "User"
}

Batch User Creation

Create multiple users at once:
1

Prepare User Data

Format user list as JSON array:
[
  {
    "userName": "user1",
    "password": "SecurePass123!",
    "email": "[email protected]",
    "realName": "User One",
    "teamName": "Team Alpha"
  },
  {
    "userName": "user2",
    "password": "SecurePass456!",
    "email": "[email protected]",
    "realName": "User Two",
    "teamName": "Team Alpha"
  }
]
2

Submit Batch

POST /api/admin/users

// System creates users and teams automatically
// Users with same teamName join same team
Batch creation automatically handles:
  • User account creation
  • Team creation (if new)
  • Team membership assignment
  • Duplicate detection

User Actions

DELETE /api/admin/users/{userId}/password

// Returns new temporary password
// User should change on next login
Permanently remove user account.
Cannot delete:
  • Your own admin account
  • Team captains (transfer captaincy first)
DELETE /api/admin/users/{userId}
Find users by partial match on:
  • Username
  • Email
  • Real name
  • Phone number
  • Student number
POST /api/admin/users/search?hint=john

Participation Management

Participations represent team registrations for specific games.

Participation Status

Pending

Awaiting admin approval

Accepted

Approved to participate

Rejected

Registration denied

Suspended

Temporarily banned from game

Unsubmitted

Incomplete registration

Approving Registrations

1

View Pending Registrations

Navigate to game → Participants → filter by status Pending
2

Review Application

Check team:
  • Eligibility
  • Division selection
  • Team composition
3

Approve or Reject

Update participation status:
PUT /api/admin/participation/{id}

{
  "status": "Accepted",
  "divisionId": 2  // Optional: assign division
}
If game has AcceptWithoutReview enabled, teams are automatically accepted.

Managing Participations

Status
enum
Change participation status:
  • PendingAccepted: Approve registration
  • AcceptedSuspended: Temporarily ban team
  • SuspendedAccepted: Reinstate team
  • Any → Rejected: Deny access
DivisionId
integer
Assign or change team’s division
Changing participation status affects:
  • Team’s ability to access challenges
  • Scoreboard visibility
  • Container allocations (destroyed on suspension/rejection)

Suspending Teams

Temporarily ban teams for violations:
1

Identify Violation

Use monitoring tools to detect:
  • Flag sharing
  • Automated attacks
  • Rule violations
2

Suspend Participation

Change status to Suspended:
PUT /api/admin/participation/{id}

{
  "status": "Suspended"
}
3

Document Reason

Keep internal records of suspension reasons for appeals
Suspended teams:
  • Cannot access challenges
  • Are hidden from scoreboard
  • Have all containers destroyed
  • Can be reinstated by changing status back to Accepted

Division Management

Divisions separate competition tracks within a game.

Creating Divisions

1

Navigate to Game Divisions

Open game → SettingsDivisions
2

Add Division

POST /api/edit/games/{id}/divisions

{
  "name": "University Students",
  "description": "Open to currently enrolled university students"
}
3

Configure Division

Each division maintains separate:
  • Scoreboard
  • Rankings
  • Blood bonuses

Assigning Teams to Divisions

Two methods:
  1. Self-Selection: Teams choose division during registration
  2. Admin Assignment: Admins override division via participation management
PUT /api/admin/participation/{id}

{
  "divisionId": 3
}

// Moves team to division #3

Managing Divisions

PUT /api/edit/games/{id}/divisions/{divisionId}

{
  "name": "Updated Name",
  "description": "Updated description"
}
Remove division (teams move to default/no division):
DELETE /api/edit/games/{id}/divisions/{divisionId}
Each division has isolated scoreboard accessible via game interface
Deleting a division doesn’t delete teams or participations—it just removes the division grouping.

Team Actions

Deleting Teams

Permanently remove team:
This action:
  • Deletes team and all participations
  • Removes team members’ associations
  • Does NOT delete user accounts
  • Cannot be undone
DELETE /api/admin/teams/{id}

// Team members become team-less users
// Can join or create new teams

Locking Teams

Prevent roster changes during competition:
Locked
boolean
When locked, teams cannot:
  • Add new members
  • Remove members
  • Change captain
Lock teams after registration closes to prevent mid-competition roster manipulation.

Writeup Management

If game requires writeups:
1

View Submissions

GET /api/admin/writeups/{gameId}

// Returns list of all writeup submissions
2

Download All Writeups

GET /api/admin/writeups/{gameId}/all

// Downloads ZIP archive of all writeups
3

Review Content

Evaluate writeup quality before making public
Writeups are stored as uploaded (PDF/Markdown) and can be bulk downloaded for archival or judging.

Best Practices

Pre-Approve Teams

For better experience:
  • Enable AcceptWithoutReview for public games
  • Manually review only for private/serious competitions

Monitor Registrations

Regularly check:
  • Pending approvals
  • Team sizes vs limits
  • Division distribution

Document Decisions

Keep records of:
  • Suspension reasons
  • Division overrides
  • Special accommodations

Lock Before Start

Lock team rosters before game starts to prevent:
  • Mid-game team hopping
  • Circumventing suspensions
  • Roster manipulation

Common Issues

Check:
  • Team size doesn’t exceed game limit
  • All members have verified emails (if required)
  • Correct invitation code (if required)
  • Game registration is open
Ensure:
  • Team has no active participations (remove them first)
  • You’re not deleting your own team while admin
Verify:
  • User is not you (can’t delete yourself)
  • User is not a team captain (transfer captaincy first)
Try:
  • Flush scoreboard cache
  • Verify participation status is Accepted
  • Refresh page

API Reference

  • GET /api/admin/teams - List all teams
  • POST /api/admin/teams/search - Search teams
  • PUT /api/admin/teams/{id} - Update team
  • DELETE /api/admin/teams/{id} - Delete team
  • GET /api/admin/users - List all users
  • POST /api/admin/users - Batch create users
  • POST /api/admin/users/search - Search users
  • GET /api/admin/users/{id} - Get user details
  • PUT /api/admin/users/{id} - Update user
  • DELETE /api/admin/users/{id} - Delete user
  • DELETE /api/admin/users/{id}/password - Reset password
  • PUT /api/admin/participation/{id} - Update participation
  • GET /api/admin/writeups/{gameId} - Get writeups
  • GET /api/admin/writeups/{gameId}/all - Download all writeups

Next Steps

Monitoring

Monitor competition in real-time

Configuration

Configure platform settings

Build docs developers (and LLMs) love