Skip to content

HTTP API routes

Machine-readable spec: server/openapi/openapi.yaml, browsable at /api/docs (Redoc) on a running server. Both the table below and the YAML are generated from the same annotated Ktor routes.

Method Path Description
GET /api/admin/auctions List all auction listings, any status
POST /api/admin/auctions/{id}/force-cancel Force-cancels a listing: returns the item to the seller and refunds the highest bidder, no tax
GET /api/admin/blocks All registered block definitions
GET /api/admin/chunks/discovered All chunk coordinates generated so far (in-memory ∪ persisted)
GET /api/admin/claims All land claims
DELETE /api/admin/claims/{id} Delete a land claim
GET /api/admin/claims/{id} A single land claim
PUT /api/admin/claims/{id}/bounds Update a claim's Y bounds
PUT /api/admin/claims/{id}/trust Grant or revoke a player's trust on a claim (online or offline)
GET /api/admin/classes RPG class definitions, keyed by class name
GET /api/admin/configs Names of all whitelisted editable YAML config files
GET /api/admin/configs/{...} Raw YAML content of a whitelisted config file
PUT /api/admin/configs/{...} Overwrite a whitelisted config file's raw YAML content
PUT /api/admin/gametime Set the in-game time of day
GET /api/admin/groups All permission groups, including the virtual admin group
POST /api/admin/groups Create a permission group
DELETE /api/admin/groups/{name} Delete a group and unassign it from every account and character that has it
PUT /api/admin/groups/{name} Replace a group's permission list
GET /api/admin/instances All instance zones
POST /api/admin/instances Create an instance zone covering already-generated chunks
DELETE /api/admin/instances/{id} Delete an instance zone
GET /api/admin/instances/{id} A single instance zone
PUT /api/admin/instances/{id} Rename an instance zone
GET /api/admin/instances/{id}/blocks Non-air blocks in an instance zone, streamed as newline-delimited JSON (application/x-ndjson, one InstanceBlockDto per line), capped at 300000
PUT /api/admin/instances/{id}/bounds Update an instance zone's Y bounds
PUT /api/admin/instances/{id}/chunks Update the set of chunks covered by an instance zone
PUT /api/admin/instances/{id}/enabled Enable/disable an instance zone
PUT /api/admin/instances/{id}/layout Update an instance zone's clip planes and shortcut bar layout
GET /api/admin/items Item definitions, keyed by item type id
GET /api/admin/loggers All known loggers (Logback's registry) with their explicit and effective level — useful to raise verbosity for live debugging
PUT /api/admin/loggers/{...} Set a logger's level (TRACE/DEBUG/INFO/WARN/ERROR/OFF), or null to inherit from its parent again
GET /api/admin/npc-types NPC type definitions (codex info), keyed by type id
POST /api/admin/npc-types/reload Reload NPC type definitions from resources/entities and despawn live instances so the spawner recreates them with the new model. Use after editing an entity bbmodel/yaml.
GET /api/admin/npcs Live NPC instances with full animal/combat state
POST /api/admin/npcs/{id}/chat-test Send a message to a live chat_npc's LLM dialogue outside of any real player session — for iterating on its dialoguePrompt
POST /api/admin/perf/reset Start a perf measurement window: clears the world's tick samples and the process-level run metrics
GET /api/admin/perf/snapshot Tick percentiles per phase, heap/GC/CPU/network since the last perf reset
GET /api/admin/permissions Every known permission string — slash commands' permission field (discovered live from the command registry) plus the fixed set checked outside the command system. For autocomplete, not validation — a group may still be given any free-form permission string.
GET /api/admin/plain-colors All registered plain paint colors
GET /api/admin/players All player names
POST /api/admin/players Create a player identity in the target world and return its id. Reserves the id (and, with characterClass, a fresh RPG character) that onConnect will use — so an E2E test's RPG player is ready before the browser connects, with no character-creation screen. Also ensures the matching no-auth account exists. Does not write to persistence.
GET /api/admin/players/{name} Full player file (state, keybindings, RPG data)
PUT /api/admin/players/{name}/equipment Partially update a player's owned/equipped armor and wielded hand items
POST /api/admin/players/{name}/give Give an inventory item, or grant ownership of an armor/weapon/tool
GET /api/admin/players/{name}/groups A character's in-game RBAC groups — distinct from the account-level groups on /api/admin/users, which only gate this admin panel
PUT /api/admin/players/{name}/groups Replace a character's in-game RBAC groups
PUT /api/admin/players/{name}/keybindings Overwrite a player's saved key bindings
PUT /api/admin/players/{name}/preferences Partially update a player's preferences (only given fields change)
POST /api/admin/players/{name}/rename Rename a player
PUT /api/admin/players/{name}/rpg Partially update a player's RPG class/base stats
GET /api/admin/protections Each Class's Protection Spell and per-Rank values, keyed by class name (null spellId when a Class has none configured)
GET /api/admin/protections/simulate Per-Class survival report at a Level and Danger tier: active Protection Rank, hit chance and mean damage/attacks-survived with and without it, against that tier's real NPC Abilities. Analytic, no Monte-Carlo.
POST /api/admin/reload Reload configuration files without restarting the server — same behavior as the in-game /reload command
POST /api/admin/restart Trigger a pitchfork server restart
GET /api/admin/scenes All scenes (bounded off-world block-structure buffers)
POST /api/admin/scenes Create a scene
DELETE /api/admin/scenes/{id} Delete a scene
GET /api/admin/scenes/{id} A single scene's metadata
PUT /api/admin/scenes/{id} Rename a scene
GET /api/admin/scenes/{id}/blocks/raw Scene block/state/extraState buffers as a binary blob: 3×4-byte big-endian dimensions (width,height,depth) followed by the blocks byte array, then the states byte array, then the extraStates byte array (wire-index-per-byte, 0 = AIR)
PUT /api/admin/scenes/{id}/dimensions Resize a scene
POST /api/admin/scenes/{id}/duplicate Duplicate a scene (copies name, dimensions, and blocks)
GET /api/admin/scenes/{id}/entities Fractional (lego/plate/arch) block entities placed in this scene — not carried by the blocks/raw binary blob, so the client loads them separately on scene open
PUT /api/admin/scenes/{id}/layout Update a scene's shortcut bar layout
GET /api/admin/schemas/{filename} A JSON Schema file (data/config/schemas/*.schema.json) for the config editor
GET /api/admin/simulation/defaults Defaults the world simulator admin UI prefills its editors with
GET /api/admin/skills All attack and spell ids
GET /api/admin/social/factions Faction settings and definitions
POST /api/admin/social/factions Create or replace a faction definition (matched by id)
PUT /api/admin/social/factions/settings Update global faction settings
DELETE /api/admin/social/factions/{id} Delete a faction definition
GET /api/admin/social/factions/{id}/members Players affiliated with a faction (online + persisted)
POST /api/admin/social/factions/{id}/members Make a player join a faction (admin — no cooldown)
DELETE /api/admin/social/factions/{id}/members/{playerId} Remove a player from a faction
GET /api/admin/social/groups All active player groups
POST /api/admin/social/groups Create a group led by an online player
DELETE /api/admin/social/groups/{id} Disband a group
POST /api/admin/social/groups/{id}/members Add an online player to a group
DELETE /api/admin/social/groups/{id}/members/{playerId} Remove a member from a group
GET /api/admin/social/guilds All guilds
POST /api/admin/social/guilds Create a guild
DELETE /api/admin/social/guilds/{id} Disband a guild
PUT /api/admin/social/guilds/{id} Rename / retag / set MOTD of a guild
POST /api/admin/social/guilds/{id}/members Add a player to a guild
DELETE /api/admin/social/guilds/{id}/members/{playerId} Remove a member from a guild
PUT /api/admin/social/guilds/{id}/members/{playerId} Set a guild member's rank
GET /api/admin/social/online-players Names of currently connected players (group-member autocomplete)
GET /api/admin/social/players Canonical display names of every known player (online + persisted), de-duplicated — for social name-field autocomplete
GET /api/admin/status Server status snapshot (TPS, players, chunks, heap, CPU)
GET /api/admin/users All local/no-auth accounts
POST /api/admin/users Create a local/no-auth user account
DELETE /api/admin/users/{email} Delete a user account
PUT /api/admin/users/{email} Update a local user's display name/groups
GET /api/admin/worlds All worlds on disk, with stats
POST /api/admin/worlds Create a new world
GET /api/admin/ws/instances/{id}
GET /api/admin/ws/npcs
GET /api/admin/ws/scenes/{id}
GET /api/admin/ws/simulation
GET /api/armors List all armor definitions
GET /api/assets/manifest
POST /api/assets/reload
GET /api/attacks Attack definitions, flattened by "attackId:rank" key
GET /api/auth/config Active auth provider, used by the client to pick the right login UI
GET /api/autocomplete/{commandId}/{argIndex} Autocomplete suggestions for a slash command argument
GET /api/biomes Grass color per biome id, as [r, g, b] in 0..1
GET /api/biomes/tints Screen tint color per liquid biome id, as [r, g, b] in 0..1
POST /api/character/create Create a new (non-RPG) character
POST /api/character/rpgcreate Create a new RPG character (point-buy base stats + class)
GET /api/chunks/{cx}/{cz} Binary-encoded chunk data (protocol.ServerMessage.ChunkData wire format). Not a JSON API — used by the game client, not by TanStack Query hooks.
GET /api/classes Attacks and spells accessible per RPG class, keyed by level
GET /api/furnitures List all furniture definitions
GET /api/game-assets 3D game asset files discovered under resources/game-assets
GET /api/game-assets/bbmodel-export/{...} Converts an OBJ/MTL mesh into a Blockbench-compatible mesh .bbmodel (cached). The generated mesh elements are not rendered by the admin viewer — open the result in Blockbench to edit it.
DELETE /api/game-assets/blend-cache/{...} Clears the cached Blender conversion (scene tree + all OBJ/bbmodel exports) for a .blend file
GET /api/game-assets/blend-preview/{...} Converts a .blend file to OBJ/MTL via headless Blender (cached) and returns the OBJ asset path
GET /api/game-assets/blend-scene/{...} Reads a .blend file's collection/object tree via headless Blender (cached)
GET /api/game-assets/file/{...} Raw asset file bytes (glb/gltf/fbx/textures)
GET /api/i18n/{locale} Client-facing translation keys for a locale
GET /api/items/meta Item metadata (label, background color, consumable flags) by item type id
GET /api/keybindings Key bindings — a player's saved bindings if ?player= is given and persistence is available, otherwise the default config
GET /api/layout/registry All widgets registered for the UI layout editor
GET /api/macros/context Variables available to the macro JEXL evaluation context
GET /api/map/houses Generated houses within an area
GET /api/map/road-raster Per-chunk road bitmask within an area
GET /api/map/road-raster.png Rasterized road overlay as a PNG image
GET /api/map/roads Road vertex segments within an area
GET /api/map/staircases Named staircase points for the map overlay
GET /api/map/state Live players, NPCs and weather zones for the map overlay
GET /api/map/terrain Cached terrain summary JSON for the map overlay
GET /api/map/terrain-raster.png Rasterized terrain overlay as a PNG image
GET /api/map/voronoi Voronoi biome cells around a point
GET /api/map/voronoi-borders Voronoi cell border segments within an area
GET /api/minigames List all registered mini-games (id, display name, bundle URL)
GET /api/player/{id}/armors Armor names currently equipped by a player
GET /api/player/{id}/hands Wielded weapon/tool names and dominant hand for a player
GET /api/player/{id}/owned Armor/weapon/tool names owned by a player
GET /api/player/{id}/rpg A player's RPG character class
POST /api/player/{id}/screenshots Upload a player screenshot (base64 PNG, optionally as a data: URI)
GET /api/player/{id}/skin A player's current skin
PUT /api/player/{id}/skin Change a player's skin
GET /api/players/by-email/{email} Player characters (name + id) linked to an account email
GET /api/players/names Names of all known players
GET /api/quests All quest definitions
GET /api/server/info Server build timestamp and protocol fingerprint
GET /api/siege-weapons List all siege weapon definitions
GET /api/skins Names of all available player skins
GET /api/skins/{name}/config Skin config (eye offset, hidden bones) for a named skin
GET /api/spells Spell definitions, flattened by "spellId:rank" key
GET /api/tools List all tool definitions
GET /api/vehicles/{name}/config Vehicle model config (speed, seat offset) for a named vehicle
GET /api/weapons List all weapon definitions
GET /auth/callback OAuth authorization code callback — redirects with the session token in the URL fragment
POST /auth/login Log in with email/password (local auth provider)
GET /auth/me Resolve the current session from its bearer token
GET /auth/oauth/start Redirect to the OAuth provider's consent screen
POST /auth/refresh Exchange a refresh token for a new access token + rotated refresh token