Turn one observation into an action chunk
One metered action chunk, using the selected model’s observation and action contract.
YAM models take grasp-site poses and grippers and refuse joints. Xiaomi’s ARX X5
checkpoint additionally needs measured joints and uses RoboDojo/world-frame poses.
FLUX’s DROID checkpoint takes seven Franka joints and one gripper closed fraction,
with its own camera names, and returns native joint targets. Both native checkpoints are
API-only. verne/v0.5 takes the YAM models’ fields, four frames per camera after the
first request, and is API-only too. runway/praxis-1 takes the same fields and 21 frames
per camera after the first request, one at the end of each row just run; it is API-only. Errors keep their HTTP status and answer a status object.
FLUX applies mandatory prohibited-use prompt filters before billing/inference and a
numeric-action/metadata allowlist before transmission. Input matches return 403
flux_content_blocked; refused backend replies return 502 flux_output_blocked
without action rows and are not billed. Successful FLUX replies include AI provenance
and the filter version. These filters do not assess scene hazards or replace physical
controller limits. The entire chunk is refused if any joint target exceeds the published
Panda/FER position bounds; targets and finite grippers are never clamped. This does not
guarantee collision safety or velocity/acceleration limits. There is no request-level opt-out.
See Robot action API.
{
"status": {
"code": "ok",
"reason": null,
"retryable": false,
"retry_after_s": null
},
"session_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"step": 0,
"action_space": "ee_6d_position",
"actions": {
"left_eef_chunk": [
[
0.301,
0,
0.199,
-0.5,
0,
-0.866,
0,
1,
0,
1
]
],
"right_eef_chunk": [
[
0.3,
0,
0.2,
-0.5,
0,
-0.866,
0,
1,
0,
0.5
]
]
},
"dt": 0.03333333333333333,
"next_frames_per_camera": 1,
"timing": {
"decode": 4.1,
"queue": 0,
"prefill": 0,
"denoise": 212.5,
"encode": 0.3
},
"usage": {
"prompt_tokens": 650,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens": 30,
"total_tokens": 680
},
"id": "gen-3f9a1c2b7d4e"
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}Authorizations
Headers
The API version your client was written for. 2026-10-27 is the only version. Without this header the request is answered under the newest version; a version the API does not answer is refused with 400 unsupported_api_version before anything runs.
2026-10-27 Body
- YAM end-effector
- Xiaomi ARX X5
- FLUX DROID Franka
A served robot model id. Each model selects its own state, camera and output contract. Check GET /v1/environments/models for current availability.
allenai/molmoact2, microsoft/rho, perceptron/isaac-0.5, physical-intelligence/pi0.5, verne/v0.5, runway/praxis-1 Response
End-effector chunks for YAM/Xiaomi, or a native joint chunk for FLUX. Check action_space before interpreting rows.
- End-effector answer
- FLUX DROID answer
{
"status": {
"code": "ok",
"reason": null,
"retryable": false,
"retry_after_s": null
},
"session_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"step": 0,
"action_space": "ee_6d_position",
"actions": {
"left_eef_chunk": [
[
0.301,
0,
0.199,
-0.5,
0,
-0.866,
0,
1,
0,
1
]
],
"right_eef_chunk": [
[
0.3,
0,
0.2,
-0.5,
0,
-0.866,
0,
1,
0,
0.5
]
]
},
"dt": 0.03333333333333333,
"next_frames_per_camera": 1,
"timing": {
"decode": 4.1,
"queue": 0,
"prefill": 0,
"denoise": 212.5,
"encode": 0.3
},
"usage": {
"prompt_tokens": 650,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens": 30,
"total_tokens": 680
},
"id": "gen-3f9a1c2b7d4e"
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}{
"status": {
"code": "model_overloaded",
"reason": "The runtime admission is full.",
"retryable": true,
"retry_after_s": 1
}
}