---
title: "List a case's executions"
method: GET
path: "/v1/projects/{project_id}/playbook-cases/{case_id}/executions"
tags: ["Playbooks"]
---

# List a case's executions

`GET /v1/projects/{project_id}/playbook-cases/{case_id}/executions`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/projects/{project_id}/playbook-cases/{case_id}/executions`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

Returns every run of the case's nodes, newest first.

## Path parameters

- `case_id` string, required

## Query parameters

- `node_id` string
- `limit` integer
- `offset` integer

## Response `200`

List of executions, newest first

- object
  - `data` PlaybookExecution[], required
    - `id` string
    - `case_id` string
    - `node_id` string: The ID of the node that ran
    - `playbook_version` integer: The playbook version the case runs on
    - `executor` object, nullable: What ran; null for a `collect` node
      - `type` 'agent' | 'tool' | 'decider' | 'workflow' | 'orchestration'
      - `id` string: The ID of the agent, tool, decider, workflow or orchestration
    - `status` 'queued' | 'running' | 'completed' | 'failed': `queued` until a worker claims it, `running` while its executor runs or a task or run it started is open, then `completed` or `failed`
    - `result` 'current' | 'superseded' | 'null', nullable: Once settled: `superseded` when the node's inputs changed while it ran, so its output was not written
    - `run_id` string, nullable: The generation, decision, task or orchestration run it started
    - `input` unknown
    - `output` unknown
    - `output_revision` integer, nullable: The revision of the output entry it wrote; null when it wrote none
    - `error` StoredError: Why a resource's work failed, in the shape of an error response's `error` without `hint` and `docs_url`. Every `error` field a resource records carries it, so `code` can be read without first checking the type of `error`.
      - `code` string, required: A key from the server's ERROR_CODES registry, documented on the Error Codes page. `INTERNAL_ERROR`, with the message `Internal Server Error`, records an unexpected failure whose detail reaches the server log only.
      - `message` string, required
      - `meta` object: The failure's own structured context, when it names any.
    - `created_by_principal_type` 'user' | 'api_key' | 'agent' | 'automation' | 'approval' | 'system': What kind of principal acted. `user` and `api_key` are authenticated callers, and the id is the user's (`user_…`) or the key's own (`key_…`), so a record names which key acted rather than its owner. `agent` is an agent writing under its own identity (`agent_…`). `automation` is the task engine acting on a dispatch outcome and `approval` an approval resolution; neither carries an id. `system` is the platform itself, with an id naming the mechanism (`retention_sweep`, `zero_retention`).
    - `created_by_principal_id` string, nullable: Public id of that principal: the user (`user_…`), or for API key auth the key itself (`key_…`), so the record names which key acted.
    - `on_behalf_of` OnBehalfOf, nullable: The tool call the write was made on behalf of, for a write a `naturali` tool made; null for any other write. Attribution only: the `created_by_principal_*` pair and the permissions checked are the project credential's.
      - `tool_id` string, nullable
      - `agent_id` string, nullable: The agent whose turn called the tool
      - `generation_id` string, nullable: The generation that called the tool
      - `session_id` string, nullable
      - `actor_id` string, nullable
    - `created_at` string, date-time
    - `finished_at` string, date-time, nullable
  - `total` integer, required
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `401`: Unauthorized
- `404`: Case not found

---

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