POST /rollout
Sync → 200. Async → 202, poll GET /rollouts/{rollout_id}.
No /verify route — scoring happens inside rollout.
| Field | Type | Req | Notes |
|---|---|---|---|
| submission_mode | sync | async | default sync | |
| rollout_id | string | ||
| candidate | object | yes | mutable field overlay |
| dataset_row | object | yes* | from /dataset/rows |
| policy | RolloutPolicySpec | yes | |
| env | object | config, seed | |
| metadata | object |
json
{ "submission_mode": "sync", "candidate": { "system_prompt": "..." }, "dataset_row": { "id": "train-1", "seed": 1 }, "policy": { "provider": "openai", "model": "gpt-4.1-nano", "credential_mode": "byok" }}| Field | Type | Notes |
|---|---|---|
| rollout_id | string | required |
| trace_correlation_id | string | required |
| status | string | |
| reward_info.outcome_reward | number | |
| reward_info.details | object | |
| trace | object | |
| usage | object |