Skip to main content
A trace is one user flow that can combine application activity with on-chain settlement. Investigate in this order:
1

Discover the field universe

GET /v1/traces/tags and GET /v1/traces/attributes — so filters use real names, not guesses.
2

Filter and page

GET /v1/traces with a filter and a bounded window, paging until the token is absent.
3

Read one aggregate

GET /v1/traces/{trace_id} — status, severity, duration, tags, attributes, rule matches.
4

Read its events

GET /v1/traces/{trace_id}/events — the complete, ordered timeline.

Discovery

GET /v1/traces/tags

Tags this project has stamped, over the last 30 days by default (optional since/until, max 30-day span):

GET /v1/traces/attributes

Attribute keys and sampled values in one call — there is no per-key values endpoint:
Every bounded collection uses {items, truncated}. Absence of a tag, key, or value is conclusive for the echoed window only when the corresponding collection has truncated: false — and sampled values are hints, not exhaustive sets, so test an unlisted value with a direct filter.

GET /v1/traces

List, filter, count, and page through traces (newest-first).
To answer “how many traces match X?” in one cheap request, set page_size=1 and read the top-level total — it’s an exact count recomputed as each page is read, not an estimate.

Trace filters

Trace severity is not “highest severity.” A trace containing both error and info events matches both severity="error" and severity="info". And the filter accepts error/warning/info, while the response field highest_severity uses debug/info/notice/warn/error — don’t feed a response value straight back into a filter.
The shared grammar rules (quoting, OR-on-one-field, dotted keys, presence vs. emptiness, size caps) are on Endpoints & Conventions.
For OTLP-ingested traces, attribute.<key> searches the trace attribute bag — Resource attributes plus keys promoted with mirador.trace.attribute.<key>. A plain span attribute stays on its span and is not filterable here. severity matches only events carrying mirador.event.severity, since OTLP span events are stored neutral by default.

GET /v1/traces/{trace_id}

The full aggregate for one trace, wrapped as { "project_id": ..., "trace": { ... } }. Returns 404 (TRACE_NOT_FOUND) if it doesn’t exist in this project — absent, deleted, and out-of-scope are deliberately indistinguishable. Only trace_id, trace_number, name, status, created_at, and duration_ms are always present. highest_severity, tags, attributes, and rule_matches are omitted when empty — don’t assume them.
duration_ms is wall-clock milliseconds between first and last events. For an auto-closed trace it can represent a close timeout rather than flow latency — check status and lifecycle events before interpreting it. And this endpoint returns the summary only; for events, call GET /v1/traces/{trace_id}/events. To assemble a complete export, combine both — see Exporting traces.

GET /v1/traces/{trace_id}/events

The complete event timeline in one response, in ascending version (state) order:
The payload is a discriminated union keyed by event_type, and event types are open-ended — handle unknown types defensively:
  • Trace-level events (started, finished, info_event_added, warn_event_added, error_event_added, attributes_updated, tags_updated, rule_match_added, trace_closed, trace_deleted) describe the trace itself and carry no chain.
  • Plugin events (EVM/Solana/Canton transactions and receipts, bridge detected/matched, Safe message/transaction lifecycle, relay quote/deposit/fill/refund, tx hints) are emitted by resolvers tracking a specific flow. Each carries a plugin_correlation_id — group on it to reconstruct one plugin lifecycle. Read chain identity from the payload-specific chain, source_chain/destination_chain, or origin_chain/destination_chain; caip2 is canonical.
The full event_type → payload mapping is the TraceEvent union in the OpenAPI spec. The llms.txt brief documents the most common payloads inline.

Correlating with logs

trace_id is the pivot between traces and logs: filter /v1/logs with trace_id="<id>" over a window bounded around the trace’s lifetime. See Correlating traces and logs for the exact recipe.

Next Steps

Exporting traces

Combine summary + events to export a full trace into tickets

Logs

Find the log records a trace produced