Records a single event within a conversation. An event is either a turn-pair (the user’s message and the agent’s reply) or a tool call. Send one capture-event per turn and one per tool call.
| Header | Value | Required |
|---|
x-api-key | Your API key, sk_... | Yes |
Content-Type | application/json | Yes |
Body
| Field | Type | Required | Description |
|---|
event_id | UUID | Yes | Client-generated so child events can reference it as their parent. |
session_id | UUID | Yes | The session this event belongs to, from capture-session. |
primitive_name | string | Yes | The agent name for a turn-pair, or the tool name for a tool call. |
primitive_type | string | No | The kind of primitive, for example tool, resource, or prompt. |
args | string | Yes | The input: the user’s message, or the tool’s arguments as JSON. |
result | string | Yes | The output: the agent’s reply, or the tool’s result as JSON. |
success | boolean | No | Whether the event succeeded. Defaults to true. |
latency | integer (ms) | No | How long the operation took, in milliseconds. |
timestamp | integer (ms) | No | Epoch milliseconds for the event. Defaults to server time. |
parent_id | UUID | No | For a tool call, the event_id of the turn or tool that triggered it. |
metadata | object | No | Free-form metadata. checkpoint.* keys drive per-tool execution timelines in Pulse. |
The event tree
Events form a tree so the trace of a conversation is preserved:
- A turn-pair is a top-level event:
primitive_name is your agent’s name, args is the user’s message, and result is the reply. It has no parent_id.
- A tool call sets
parent_id to the event_id of the turn that triggered it. Sub-tools chain further by pointing at the parent tool’s event_id.
This parent and child structure is what powers the trace view and the tool timelines in the dashboard.
Checkpoints
Ride named checkpoints in metadata under checkpoint.* keys to record milestones inside a single tool call. Hone reads them to draw a per-tool execution timeline in Pulse.
Request
Response
Generate event_id client-side as a UUID so a later tool call can set its parent_id to this value.