---
title: "Cancel an eval run"
method: POST
path: "/v1/ai/eval/runs/{runId}/cancel"
tags: ["AI Eval"]
---

# Cancel an eval run

`POST /v1/ai/eval/runs/{runId}/cancel`

## Request

- Base URL: `https://blobsrus.omniapp.co/api`
- URL: `https://blobsrus.omniapp.co/api/v1/ai/eval/runs/{runId}/cancel`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Cancel an in-flight eval run. Marks the run cancelled first so no in-progress per-prompt job can flip it back to COMPLETE, then cancels every non-terminal agentic job associated with the run. The run is also archived as part of the cancel — the response returns the updated run inline (`status: CANCELLED`, `is_archived: true`); use `/unarchive` to surface it in the default `archived=false` list again.

## Path parameters

- `runId` string, uuid, required: The unique identifier of the eval run.

## Response `200`

Cancellation processed.

- EvalRunsCancelResponse
  - `cancelled` integer, required: Number of per-prompt agentic jobs that were cancelled by this request.
  - `run` object, required: The cancelled run. `status: CANCELLED` and `is_archived: true` after this call.
    - `branch_id` string, uuid, nullable, required: Optional branch ID the run was executed against. Null when run against the main shared model.
    - `branch_name` string, nullable, required: Display name for the branch, if `branch_id` is set.
    - `completed_at` string, nullable, required: ISO 8601 timestamp when the run reached a terminal state.
    - `cost_basis` 'CREDITS' | 'LIST_PRICE' | 'null', nullable: Pricing unit of the results: - `CREDITS` for Omni-managed providers - `LIST_PRICE` for an organization''s own provider key (an estimate at provider list price) - Null for runs without a resolved LLM
    - `created_at` string, nullable, required: ISO 8601 timestamp when the run was created.
    - `credit_downgraded` boolean, required: Whether any job in this run was clamped to the LLM Omni uses for light tasks in the family by an organization or user [credit downgrade](/ai/settings/usage#downgrade). The run still reports its `llm` as the LLM it was created to run on.
    - `description` string, nullable, required: Optional human-readable description for the run.
    - `id` string, uuid, required: Unique identifier for the run.
    - `is_archived` boolean, required: Whether the run has been archived.
    - `llm` object, required: The LLM this run executed on, resolved when the run was created. Reflects `run_config.llm` when the run was pinned to a specific LLM, or the organization default otherwise.
      - `family_rank` 'fastest' | 'standard' | 'smartest', required: This LLM's rank within its provider family.
      - `model` string, required: The model's catalog name on an Omni-hosted provider, or the id an admin entered for a bring-your-own-key provider.
      - `model_id` string, nullable, required: The underlying model identifier the provider served the run on, if it differs from `model`.
      - `provider` 'bedrock' | 'anthropic' | 'openai' | 'grok' | 'snowflake_cortex' | 'openai_compatible' | 'fireworks' | 'fireworks_managed' | 'databricks_genie' | 'databricks_managed' | 'baseten_managed' | 'vertex_ai', required
      - `thinking` 'default' | 'none' | 'low' | 'medium' | 'high', required: The thinking level pinned on the run, or resolved from the organization default when the run didn't pin one.
      - `effort` string, nullable, required: The reasoning effort actually sent to the provider, only present where it differs from `thinking`.
    - `llm_fallback_disabled` boolean, required: Whether backup-LLM fallback was disabled for this run. Such runs fail on provider errors that ordinary runs survive, so a higher failure rate does not necessarily indicate lower LLM quality.
    - `model_id` string, uuid, required: The shared model this run was executed against.
    - `prompt_set_id` string, uuid, required: The prompt set this run was created from.
    - `results` object[], required: Per-prompt results for this run, ordered by their creation order in the prompt set.
      - `agentic_job` object, required
        - `conversation_id` string, uuid, nullable, required: Conversation the agentic job belongs to.
        - `id` string, uuid, required: Agentic job identifier.
        - `state` 'CANCELLED' | 'COMPLETE' | 'DELIVERING' | 'EXECUTING' | 'FAILED' | 'QUEUED', required: Current state of the agentic job that ran this prompt.
      - `cost` number, nullable, required: Total LLM cost (USD) for this prompt, if available.
      - `error_reason` string, nullable, required: Reason string for prompts whose underlying job failed, whose job completed without producing an answer (no message and no tool call), or whose answer the accuracy judge itself failed to score. A reason prefixed `judge error` means the job produced an answer but scoring it failed — for example, a judge outage, rate limit, or malformed verdict — which is distinct from the underlying job failing.
      - `id` string, uuid, required: Unique identifier for the run result row.
      - `limit_kind` 'STEP_CAP' | 'WALL_CLOCK' | 'null', nullable: Which limit stopped the job when `outcome` is `LIMIT_REACHED`: - `STEP_CAP` for the agent step cap - `WALL_CLOCK` for the query wall-clock limit - `Null` otherwise
      - `outcome` 'CANCELLED' | 'JOB_FAILED' | 'JUDGE_ERROR' | 'LIMIT_REACHED' | 'NO_TEXT' | 'null', nullable: How the job ended, or whether scoring did not complete: - `JOB_FAILED` - The job failed or never ran - `LIMIT_REACHED` - The job hit a limit (see `limit_kind`). - `CANCELLED` - The job was cancelled before it delivered a result, either by cancelling the run or by cancelling the job itself - `NO_TEXT` - The job completed without a response - `JUDGE_ERROR` - Scoring did not complete for this result - `Null` while pending, when the job completed and was scored, and on results recorded before outcomes existed
      - `prompt` string, required: The prompt text that was evaluated.
      - `score` number, nullable, required: Numeric judge score for this prompt result, if scoring ran. Set to `0` without judging when the underlying job completed but produced no answer.
      - `scoring_cost` number, nullable, required: Total LLM cost (USD) for scoring this prompt result.
      - `timing_ms` integer, nullable, required: Wall-clock duration of the underlying job in milliseconds.
    - `run_number` integer, required: Sequential, per-prompt-set run number.
    - `status` 'RUNNING' | 'COMPLETE' | 'CANCELLED', required: Run-level lifecycle. Flips to a terminal state (COMPLETE or CANCELLED) exactly once.
  - `total` integer, required: Total number of per-prompt jobs in the run.

## Other responses

- `400`: Invalid `runId` — must be a UUID.
- `401`: Missing or invalid API key.
- `403`: Insufficient permissions.
- `404`: Run not found.

## Changes

- **2026-11-03** `43290040f88f`: 6 info
  - added the optional property `run/allOf[#/components/schemas/EvalRunDetail]/cost_basis` to the response with the `200` status
  - added the optional property `run/allOf[#/components/schemas/EvalRunDetail]/results/items/limit_kind` to the response with the `200` status
  - added the optional property `run/allOf[#/components/schemas/EvalRunDetail]/results/items/outcome` to the response with the `200` status
  - added the required property `run/allOf[#/components/schemas/EvalRunDetail]/credit_downgraded` to the response with the `200` status
  - …2 more

[Operation history](https://skmtc.dev/omni/apis/omni-api/changes/v1/ai/eval/runs/:runId/cancel/post.md)

---

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