List nodes
Returns a graph’s nodes as of a point in its history, filtered and ordered as you ask.
Common uses:
| To list | Send |
|---|---|
| The top-level trees | is_root=true |
| A node’s children | parent_id=node_… |
| Everything under a node | ancestor_id=node_…&order=tree |
| The top three levels under it | ancestor_id=node_…&max_depth=3&order=tree |
| Everything waiting on a person | state=input_required |
| What may have hung | stale=true |
| What’s blocked behind another node | blocked=true |
Filters combine with AND. In tree order (order=tree), each parent comes before its children, and siblings are oldest first, so a page never separates a node from what places it; with a filter, the nodes that match keep that order.
Query Parameters
A cursor: an object id from the list. Returns the page before it. Pass the first id of the page you have to get the previous one.
Fields to expand on each node, with the data. prefix: expand[]=data.parent, expand[]=data.blocked.on. children and descendants can’t be expanded in a list (use parent_id or ancestor_id instead).
Send one expand[] per path. A path goes at most 4 levels deep; at most 20 paths per request. An expanded field appears beside its _id field, which is always there; one not expanded is absent.
With ancestor_id: only nodes at most this many levels below it. 1 is its children.
List nodes
curl https://agentgraph.chofter.com/api/v1/graphs/$GRAPH_ID/nodes \
-H "Authorization: Bearer $AGENT_GRAPH_API_KEY"{
"object": "list",
"url": "/api/v1/graphs/gph_k3P9xQ2mWt7a/nodes?parent_id=node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw&as_of=evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1",
"as_of_event_id": "evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1",
"has_more": true,
"data": [
{
"id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2EzZmQwN2MyYjE5ZTRkNjE",
"object": "node",
"as_of_event_id": "evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1",
"graph_id": "gph_k3P9xQ2mWt7a",
"provider_ref": "claude-code:5f2c1e9a-8d1b-4b6e-9a51-0f6f2c7d3e10/a3fd07c2b19e4d61",
"provider": "claude-code",
"kind": "agent",
"parent_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"root_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"session_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"requested_by_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"depth": 1,
"state": "working",
"stale": false,
"attention": null,
"title": null,
"summary": "Reading the auth middleware",
"headline": "Reading the auth middleware",
"purpose": "Find every caller of the old session store",
"agent_type": "Explore",
"background": false,
"link_method": null,
"spawn_call_id": "toolu_01HxV9qT3mJb7d2KcL5nRw8E",
"cwd": "/Users/dev/work/api",
"created": 1791540843221,
"ended": null,
"last_event": 1791541903812,
"child_count": 1,
"descendant_count": 1,
"background_agent_count": 0,
"task_counts": {
"total": 4,
"pending": 1,
"in_progress": 1,
"completed": 2,
"open": 2
},
"blocked": {
"on_ids": [
"node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2I4MWMyMmUwOWY3YTNjNTU"
],
"starting": 0,
"node_count": 1,
"open_tasks": 5,
"cycle": false
}
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "Invalid limit: must be between 1 and 1000.",
"param": "limit",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "invalid_request_error",
"code": "expand_too_deep",
"message": "The path children.children.children.children.children goes 5 levels deep; at most 4 are allowed.",
"param": "expand",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "authentication_error",
"code": "api_key_invalid",
"message": "Invalid API key: ag_sk_live_****Xa9T.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "permission_error",
"code": "api_key_restricted",
"message": "This restricted key can't read gph_k3P9xQ2mWt7a.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "No such node: node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2I4MWMyMmUwOWY3YTNjNTU.",
"param": "node_id",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "invalid_request_error",
"code": "node_not_yet_created",
"message": "The node node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2EzZmQwN2MyYjE5ZTRkNjE is created by evt_01M4G2FMPN7KD3N1PZ0QX8RM4A, after as_of.",
"param": "as_of",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors",
"first_event_id": "evt_01M4G2FMPN7KD3N1PZ0QX8RM4A"
}
}{
"error": {
"type": "invalid_request_error",
"code": "outside_retention_window",
"message": "This graph holds events from evt_01M4FXYWR82B8XK0V5QJ7M1N3R to evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1.",
"param": "as_of",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors",
"first_event_id": "evt_01M4FXYWR82B8XK0V5QJ7M1N3R",
"last_event_id": "evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit",
"message": "Too many requests. Try again in 1 second.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "api_error",
"code": "api_error",
"message": "Something went wrong. Try again, and include the Request-Id if it keeps happening.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}Returns Examples
{
"object": "list",
"url": "/api/v1/graphs/gph_k3P9xQ2mWt7a/nodes?parent_id=node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw&as_of=evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1",
"as_of_event_id": "evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1",
"has_more": true,
"data": [
{
"id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2EzZmQwN2MyYjE5ZTRkNjE",
"object": "node",
"as_of_event_id": "evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1",
"graph_id": "gph_k3P9xQ2mWt7a",
"provider_ref": "claude-code:5f2c1e9a-8d1b-4b6e-9a51-0f6f2c7d3e10/a3fd07c2b19e4d61",
"provider": "claude-code",
"kind": "agent",
"parent_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"root_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"session_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"requested_by_id": "node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEw",
"depth": 1,
"state": "working",
"stale": false,
"attention": null,
"title": null,
"summary": "Reading the auth middleware",
"headline": "Reading the auth middleware",
"purpose": "Find every caller of the old session store",
"agent_type": "Explore",
"background": false,
"link_method": null,
"spawn_call_id": "toolu_01HxV9qT3mJb7d2KcL5nRw8E",
"cwd": "/Users/dev/work/api",
"created": 1791540843221,
"ended": null,
"last_event": 1791541903812,
"child_count": 1,
"descendant_count": 1,
"background_agent_count": 0,
"task_counts": {
"total": 4,
"pending": 1,
"in_progress": 1,
"completed": 2,
"open": 2
},
"blocked": {
"on_ids": [
"node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2I4MWMyMmUwOWY3YTNjNTU"
],
"starting": 0,
"node_count": 1,
"open_tasks": 5,
"cycle": false
}
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "Invalid limit: must be between 1 and 1000.",
"param": "limit",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "invalid_request_error",
"code": "expand_too_deep",
"message": "The path children.children.children.children.children goes 5 levels deep; at most 4 are allowed.",
"param": "expand",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "authentication_error",
"code": "api_key_invalid",
"message": "Invalid API key: ag_sk_live_****Xa9T.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "permission_error",
"code": "api_key_restricted",
"message": "This restricted key can't read gph_k3P9xQ2mWt7a.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "No such node: node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2I4MWMyMmUwOWY3YTNjNTU.",
"param": "node_id",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "invalid_request_error",
"code": "node_not_yet_created",
"message": "The node node_Y2xhdWRlLWNvZGU6NWYyYzFlOWEtOGQxYi00YjZlLTlhNTEtMGY2ZjJjN2QzZTEwL2EzZmQwN2MyYjE5ZTRkNjE is created by evt_01M4G2FMPN7KD3N1PZ0QX8RM4A, after as_of.",
"param": "as_of",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors",
"first_event_id": "evt_01M4G2FMPN7KD3N1PZ0QX8RM4A"
}
}{
"error": {
"type": "invalid_request_error",
"code": "outside_retention_window",
"message": "This graph holds events from evt_01M4FXYWR82B8XK0V5QJ7M1N3R to evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1.",
"param": "as_of",
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors",
"first_event_id": "evt_01M4FXYWR82B8XK0V5QJ7M1N3R",
"last_event_id": "evt_01M4G3G4E8Q9R2M5X4T6W8Y0B1"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit",
"message": "Too many requests. Try again in 1 second.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}{
"error": {
"type": "api_error",
"code": "api_error",
"message": "Something went wrong. Try again, and include the Request-Id if it keeps happening.",
"param": null,
"doc_url": "https://agentgraph.chofter.com/docs/reference#errors"
}
}