Skip to main content
The world is a flat table of components, and you read and write them as plain data. Two structs define the canonical surface: SpawnRequest (what you set when creating an entity) and RichEntityData (what you get back from observe).
The generated API reference is the authoritative schema. It’s generated from the handlers, so it never drifts. GET /schema returns a short hand-maintained component summary and is superseded by the OpenAPI document — use the API reference for exact field types.

What you can spawn — SpawnRequest

POST /spawn accepts these fields (all optional):
position [x,y,z]   scale [x,y,z]      velocity {linear,angular}   collider   physics_body
mesh   color        health   team      role ("hero"|"minion"|"tower"|"structure")
combat (bool)        combat_damage   combat_range   combat_speed   combat_cooldown   combat_style
ai_patrol [[x,y,z]]  gold   gold_bounty   xp_bounty   building_type   lane   spawn_point   player   agent_id

What you observe — RichEntityData

POST /observe (and GET /entities/{id}) return entities as:
id   generation              # the (index, generation) handle
transform                    # position / rotation / scale (propagates on /step)
velocity   collider   physics_body
health [current,max]   team   dead   role
mana [current,max]   gold   level   # gameplay/MOBA
ai   trigger_zone   projectile      # behavior markers
tags   visible_to                   # tagging + view filtering
Fields are present only when the entity has that component. Pixels map to an entity_id via the segmentation channel (see Datasets).

Core component types

The lowest-level components (GET /schema):
ComponentShape
LocalTransformposition [x,y,z], rotation [x,y,z,w], scale [x,y,z]
GlobalTransformread-only; computed from the hierarchy on /step
Velocitylinear [x,y,z], angular [x,y,z]
PhysicsBodyDynamic | Static | Kinematic
ColliderAabb(hx,hy,hz) | Sphere(r) (plus capsule/convex/trimesh/compound internally)
Health, Team, …gameplay components (Gameplay & combat)
Transforms read [0,0,0] until the first /stepGlobalTransform propagates on step. A velocity only integrates if the entity has a physics_body.

Authoritative schemas

Every request/response struct, generated from the handlers.