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}}
CommandParamsBehaviour
move_tox, y (m, ±50), optional speedMoves in a straight line at min(speed, speed_limit)
stop—Controlled stop
estopoptional reasonEmergency stop — latching
resume—Releases an emergency stop
set_speed_limitmpsSets the SafeCore limit (capped at the model maximum)
pickobjectCloses the gripper on an object (manipulator models only)
placelocationReleases the held object
run_skillslug, optional duration_sRuns 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, only resume is 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, estop and resume are accepted.
  • pick / place are refused on bodies without hands or an arm; fixed-base arms cannot move_to.

Telemetry

GET /api/v1/sandbox/robots/{serial}/telemetry

Returns 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.