---
title: "Add rollouts to an open evaluation"
method: POST
path: "/preview/evaluations/{name}/rollouts"
tags: ["evaluations"]
---

# Add rollouts to an open evaluation

`POST /preview/evaluations/{name}/rollouts`

## Request

- Base URL: `https://autoresearch.sfcompute.com`
- URL: `https://autoresearch.sfcompute.com/preview/evaluations/{name}/rollouts`
- Auth: HTTP bearer

Add rollouts to an OPEN evaluation (one submitted with open: true): the same parameters as submit_rollouts, attached to an existing set. An identity already in the evaluation is refused (an evaluation never holds two rows of one identity). Call seal_evaluation when the last batch is in.

## Path parameters

- `name` string, nullable, required: The evaluation to attach to (created if new; refused if sealed or owned by another workspace).

## Query parameters

- `workspace` string

## Request body

- object
  - `chip` string, nullable: The runner's chip for a task-kind submit ("h100", "cpu-2"). Default: the catalog container's, else h100. Ignored for sandbox kind.
  - `command` string, nullable: The runner command (default: the image's). Task kind only.
  - `egress` string, nullable: Egress for an openenv bake: "open" (default) or "none".
  - `env` object: Environment variables for the runner (a policy endpoint's key rides here, sealed, and never reaches a sandbox). Task kind only.
  - `environment` unknown, required
  - `gpu` string, nullable: Alias of chip.
  - `group` integer, nullable: Attested group of N children from one state (sandbox kind: N forks of the snapshot; requires --no-memo under eval). Seeds must number N.
  - `idempotency_key` string, nullable: Replay protection: the same key returns the first submit's evaluation rather than creating a second set.
  - `judge` string, required: The judge, pinned: "goal-region@v1", or "swe-tests@sha256:<digest>" to bind the label to code, or "upstream:<name>@<image digest>" for an environment's own reward. Reports never average rows whose judges differ.
  - `labels` unknown
  - `lease_batch` integer, nullable: Rollouts one lease hands the runner (default 32; up to 8192 for a vectorized simulator; openenv pools default 16, max 64 - each granted rollout forks a sandbox).
  - `max_duration_minutes` integer, nullable: The runner attempt's max_duration_minutes (default 240). Task kind.
  - `memo` boolean, nullable: Memoization on/off (default follows the profile; true with "train" is refused). A memo hit returns the stored verdict, unbilled.
  - `mission` string, nullable: The mission this work rolls up into.
  - `open` boolean, nullable: Leave the evaluation open so add_rollouts can append later.
  - `policy` string, nullable: The policy label, part of the identity. REQUIRED for a sandbox-kind eval submit with memoization on: the model driving the sandbox is outside the envelope, so without it the next checkpoint would be served this one's verdicts. What we cannot see, we cannot tell apart.
  - `profile` string, nullable: "eval" (default: memoization on, seeded-stochastic) or "train" (memoization off - a memoized training sample collapses your sample diversity - and unrepeatable).
  - `repro_class` string, nullable: "bit-exact", "seeded-stochastic" or "unrepeatable". Never defaults to bit-exact: we stamp the class you declare, and qualify_rollout is how you find out whether it is true.
  - `runners` integer, nullable: Machines that may work the pool at once (default 4, max 32); started as the backlog warrants, so a ceiling on spend, not a reservation.
  - `seeds` unknown
  - `spec` unknown
  - `state_expires_after` string, nullable: Expiry for states these rollouts declare ("30d", "never"). Default: the org's snapshot default, else never.

## Response `200`

The capability's JSON result.

- Result: The capability's result: the same object the MCP tool returns as structuredContent. Resources carry an `object` type discriminator and an immutable id; money is integer micro-dollars in `*_usd_micros` fields.
  - `object` string: The resource type, when the result is one resource.

## Other responses

- `400`: Malformed request: bad JSON, a parameter that does not parse, or a value outside its range. Code `invalid`.
- `401`: No bearer token, or one this API cannot verify. Code `unauthenticated`.
- `403`: Authenticated, but the token's scopes or the account's role do not reach this operation. The message names the scope word to request. Code `forbidden`.
- `404`: No such route. Code `not_found`; the body names the OpenAPI document.
- `422`: A well-formed request the platform declined: no such node, a cap reached, a state that forbids the move. The message says which, and what to do instead. Code `refused`.
- `429`: Over this door's per-customer budget. Wait `Retry-After` seconds. Code `rate_limited`.
- `500`: Our fault. Retry; if it persists, quote the request-id. Code `internal`.

---

[API](https://skmtc.dev/givemeanode/apis/autoresearch-customer-api.md) · [All operations](https://skmtc.dev/givemeanode/apis/autoresearch-customer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/givemeanode/apis/autoresearch-customer-api/revisions/f88dcb70ac6c?raw)
