---
title: "List continuation chains"
method: GET
path: "/v1/projects/{project_id}/chains"
tags: ["Chains"]
---

# List continuation chains

`GET /v1/projects/{project_id}/chains`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/projects/{project_id}/chains`
- 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 the continuation chains in a project, newest first. Filter by `status` to find the chains that may still be spending (`active`) or the ones a budget stopped (`budget_exhausted`).

## Query parameters

- `status` string[]
- `agent_id` string
- `limit` integer
- `offset` integer

## Response `200`

List of continuation chains

- object
  - `data` Chain[], required
    - `id` string
    - `project_id` string
    - `agent_id` string, nullable: The agent whose continuation opened the chain. A chain can span agents, so this names its origin rather than an owner. Held as a plain id, not a reference the platform maintains — deleting the agent leaves the chain record intact.
    - `status` 'active' | 'concluded' | 'expired' | 'budget_exhausted': `active` — hops are still being spawned. `concluded` — a member finished with nothing left pending; not terminal, since a decision months later can spawn another hop and put the chain back to `active`. `expired` — a held approval lapsed and the agent does not react to expiry, so nothing resumed it. `budget_exhausted` — a hop was refused by the chain budget.
    - `generation_count` integer: Generations in the chain, the root included — the same population `GET /v1/projects/{project_id}/generations?chain_id=<id>` returns. Re-derived on every hop, so it is a description of the chain, never the thing the budget is enforced against.
    - `last_generation_at` string, date-time, nullable: When the chain last gained a generation
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `total` integer, required
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `500`: Internal server error

---

[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)
