---
title: "Claim evaluation work"
method: POST
path: "/v1/validator/work/claim"
tags: ["validator"]
---

# Claim evaluation work

`POST /v1/validator/work/claim`

FIFO claim of next available evaluation work item.

## Request body

- HeartbeatRequest
  - `service_versions` object, nullable — Docker image digests for validator stack services
  - `cpu_pct` number, nullable — Validator host CPU utilisation percentage (0-100)
  - `ram_pct` number, nullable — Validator host RAM utilisation percentage (0-100)
  - `disk_pct` number, nullable — Validator host disk utilisation percentage on the sandbox volume (0-100)
  - `docker_container_count` integer, nullable — Validator host running Docker container count

## Response `200`

Successful Response

- ClaimWorkResponse
  - `eval_run_id` string, uuid, required — Evaluation run ID assigned to this claim
  - `agent_version_id` string, uuid, required — Agent version to evaluate
  - `suite_id` integer, required — Problem suite ID for this evaluation
  - `lease_expires_at` string, date-time, required — When the lease expires if not renewed
  - `code_download_url` string, required — Presigned URL to download agent code
  - `execution_contract_id` string, uuid, nullable — ExecutionContract this work item is frozen to (ORO-1928). Stamped at work-item creation, immutable after — contract rotations/retirements after creation do NOT change what pack this claim is bound to. Null for legacy pre-1928 work items that fall back to the static-suite path.
  - `env_pack_sha256` string, nullable — Content-hash of the sealed environment pack this work item is bound to (ORO-1928). Derived from the frozen execution_contract_id — validators load and run against this sha regardless of any contract activity after the work item was created. Null for legacy work items with no binding.
  - `inference_token` InferenceTokenGrant — Per-run scoped inference credential issued at claim_work.
    - `provider` 'chutes' | 'openrouter', required — Provider that minted the token.
    - `access_token` string, required — Bearer credential the validator presents at base_url.
    - `base_url` string, required — Inference API base URL (OpenAI-compatible chat/completions).
    - `expires_at` string, date-time, required — UTC timestamp when this token stops being usable.

## Other responses

- `204` — No work available
- `409` — Validator at capacity
- `422` — Validation Error

---

[API](https://skmtc.dev/oroagents/apis/oro-api.md) · [All operations](https://skmtc.dev/oroagents/apis/oro-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/oroagents/oro-api/revisions/38ef86138115/schema)
