---
title: "Non-destructively triage up to 100 retained error runs by explicit ids or safe exact-match filters."
method: POST
path: "/v1/runs/triage"
tags: ["runs"]
---

# Non-destructively triage up to 100 retained error runs by explicit ids or safe exact-match filters.

`POST /v1/runs/triage`

## Request

- Base URL: `https://api.kody.codes`
- URL: `https://api.kody.codes/v1/runs/triage`
- Auth: HTTP bearer

Non-destructively triage up to 100 retained error runs by explicit ids or safe exact-match filters. Use dry_run first for operational cleanup, then repeat filtered updates while has_more is true. Original error status, message, logs, and history remain inspectable.

Org permission: `job:write`.

## Request body

- object
  - `run_ids` string[]: Explicit retained run ids to triage (max 100).
  - `filter` object: Exact-match selector for retained error runs. At least one identity or error field is required. error_triage defaults to open when resolving/ignoring.
    - `surface` 'execute' | 'export' | 'subscription' | 'app_fetch' | 'app_realtime' | 'job' | 'workflow' | 'retriever' | 'webhook'
    - `package_id` string
    - `job_id` string
    - `name` string
    - `error_name` string
    - `error_message` string
    - `error_triage` 'open' | 'ignored' | 'resolved' | 'all'
  - `triage` 'ignored' | 'resolved' | 'open', required: Set ignored/resolved, or open to clear soft triage. Execution status and error details never change.
  - `note` string: Optional note (at most 2000 characters). Omit to preserve the current note when setting ignored/resolved; pass an empty string to clear it. Cleared automatically when triage is set to open.
  - `limit` integer: Maximum rows updated in one call for both run_ids and filter selectors (default/max 100).
  - `dry_run` boolean: Preview matching run ids without changing any rows.

## Response `200`

Success.

- object
  - `matched_run_ids` string[], required
  - `updated_count` integer, required
  - `has_more` boolean, required
  - `dry_run` boolean, required

## Other responses

- `400`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `401`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `403`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `404`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `409`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `413`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `429`: Too many requests (edge IP/token limit) or an entitlement / plan-cap limit. Wait at least `Retry-After` seconds before retrying.
- `500`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `503`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `default`: Error envelope `{ "error": { "code", "message", "details"? } }`.

---

[API](https://skmtc.dev/kody/apis/kody-api.md) · [All operations](https://skmtc.dev/kody/apis/kody-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kody/apis/kody-api/revisions/705f4f022728?raw)
