Overview
Challenges are the core of CTF games. This API provides endpoints for creating, updating, and managing challenges, flags, and dynamic containers.Most challenge management endpoints require Admin privileges and are part of the Edit API.
Challenge CRUD
Create Challenge
Add a new challenge to a game.POST /api/edit/games//challenges
Game ID
Challenge title
Challenge type:
StaticAttachment, StaticContainer, DynamicAttachment, DynamicContainerChallenge category (e.g., Web, Crypto, Pwn, Reverse, Misc)
List Challenges
Get all challenges for a game.GET /api/edit/games//challenges
Get Challenge Details
Retrieve full challenge information including flags.GET /api/edit/games//challenges/
Game ID
Challenge ID
Update Challenge
Modify challenge properties.PUT /api/edit/games//challenges/
Game ID
Challenge ID
Challenge title
Challenge description (supports Markdown)
Challenge category
Array of hint strings
Enable/disable challenge visibility
Challenge tag (e.g., easy, medium, hard)
Enable traffic capture for container challenges
Base score for the challenge
Minimum score rate (0.0-1.0) for dynamic scoring
Difficulty coefficient for scoring calculation
Delete Challenge
Remove a challenge from a game.DELETE /api/edit/games//challenges/
This will destroy all associated containers and remove the challenge from the scoreboard.
Flag Management
Add Flags
Add one or more flags to a challenge.POST /api/edit/games//challenges//flags
Array of flag objects
For
DynamicContainer challenges, use flag templates like flag{[GUID]} or flag{[TEAM_HASH]} instead of static flags.Delete Flag
Remove a flag from a challenge.DELETE /api/edit/games//challenges//flags/
Flag ID
Container Management
Container Types
| Type | Description |
|---|---|
StaticContainer | Single shared container for all teams |
DynamicContainer | Unique container instance per team with dynamic flags |
Container Configuration
Docker image name (e.g.,
ctf/web-challenge:latest)Port to expose from container (1-65535)
Number of CPU cores to allocate
Memory limit in MB
Storage limit in MB
Network mode:
Open, Isolated, CustomCreate Test Container
Launch a test container instance for challenge verification.POST /api/edit/games//challenges//container
Test containers use the prefix “admin” and are for admin testing only.
Destroy Test Container
Stop and remove a test container.DELETE /api/edit/games//challenges//container
Attachments
Update Attachment
Add or update challenge attachments.POST /api/edit/games//challenges//attachment
Type:
None, Local, RemoteURL for remote attachments
Hash of uploaded local file
Upload files to
/api/assets first to get the file hash, then reference it in the attachment.Traffic Capture
For container challenges, traffic capture can be enabled to record network activity.Enable Traffic Capture
SetenableTrafficCapture: true when updating the challenge.
Get Capture Files
GET /api/game/captures//
List traffic capture files for a team.Challenge ID
Team participation ID
Requires Monitor permission.
Download Capture
GET /api/game/captures///
Download a specific capture file.Challenge Types Reference
StaticAttachment
StaticAttachment
Simple challenge with a downloadable file attachment. Flag is static and shared across all teams.
- No containers
- One or more static flags
- Optional attachment (local or remote)
StaticContainer
StaticContainer
Container-based challenge with shared instance. All teams connect to the same container.
- Single shared container
- Static flags
- Requires container configuration
DynamicAttachment
DynamicAttachment
Generates unique attachments per team with embedded dynamic flags.
- No containers
- Flag template required (e.g.,
flag{[GUID]}) - Dynamic attachment generation
DynamicContainer
DynamicContainer
Unique container per team with dynamic flags injected at runtime.
- Individual containers per team
- Flag template required
- Resource-intensive but prevents flag sharing
Next Steps
Game API
Game management endpoints
Admin API
Administrative operations