Skip to content

Events under one execution-graph node

GET/api/public/v1/agents/{agent_id}/execution-graph/node-events beta

Scoped evidence + timeline for one GraphNode.id, ordered by dim. node_id=agent and node_id=overflow:* are 422 (neither has an event set of its own), as is dim=value (the availability matrix does not capture it, and nothing ships a source — F8). dim=cost requires a session subject and returns model_calls with an EMPTY events; every other dimension is the inverse. dim=time orders by the per-call duration_ms (F7, slowest first); it was a 422 alongside value until that column shipped. A node with no events is an empty list, never a 404: the graph and this endpoint can legitimately disagree by one window snap.

Terminal window
curl --fail-with-body -X GET 'https://app.openlatch.ai/api/public/v1/agents/<agent_id>/execution-graph/node-events?node_id=<node_id>' \
-H "Authorization: Bearer $OPENLATCH_API_KEY"
Role in the organizationThis endpoint
ownerAllowed
adminAllowed
editorAllowed
viewerAllowed

A key carries the role its owner holds in the organization. See Authentication.

API key scope: agents:read

ParameterTypeDescription
agent_idstringRequired.
ParameterTypeDescription
node_idstringRequired.
windowstring — one of 24h, 7d, 30dDeprecated: send from (and optionally to) instead. A rolling window ending now — 24h, 7d or 30d. Ignored when from is sent.
fromstring (date-time) or nullStart of an explicit range (ISO 8601), any distance in the past. Wins over window. Snapped down to 10 seconds; the response's window.key is then custom.
tostring (date-time) or nullEnd of the explicit range (ISO 8601), exclusive. Requires from, must not be before it (equal bounds are an empty window); defaults to now and is clamped to it. Snapped down to 10 seconds like from.
dimstring — one of cost, time, security, value, frequency or null
pageinteger
page_sizeinteger or null
FieldTypeDescription
eventsarray of objectRequired.
events[].artifact_idstring or nullRequired.
events[].artifact_labelstring or nullRequired.
events[].duration_msinteger or nullRequired.
events[].event_idstringRequired.
events[].session_idstring or nullRequired.
events[].surfacestring — one of local, shell, web, mcp or nullRequired.
events[].timestring (date-time)Required.
events[].tool_namestring or nullRequired.
events[].verdictstring or nullRequired.
model_callsarray of objectRequired.
model_calls[].cost_tokensintegerRequired.
model_calls[].cost_usdstring or nullRequired.
model_calls[].modelstringRequired.
model_calls[].providerstringRequired.
model_calls[].timestring (date-time)Required.
pageintegerRequired.
page_sizeintegerRequired.
totalintegerRequired.
{
"events": [
{
"artifact_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"artifact_label": "string",
"duration_ms": 3,
"event_id": "evt_01jbwa2k1vfrn9y42xhgxhmzj2",
"session_id": "ses_01jbwa2k1vfrn9y42xhgxhmzj2",
"surface": "local",
"time": "2026-01-15T14:32:05Z",
"tool_name": "release-bot",
"verdict": "string"
}
],
"model_calls": [
{
"cost_tokens": 3,
"cost_usd": "string",
"model": "string",
"provider": "string",
"time": "2026-01-15T14:32:05Z"
}
],
"page": 1,
"page_size": 3,
"total": 3
}