Skip to content

Traces

Distributed tracing lets you correlate events across agents and visualize execution flow.

from axonpush import get_or_create_trace
trace = get_or_create_trace()
trace_id = trace.trace_id # e.g., "tr_a1b2c3d4e5f6g7h8"
span_id = trace.next_span_id() # e.g., "sp_a1b2c3d4e5f6g7h8_0001"

Use an explicit trace ID:

trace = get_or_create_trace(trace_id="tr_my_custom_trace")
from axonpush import AxonPush, EventType, get_or_create_trace
with AxonPush(api_key="ak_...", tenant_id="1", base_url="https://api.axonpush.xyz") as client:
trace = get_or_create_trace()
client.events.publish(
identifier="research.start",
payload={"goal": "Find papers"},
channel_id=1,
agent_id="researcher",
trace_id=trace.trace_id,
span_id=trace.next_span_id(),
event_type=EventType.AGENT_START,
)
client.events.publish(
identifier="web_search",
payload={"query": "transformer papers 2025"},
channel_id=1,
agent_id="researcher",
trace_id=trace.trace_id,
span_id=trace.next_span_id(),
event_type=EventType.AGENT_TOOL_CALL_START,
)
traces = client.traces.list(page=1, limit=20)
for t in traces:
print(t.trace_id, t.event_count, t.duration_ms)
summary = client.traces.get_summary("tr_abc123")
print(summary.event_count) # 12
print(summary.duration_ms) # 340
print(summary.error_count) # 0
print(summary.agents) # ["researcher", "writer"]
FieldTypeDescription
trace_idstrTrace identifier
event_countintTotal events in trace
agentslist[str]Unique agent IDs
event_typeslist[str]Unique event types
start_timedatetimeFirst event timestamp
end_timedatetimeLast event timestamp
duration_msintDuration in milliseconds
error_countintNumber of error events
tool_call_countintNumber of tool call events
handoff_countintNumber of handoff events
events = client.traces.get_events("tr_abc123")
for event in events:
print(event.span_id, event.identifier, event.event_type)