---
title: "List recent execution history across jobs, webhooks, package apps, workflows, ad-hoc execute, and other runtimes so y..."
method: GET
path: "/v1/runs"
tags: ["runs"]
---

# List recent execution history across jobs, webhooks, package apps, workflows, ad-hoc execute, and other runtimes so y...

`GET /v1/runs`

## Request

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

List recent execution history across jobs, webhooks, package apps, workflows, ad-hoc execute, and other runtimes so you can debug failures or inspect what ran. Ad-hoc execute runs are included for both success and error. Terminal rows may include a bounded metadata.result snapshot. By default, ignored/resolved error runs are hidden (error_triage defaults to open); use runUpdate or runUpdateBulk to triage noise, or pass error_triage all/ignored/resolved to inspect those rows. Pass status success (or omit status with error_triage all) for a recent "what ran" list. Records are retained about 30 days, capped per user, and cap-pruned in this order: handled errors, successes, then open errors.

Org permission: `job:read`.

## Query parameters

- `surface` 'execute' | 'export' | 'subscription' | 'app_fetch' | 'app_realtime' | 'job' | 'workflow' | 'retriever' | 'webhook': Optional runtime surface filter such as job, webhook, execute, app_fetch, or workflow.
- `status` 'running' | 'success' | 'error': Optional status filter: running, success, or error.
- `package_id` string: Optional saved package id to scope package-owned runs.
- `job_id` string: Optional job id to list runs for one scheduled job.
- `workflow_id` string: Optional workflow run id (dynwf-… or pkgwf-…) from workflows.create. Returns that workflow's run, whose metadata.result holds the return value once it succeeds.
- `since` string: Optional ISO 8601 lower bound on started_at (inclusive), for example 2026-07-01T00:00:00.000Z.
- `error_triage` 'open' | 'ignored' | 'resolved' | 'all': Soft error-triage filter. Defaults to open (hides ignored/resolved noise). Use ignored, resolved, or all to inspect triaged runs.
- `limit` integer: Page size (default 25, max 100).
- `cursor` string: Opaque pagination cursor from a previous next_cursor value.

## Response `200`

Success.

- object
  - `runs` object[], required
    - `id` string, required
    - `surface` 'execute' | 'export' | 'subscription' | 'app_fetch' | 'app_realtime' | 'job' | 'workflow' | 'retriever' | 'webhook', required
    - `status` 'running' | 'success' | 'error', required
    - `name` string, nullable, required
    - `package_id` string, nullable, required
    - `kody_id` string, nullable, required
    - `source_id` string, nullable, required
    - `published_commit` string, nullable, required
    - `storage_id` string, nullable, required
    - `job_id` string, nullable, required
    - `workflow_id` string, nullable, required
    - `invocation_id` string, nullable, required
    - `session_id` string, nullable, required
    - `idempotency_key` string, nullable, required
    - `parent_run_id` string, nullable, required
    - `started_at` string, required
    - `finished_at` string, nullable, required
    - `duration_ms` integer, nullable, required
    - `error_name` string, nullable, required
    - `error_message` string, nullable, required
    - `error_triage` 'ignored' | 'resolved', nullable, required: Soft triage for error runs: ignored, resolved, or null when open / not an error.
    - `triage_note` string, nullable, required
    - `triaged_at` string, nullable, required
    - `triaged_by` string, nullable, required
    - `metadata` object, required
    - `log_count` integer, required
  - `next_cursor` string, nullable, required: Opaque cursor for the next page, or null when this is the last page.

## 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/a020ecedb82b?raw)
