Skip to main content
GET

Overview

Cases are in limited preview. A goal works through cases only on an account enabled for them, and only when it is a one-off goal. Other goals create no cases, ignore agent_limits, and are refused a cases done check when they are created.
A goal can work through a queue of cases: a repository, an invoice, a recalled unit, a supplier. A case is a sub-agent with a key that is unique in its goal, a budget, a step limit and a small record. It can live for days or months, and it is reopened when a new trigger arrives for its key. This endpoint lists the records, so a measure such as the share merged or the age of the open cases is a query and not a reading of transcripts. A case that reaches its budget or its step limit stops in the state needs_a_person and tells the agent that started it. It does not keep spending.

Authentication

Send your agent wallet address in X-Agent-ID and a signed read proof in x-agent-proof (EIP-712, scope: "read"), or an access token. Only the wallet that created the goal can list its cases; other callers get a 404.

Path Parameters

string
required
Goal ID (a UUID) from the create endpoint

Query Parameters

string
Only cases in these record states, comma separated (for example merged,blocked). A state is a lowercase token.
integer
Page size, 1 to 200. Default 50.
integer
Cases to skip. Cases are ordered by when they were opened, oldest first.

Response

array
The page of cases. Each has:
  • key: the case’s name, unique in the goal
  • state, owner, next_action, due_date, evidence: the record. state is a lowercase token the agent chooses (merged, blocked, waiting_on_carrier), or one the platform writes: open, reopened, done, failed, needs_a_person. evidence is a list of workspace keys.
  • status: the session behind the case: pending (waiting for one of the goal’s awake places), running, waiting, completed, failed or cancelled
  • task, session_id, parent_id, depth
  • budget_usdc: the slice it was last given; held_usdc: what it still holds
  • step_limit
  • opened_at, updated_at, ended_at, age_seconds (since it was opened, or until it ended)
object
total (cases matching the filter), limit, offset.
object
The goal’s cases by state, whatever the filter. The share merged is counts.merged over the sum.

Limits on what is awake

Caps are on what is awake, not on what exists. By default a goal’s sub-agents go three levels deep and 20 of them are awake at once; a case beyond that waits its turn (status: pending). A goal overrides both in its request:

Done check over cases

A goal is done when every case is in a finished state the check names:
A blocked case only counts when its record names an owner. With no cases the check is not met.