---
title: "Decide"
method: POST
path: "/models/release-decisions"
tags: ["models"]
---

# Decide

`POST /models/release-decisions`

## Request

- Base URL: `https://api.os3robotics.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.os3robotics.com/models/release-decisions`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

## Request body

- DecisionIn
  - `workspace_id` string, uuid, required
  - `candidate_eval_id` string, uuid, required
  - `safety_eval_id` string, uuid, nullable
  - `general_eval_id` string, uuid, nullable
  - `claim` 'same_quality' | 'economy' | 'improvement', nullable
  - `tolerance` number, nullable
  - `keep` number, nullable
  - `max_p95_ratio` number, nullable
  - `task` string, nullable

## Response `201`

Successful Response

- ReleaseDecision
  - `id` string, uuid, required
  - `workspace_id` string, uuid, required
  - `kind` 'llm_specialist' | 'robot_policy', required
  - `candidate_ref` string, required
  - `model_version_id` string, uuid, nullable, required
  - `from_version_id` string, uuid, nullable, required
  - `task` string, nullable, required
  - `claim` 'same_quality' | 'economy' | 'improvement', required
  - `tolerance` number, required
  - `gate` object, required
  - `candidate_eval_id` string, uuid, required
  - `baseline_eval_id` string, uuid, required
  - `safety_eval_id` string, uuid, nullable, required
  - `runtime_ref` string, nullable, required
  - `suite_ref` string, nullable, required
  - `suite_sha256` string, nullable, required
  - `passed` boolean, required
  - `verdict` string, required
  - `failed_criteria` string[], required
  - `reasons` object, required
  - `item_flips` object, nullable, required
  - `accuracy` object, nullable, required
  - `canary_percent` integer, required
  - `approved_at` string, date-time, nullable, required
  - `approved_by` string, nullable, required
  - `created_by` string, required
  - `created_at` string, date-time, required
  - `adapter_version_id` string, uuid, nullable
  - `from_adapter_version_id` string, uuid, nullable
  - `general_eval_id` string, uuid, nullable
  - `forgetting` object, nullable
  - `contract_id` string, uuid, nullable
  - `all_in_cost` object, nullable
  - `route_state` string, nullable
  - `task_id` string, nullable
  - `replaced` Reinstated: The release the rolled-back click replaced, which serves the task again.
    - `release_decision_id` string, uuid, required
    - `candidate_ref` string, required
  - `safety_origin` 'os3_run' | 'customer_reported', nullable
  - `canary_traffic` CanaryTraffic: A live canary's traffic since it started, as the canary guard last looked at it. A canary sends a share of its task's subjects to the candidate (a request's subject is its x-os3-subject, else its x-os3-session, else its gateway key), not a share of its requests, so the candidate's share of the requests is what its subjects send.
    - `at` string, date-time, required
    - `candidate_requests` integer, required
    - `incumbent_requests` integer, required
    - `candidate_subjects` integer, nullable, required
    - `incumbent_subjects` integer, nullable, required
    - `share` number, nullable, required
    - `one_subject` boolean, required
  - `thinking_pick` boolean, nullable
  - `keep` number, nullable, required: The quality setting it was decided under (its gate's); null: none (same quality, or a claim declared without one).
  - `stage` string, required: rejected | rolled_back (its canary) | released | awaiting_operator (robot) | canary | awaiting_customer.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/os3robotics/apis/os3-api.md) - [All operations](https://skmtc.dev/os3robotics/apis/os3-api/llms.txt) - [OpenAPI document](https://skmtc.dev/os3robotics/apis/os3-api/revisions/af32cd4f14bb?raw)
