Sandbox
Sandbox API reference
Updated Sep 26, 2026
The Sandbox gives you virtual MANUSH robots that answer the same API shape as MANUSH Cloud — so you can build fleet integrations and skill orchestration without hardware. All endpoints need an API key with the sandbox scope.
Robots
GET /api/v1/sandbox/robots
POST /api/v1/sandbox/robots {"model": "H2", "name": "line-2", "skills": ["package-pick-pack-seal"]}
GET /api/v1/sandbox/robots/{serial}A robot resource:
{
"serial": "SBX-H2-9F3A12BC",
"name": "line-2",
"model": "H2",
"environment": "sandbox",
"status": "idle",
"state": {
"pose": {"x": 4.0, "y": 2.5, "heading": 0.5586},
"battery": 99.6, "speed": 0.0, "speed_limit": 1.0, "max_speed": 1.6,
"gripper": {"state": "open", "holding": null},
"target": null, "task": null, "estop": false, "odometer_m": 4.72,
"last_event": "Arrived at (4.00, 2.50)."
},
"installed_skills": ["package-pick-pack-seal"]
}Statuses: docked, idle, moving, working, estop. Up to 25 robots per developer.
Commands
POST /api/v1/sandbox/robots/{serial}/commands
{"command": "move_to", "params": {"x": 4.0, "y": 2.5}}| Command | Params | Behaviour |
|---|---|---|
move_to | x, y (m, ±50), optional speed | Moves in a straight line at min(speed, speed_limit) |
stop | — | Controlled stop |
estop | optional reason | Emergency stop — latching |
resume | — | Releases an emergency stop |
set_speed_limit | mps | Sets the SafeCore limit (capped at the model maximum) |
pick | object | Closes the gripper on an object (manipulator models only) |
place | location | Releases the held object |
run_skill | slug, optional duration_s | Runs an installed skill at min(skill max_speed_mps, speed_limit) |
dock | — | Returns to (0, 0) and charges |
Accepted commands return 202 with the updated robot. Refused commands return 409 (state) or 422 (invalid) with {"error": "…"}.
SafeCore rules enforced by the sandbox
- After
estop, onlyresumeis accepted. - Speed is never above the speed limit, and the limit never exceeds the model's maximum.
- A running skill never exceeds its manifest's
max_speed_mps. - Below 5 % battery only
dock,stop,estopandresumeare accepted. pick/placeare refused on bodies without hands or an arm; fixed-base arms cannotmove_to.
Telemetry
GET /api/v1/sandbox/robots/{serial}/telemetryReturns a simulated reading computed from the robot state and the current time: pose, speed, battery (percent, voltage, temperature, charging), motor load and temperature, CPU/GPU load, gripper, active task and a safecore block (estop, speed_limit_mps, within_speed_limit, nearest_human_m, protective_stop). Values are deterministic within 5-second windows and marked "simulated": true.