# Get a Playground run

```http
GET /api/public/v1/competitions/lean-kernel-challenge/playground/runs/{runId}
```

**Scope**: `playground.read`.

Returns the current state, frozen evaluation contract, progress, and available result for one Playground Run owned by the caller.

Existing Runs remain readable after unenrollment, Playground read-only mode, or Competition closure. These states prevent new work but do not remove retained Run details. A Run is private to its creating account; team membership does not grant access.

## Path parameters

| Parameter | Type, requirement, and meaning |
| :--- | :--- |
| `runId` | **Required string.** Opaque Run ID returned by [Create a Playground run](./create-playground-run.md) or [List Playground runs](./list-playground-runs.md). Pass it through unchanged. |

## Polling and state

Poll the same `runId` until `status` is `done`, `failed`, or `cancelled`. Automatic evaluator retries keep the same Run, snapshot, allowance reservation, and active slot; `attempt`, `maxAttempts`, and `nextRetryAt` describe that process. A scheduled last attempt legitimately has `attempt === maxAttempts` together with `nextRetryAt`; do not infer that no retry remains from an integer comparison. Offer [cancellation](./cancel-playground-run.md) only while the latest response has `canCancel: true`.

When `statusUncertain` is `true`, the server cannot currently confirm live evaluator state. It returns the last durable state and result snapshot, keeps `status` unchanged, and does not infer completion or allowance settlement. Continue polling and follow any shared `429` `Retry-After` response.

`todos` is an ordered progress record for `pipelineVersion`. A retry appends a new attempt's steps instead of rewriting the preceding attempt. Treat `label` as display text and `key` as stable only within the returned `pipelineVersion`.

The optional `stages` object remains a backward-compatible, coarse four-stage projection. It is useful for technical inspection, but new progress interfaces should render `todos` and must not combine both representations into one inferred timeline.

## Response fields

The response `data` object uses the shared [`PlaygroundRun`](./create-playground-run.md#response-fields) fields. The structured fields below define the frozen practice contract and detailed measurements referenced by that representation.

| Field | Type and meaning |
| :--- | :--- |
| `practicePolicy` | [`PracticePolicy`](#practicepolicy) — Frozen public-practice policy. Omitted only for a retained legacy Run that predates versioned policies. |
| `practicePlan` | [`PracticeCase[]`](#practicecase) — Exact ordered public cases frozen for this Run. Omitted only with a legacy policy. |
| `dailyAllowance` | `"returned"` — Confirms that cancellation returned the reserved daily allowance. Omitted for every non-cancelled response. |
| `metrics` | [`PracticeMetrics`](#practicemetrics) `\| null` — Structured development measurements when the evaluator has produced any. |

### Status combinations

| `status` | Result fields | Daily allowance policy |
| :--- | :--- | :--- |
| `pending` or `running` | `finalConclusion` and `verdict` are `null`; progress and partial measurements may be present. | Reserved; no settlement field is returned. |
| `done` with `finalConclusion: "passed"` | `verdict` is `accepted`; `reasonCode` is `null`. | Consumed; no settlement field is returned. |
| `done` with `finalConclusion: "failed"` | `verdict` is `rejected`; `reasonCode` classifies the participant-result failure. | Consumed; no settlement field is returned. |
| `failed` | No accepted/rejected verdict was produced. `reasonCode` and optional `failureCategory` classify the terminal failure; available safe diagnostics and partial measurements are retained. | Returned only for final `failureCategory: "INFRA_ERROR"`; judge and resource failures consume it. No settlement field is returned. |
| `cancelled` | Evaluation did not start; result, retry, progress, and measurement fields are cleared, and `evaluationResult` is `not_produced`. | Returned; `dailyAllowance` is `"returned"`. |

`reasonCode` is `REJECTED`, `RESOURCE_LIMIT`, `INFRA_ERROR`, `JUDGE_ERROR`, or `null`. `failureCategory`, when present, is the evaluator's authoritative `RESOURCE_LIMIT`, `INFRA_ERROR`, or `JUDGE_ERROR` classification. A resource limit can terminate as either a rejected evaluator result or a Run failure; in both cases it consumes the allowance. A final `INFRA_ERROR` returns the allowance, while `JUDGE_ERROR` consumes it. `statusUncertain` never changes or reveals settlement; it only says the returned snapshot could not be refreshed.

### `PracticePolicy`

| Field | Type and meaning |
| :--- | :--- |
| `schema` | `string` — Practice-policy schema; current grouped Runs use `grouped-practice-v1`. |
| `sourceSchema` | `string` — Source evaluation schema from which the public plan was derived; current value is `grouped-evaluation-v1`. |
| `official` | `boolean` — Always `false`. Practice cases never become official evaluation cases. |
| `deterministic` | `boolean` — Whether the public plan is reproducible from the frozen contract without a hidden seed. |
| `casesPerGroup` | `integer` — Number of public practice cases in each group; current grouped policy uses `1`. |
| `seedInjected` | `boolean` — Always `false` for the public practice plan. |
| `standardTiming` | [`PracticeTiming`](#practicetiming) — Frozen measurement protocol and resource boundary for the Standard channel. |

### `PracticeTiming`

| Field | Type and meaning |
| :--- | :--- |
| `protocol` | `string` — Measurement transport protocol; current value is `KTP/3`. |
| `executorService` | `string` — Measurement service name. |
| `minimumVersion` | `string` — Minimum compatible executor version frozen for the Run. |
| `memoryLimitMiB` | `integer` — Per-executor memory limit in MiB. |
| `measurementContract` | `string` — Measurement boundary contract; current value is `kernel-replay-v2`. |

The shared practice policy can also appear in Light Runs. Its `standardTiming` fields do not constrain Light measurements. Light reports its actual protocol and measurement contract in `metrics`, currently `local-v2-light` and `kernel-replay-v2-lite-directrfl`.

### `PracticeCase`

| Field | Type and meaning |
| :--- | :--- |
| `groupId` | `string` — Stable group ID within the frozen rules version. |
| `groupLabel` | `string` — Display label frozen for the group. |
| `groupOrder` | `integer` — One-based group order. |
| `caseIndex` | `integer` — Zero-based case index within the group. |
| `input` | `string` — Exact non-negative decimal input. It is a string so values larger than JavaScript's safe integer range remain exact. |
| `scale` | `integer \| null` — Public decoded scale for packed-input Problems, or `null` when the Problem has no separate scale. |
| `timeoutSeconds` | `integer` — Frozen per-case process timeout. |

The frozen plan contains ordered groups and one deterministic public case in each group. Group counts, inputs, and limits can vary across rules versions; clients must render and validate the returned plan without imposing a fixed group count.

### `PracticeMetrics`

| Field | Type and meaning |
| :--- | :--- |
| `mode` | `"perf_instructions" \| "wall_time"` — Frozen measurement mode. `wall_time` is retained for legacy Runs. |
| `metric` | `"perf_instructions" \| "wall_time"` — Primary case metric; it equals `mode`. |
| `unit` | `"instructions" \| "ms"` — Unit corresponding to `metric`. |
| `official` | `boolean` — Always `false`. |
| `scoreable` | `boolean` — Always `false`; these values never affect formal score or rank. |
| `repetitionsPerCase` | `integer` — Repetitions required by the frozen policy; current grouped Runs use `3`. |
| `correctness` | [`PracticeMeasurement`](#practicemeasurement) `\| null` — Full verified-closure measurement when available. |
| `completedCases` | `integer` — Cases with `status: "success"`. |
| `totalCases` | `integer` — Number of entries in `cases`. |
| `completedGroups` | `integer` — Groups for which every planned case succeeded. |
| `totalGroups` | `integer` — Number of entries in `groups`; `0` for a retained ungrouped legacy Run. |
| `peakMemoryBytes` | `integer` — Worst replay-window peak RSS observed anywhere in the Run, in bytes. Omitted for historical verdicts produced before peak-memory measurement was available. |
| `checker` | `string \| null` — Public checker and version identifier. |
| `timingExecutor` | `string \| null` — Executor service that actually measured this Run. |
| `timingExecutorVersion` | `string \| null` — Actual executor version. |
| `timingExecutorCpu` | `string \| null` — Public CPU-model provenance when supplied. |
| `timingExecutorMemoryBytes` | `integer \| null` — Reported executor memory as a safe JSON integer, or `null`. |
| `timingExecutorMemoryLimitMiB` | `integer` — Frozen executor memory limit. |
| `timingProtocol` | `string` — Protocol actually used; it must satisfy `practicePolicy.standardTiming`. |
| `measurementContract` | `string` — Measurement contract actually used; it must equal the frozen policy value. |
| `groups` | [`PracticeGroupResult[]`](#practicegroupresult) — Ordered group summaries. |
| `cases` | [`PracticeCaseResult[]`](#practicecaseresult) — Ordered case results. Current grouped results match `practicePlan` one-for-one. |

Instruction counts and case inputs are decimal strings. Never parse them through a floating-point number. Missing legacy measurement fields are JSON `null`, except `peakMemoryBytes`, which is omitted when unavailable; missing values are never encoded as `0` or a numeric-looking string.

### `PracticeMeasurement`

| Field | Type and meaning |
| :--- | :--- |
| `instructions` | `string \| null` — Exact median instruction count, or `null` when the selected mode did not record it. |
| `wallTimeMs` | `number \| null` — Median wall-clock diagnostic in milliseconds, or `null`. |
| `peakMemoryBytes` | `integer` — Worst replay-window peak RSS for this measurement, in bytes. Omitted when it was not recorded. |
| `repetitions` | [`MeasurementAttempt[]`](#measurementattempt) — Recorded attempts in zero-based index order. |

### `PracticeGroupResult`

| Field | Type and meaning |
| :--- | :--- |
| `groupId` | `string` — ID matching the frozen plan. |
| `groupLabel` | `string` — Display label matching the frozen plan. |
| `groupOrder` | `integer` — One-based order matching the frozen plan. |
| `caseIds` | `string[]` — Ordered IDs of this group's cases in `cases`. |
| `completedCases` | `integer` — Successful cases in the group. |
| `totalCases` | `integer` — Planned cases in the group. |

### `PracticeCaseResult`

| Field | Type and meaning |
| :--- | :--- |
| `caseId` | `string` — Stable ID composed from the frozen group and case coordinates. |
| `groupId` | `string \| null` — Frozen group ID, or `null` for an ungrouped legacy result. |
| `groupOrder` | `integer \| null` — Frozen one-based group order, or `null` for an ungrouped legacy result. |
| `caseIndex` | `integer` — Zero-based index inside the group or legacy plan. |
| `input` | `string` — Exact non-negative decimal input. |
| `scale` | `integer \| null` — Public decoded scale, or `null`. |
| `timeoutSeconds` | `integer \| null` — Frozen timeout when recorded. |
| `status` | `string` — `success`, `timeout`, `failed`, `resource_limit`, `infrastructure_error`, `budget_exhausted`, or `not_run`. |
| `failureReason` | `string \| null` — Stable machine-readable case reason, or `null`. |
| `measurementTarget` | `string \| null` — Measurement target recorded by the evaluator, or `null`. |
| `instructions` | `string \| null` — Exact median instructions for a successful case, or `null`. |
| `wallTimeMs` | `number \| null` — Median or terminal wall time actually recorded, or `null`. |
| `peakMemoryBytes` | `integer` — Maximum peak RSS across the Case's recorded Replay attempts, in bytes. Omitted when it was not recorded. |
| `repetitions` | [`MeasurementAttempt[]`](#measurementattempt) — Recorded attempts in index order. It can be empty for retained legacy data. |
| `timeout` | [`TimeoutMetadata`](#timeoutmetadata) `\| null` — Public timeout metadata, or `null`. |
| `resourceLimit` | [`ResourceLimitMetadata`](#resourcelimitmetadata) `\| null` — Public resource-boundary metadata, or `null`. |

Case status has the following stable meaning:

| Status | Meaning |
| :--- | :--- |
| `success` | The case completed and its available measurement fields are present. |
| `timeout` | The case exceeded its process timeout; `timeout` identifies the observed scope and phase when supplied. |
| `failed` | The case failed for a participant or evaluator reason not represented by a more specific status. |
| `resource_limit` | A time, memory, or other declared resource boundary ended the case; `resourceLimit` carries the public boundary metadata when supplied. |
| `infrastructure_error` | Executor availability, configuration, timing, kernel, or plan validation failed; this is not a successful participant measurement. |
| `budget_exhausted` | The Run-level measurement budget ended before this case could complete. |
| `not_run` | The planned case was retained in the result but was not executed. |

### `MeasurementAttempt`

| Field | Type and meaning |
| :--- | :--- |
| `index` | `integer` — Zero-based attempt index. |
| `status` | `string` — Same result vocabulary as `PracticeCaseResult.status`. |
| `instructions` | `string \| null` — Exact instruction count for this attempt, or `null`. |
| `wallTimeMs` | `number \| null` — Recorded wall time in milliseconds, or `null`. |
| `taskClockMs` | `number \| null` — Recorded task-clock time in milliseconds, or `null`. |
| `peakMemoryBytes` | `integer` — Replay-window peak RSS in bytes. Omitted when it was not recorded. |
| `failureReason` | `string \| null` — Stable failure reason, or `null`. |
| `timeout` | [`TimeoutMetadata`](#timeoutmetadata) `\| null` — Public timeout metadata, or `null`. |
| `resourceLimit` | [`ResourceLimitMetadata`](#resourcelimitmetadata) `\| null` — Public resource-boundary metadata, or `null`. |

### `TimeoutMetadata`

This metadata object uses snake_case field names.

| Field | Type and meaning |
| :--- | :--- |
| `scope` | `string` — Timeout scope, such as `per-case-process`. Omitted when unavailable. |
| `phase` | `string` — Evaluation phase that timed out. Omitted when unavailable. |
| `timeout_seconds` | `integer` — Positive configured timeout in seconds. Omitted when unavailable. |

At least one documented field is present whenever `timeout` is an object.

### `ResourceLimitMetadata`

This metadata object uses snake_case field names.

| Field | Type and meaning |
| :--- | :--- |
| `resource` | `string` — Resource that reached a boundary, such as `memory`. Omitted when unavailable. |
| `phase` | `string` — Evaluation phase in which the boundary was observed. Omitted when unavailable. |
| `memory` | `string` — Public memory-boundary label when supplied by the executor. Omitted when unavailable. |
| `memory_mb` | `integer` — Positive memory boundary in MiB. Omitted when unavailable. |

At least one documented field is present whenever `resourceLimit` is an object.

## Example request

```bash
export SAIR_API_BASE="https://api.sair.foundation/api/public/v1"

curl \
  "$SAIR_API_BASE/competitions/lean-kernel-challenge/playground/runs/$RUN_ID" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

## Example response

```json
{
  "ok": true,
  "data": {
    "runId": "31",
    "solutionId": "17",
    "solutionRevision": 2,
    "solutionName": "baseline",
    "snapshotId": "24",
    "problemId": "fib",
    "status": "done",
    "statusUncertain": false,
    "historyCategory": "accepted",
    "finalConclusion": "passed",
    "verdict": "accepted",
    "score": null,
    "reasonCode": null,
    "reasonMessage": null,
    "logExcerpt": null,
    "attempt": 1,
    "maxAttempts": 2,
    "pipelineVersion": "lean-kernel-2026-08-21.2",
    "progressObservedAt": "2026-09-01T08:00:51Z",
    "todos": [
      { "key": "local_worker_queue", "label": "Waiting for evaluator capacity", "status": "done", "startedAt": "2026-09-01T08:00:00Z", "completedAt": "2026-09-01T08:00:02Z", "durationMs": 2000 },
      { "key": "comparator", "label": "Comparator", "status": "done", "startedAt": "2026-09-01T08:00:02Z", "completedAt": "2026-09-01T08:00:08Z", "durationMs": 6000 },
      { "key": "axiom_audit", "label": "Axiom audit", "status": "done", "startedAt": "2026-09-01T08:00:08Z", "completedAt": "2026-09-01T08:00:10Z", "durationMs": 2000 },
      { "key": "performance_queue", "label": "Waiting for performance measurement", "status": "done", "startedAt": "2026-09-01T08:00:10Z", "completedAt": "2026-09-01T08:00:11Z", "durationMs": 1000 },
      { "key": "performance_measurement", "label": "Performance measurement", "status": "done", "startedAt": "2026-09-01T08:00:11Z", "completedAt": "2026-09-01T08:00:51Z", "durationMs": 40000 }
    ],
    "ruleVersion": "7a0abb4a80d635740a91aed1894f714dfbb82edd",
    "templateVersion": "7a0abb4a80d635740a91aed1894f714dfbb82edd",
    "toolchainVersion": "lean-4.33.1",
    "practicePolicy": {
      "schema": "grouped-practice-v1",
      "sourceSchema": "grouped-evaluation-v1",
      "official": false,
      "deterministic": true,
      "casesPerGroup": 1,
      "seedInjected": false,
      "standardTiming": {
        "protocol": "KTP/3",
        "executorService": "lean-timer-executor",
        "minimumVersion": "1.1.0",
        "memoryLimitMiB": 4096,
        "measurementContract": "kernel-replay-v2"
      }
    },
    "practicePlan": [
      { "groupId": "F1", "groupLabel": "Small", "groupOrder": 1, "caseIndex": 0, "input": "10000", "scale": null, "timeoutSeconds": 15 },
      { "groupId": "F2", "groupLabel": "Medium", "groupOrder": 2, "caseIndex": 0, "input": "50000", "scale": null, "timeoutSeconds": 30 },
      { "groupId": "F3", "groupLabel": "Large", "groupOrder": 3, "caseIndex": 0, "input": "150000", "scale": null, "timeoutSeconds": 60 },
      { "groupId": "F4", "groupLabel": "Very Large", "groupOrder": 4, "caseIndex": 0, "input": "400000", "scale": null, "timeoutSeconds": 90 },
      { "groupId": "F5", "groupLabel": "Frontier", "groupOrder": 5, "caseIndex": 0, "input": "800000", "scale": null, "timeoutSeconds": 120 }
    ],
    "metrics": {
      "mode": "perf_instructions",
      "metric": "perf_instructions",
      "unit": "instructions",
      "official": false,
      "scoreable": false,
      "repetitionsPerCase": 3,
      "correctness": {
        "instructions": "18000",
        "wallTimeMs": 18.4,
        "repetitions": [
          { "index": 0, "status": "success", "instructions": "17990", "wallTimeMs": 18.1, "failureReason": null, "timeout": null, "resourceLimit": null },
          { "index": 1, "status": "success", "instructions": "18000", "wallTimeMs": 18.4, "failureReason": null, "timeout": null, "resourceLimit": null },
          { "index": 2, "status": "success", "instructions": "18010", "wallTimeMs": 18.7, "failureReason": null, "timeout": null, "resourceLimit": null }
        ]
      },
      "completedCases": 5,
      "totalCases": 5,
      "completedGroups": 5,
      "totalGroups": 5,
      "checker": "official-kernel-replay v4.33.1 (kernel-replay-v2)",
      "timingExecutor": "lean-timer-executor",
      "timingExecutorVersion": "1.1.0",
      "timingExecutorCpu": null,
      "timingExecutorMemoryBytes": null,
      "timingExecutorMemoryLimitMiB": 4096,
      "timingProtocol": "KTP/3",
      "measurementContract": "kernel-replay-v2",
      "groups": [
        { "groupId": "F1", "groupLabel": "Small", "groupOrder": 1, "caseIds": ["F1:0"], "completedCases": 1, "totalCases": 1 },
        { "groupId": "F2", "groupLabel": "Medium", "groupOrder": 2, "caseIds": ["F2:0"], "completedCases": 1, "totalCases": 1 },
        { "groupId": "F3", "groupLabel": "Large", "groupOrder": 3, "caseIds": ["F3:0"], "completedCases": 1, "totalCases": 1 },
        { "groupId": "F4", "groupLabel": "Very Large", "groupOrder": 4, "caseIds": ["F4:0"], "completedCases": 1, "totalCases": 1 },
        { "groupId": "F5", "groupLabel": "Frontier", "groupOrder": 5, "caseIds": ["F5:0"], "completedCases": 1, "totalCases": 1 }
      ],
      "cases": [
        {
          "caseId": "F1:0", "groupId": "F1", "groupOrder": 1, "caseIndex": 0, "input": "10000", "scale": null, "timeoutSeconds": 15,
          "status": "success", "failureReason": null, "instructions": "24800", "wallTimeMs": 42.125,
          "repetitions": [
            { "index": 0, "status": "success", "instructions": "24790", "wallTimeMs": 41.9, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 1, "status": "success", "instructions": "24800", "wallTimeMs": 42.125, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 2, "status": "success", "instructions": "24810", "wallTimeMs": 42.3, "failureReason": null, "timeout": null, "resourceLimit": null }
          ]
        },
        {
          "caseId": "F2:0", "groupId": "F2", "groupOrder": 2, "caseIndex": 0, "input": "50000", "scale": null, "timeoutSeconds": 30,
          "status": "success", "failureReason": null, "instructions": "31200", "wallTimeMs": 517.781637,
          "repetitions": [
            { "index": 0, "status": "success", "instructions": "31190", "wallTimeMs": 516.2, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 1, "status": "success", "instructions": "31200", "wallTimeMs": 517.781637, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 2, "status": "success", "instructions": "31210", "wallTimeMs": 519.1, "failureReason": null, "timeout": null, "resourceLimit": null }
          ]
        },
        {
          "caseId": "F3:0", "groupId": "F3", "groupOrder": 3, "caseIndex": 0, "input": "150000", "scale": null, "timeoutSeconds": 60,
          "status": "success", "failureReason": null, "instructions": "45100", "wallTimeMs": 1320.4,
          "repetitions": [
            { "index": 0, "status": "success", "instructions": "45090", "wallTimeMs": 1308.0, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 1, "status": "success", "instructions": "45100", "wallTimeMs": 1320.4, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 2, "status": "success", "instructions": "45110", "wallTimeMs": 1331.0, "failureReason": null, "timeout": null, "resourceLimit": null }
          ]
        },
        {
          "caseId": "F4:0", "groupId": "F4", "groupOrder": 4, "caseIndex": 0, "input": "400000", "scale": null, "timeoutSeconds": 90,
          "status": "success", "failureReason": null, "instructions": "62000", "wallTimeMs": 3480.2,
          "repetitions": [
            { "index": 0, "status": "success", "instructions": "61990", "wallTimeMs": 3460.0, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 1, "status": "success", "instructions": "62000", "wallTimeMs": 3480.2, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 2, "status": "success", "instructions": "62010", "wallTimeMs": 3495.0, "failureReason": null, "timeout": null, "resourceLimit": null }
          ]
        },
        {
          "caseId": "F5:0", "groupId": "F5", "groupOrder": 5, "caseIndex": 0, "input": "800000", "scale": null, "timeoutSeconds": 120,
          "status": "success", "failureReason": null, "instructions": "98500", "wallTimeMs": 7910.6,
          "repetitions": [
            { "index": 0, "status": "success", "instructions": "98490", "wallTimeMs": 7860.0, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 1, "status": "success", "instructions": "98500", "wallTimeMs": 7910.6, "failureReason": null, "timeout": null, "resourceLimit": null },
            { "index": 2, "status": "success", "instructions": "98510", "wallTimeMs": 7975.0, "failureReason": null, "timeout": null, "resourceLimit": null }
          ]
        }
      ]
    },
    "createdAt": "2026-09-01T08:00:00Z",
    "queuedAt": "2026-09-01T08:00:00Z",
    "startedAt": "2026-09-01T08:00:02Z",
    "completedAt": "2026-09-01T08:00:51Z"
  }
}
```

Successful responses use `Content-Type: application/json`.

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | The Competition or Run does not exist, is not visible, or is not owned by the caller. The response does not distinguish these cases. |
| `500` | `RUN_STORE_FAILED` | The Run details or results could not be retrieved. Do not infer the Run's status from this error. |
| `502` | `PLATFORM_UNAVAILABLE` | Competition visibility cannot be verified. |
| `503` | `RUN_STORE_BUSY` | Run state or allowance settlement is being reconciled. Retry the same read. |

An evaluator status outage is not itself an endpoint error when a durable Run snapshot exists. The endpoint returns `200` with `statusUncertain: true` and the last durable data instead.

See [Errors](../../../errors.md) for shared authentication, scope, and rate-limit errors.
