Skip to main content
All endpoints are under https://api.mirador.org and require a server key. Responses are scoped to the key’s project.
This page is the practical reference. For the exact, always-current contract — including the full polymorphic event-payload schema — use the Swagger UI, OpenAPI spec, or llms.txt.

Identity

GET /v1/identity

Confirm a key resolves to an org/project. Cheap — no backend lookup. Good for health checks and key validation.

Metadata

Use these to discover the real field universe of a project before composing a filter.

GET /v1/metadata/tags

GET /v1/metadata/attributes

GET /v1/metadata/attributes/{key}

Lists every value seen for one attribute key. Returns 404 (ATTRIBUTE_NOT_FOUND) if the key was never observed.

Traces

GET /v1/traces

List, filter, count, and page through traces. Paginated response (when per_page is set):
To answer “how many traces match X?” in one request, set per_page=10 and read pagination.total — it’s an exact count, not an estimate. Omitting per_page returns every match in a single {"traces": [...]} envelope with no pagination field.

GET /v1/traces/{trace_id}

The full summary for one trace. Returns 404 (TRACE_NOT_FOUND) if it doesn’t exist in this project.
This endpoint returns the trace summary — it does not include the event timeline. For events, call GET /v1/traces/{trace_id}/events. To assemble a complete trace export, combine both — see Exporting traces.

GET /v1/traces/{trace_id}/events

The complete, ordered event timeline for one trace, returned in a single response.
The payload is polymorphic — its shape is determined by event_type. There are 40+ event types across two categories:
  • 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 nests chain identity under payload.chain (caip2 is canonical) and carries a plugin_correlation_id you can group by to reconstruct one lifecycle.
The full event_type → payload mapping is the TraceEvent oneOf in the OpenAPI spec. The llms.txt brief documents the most common payloads inline. Treat unfamiliar event_type values defensively — the plugin list is open and grows without breaking the envelope shape.

Filtering

filter is an AIP-160 expression. Supported fields: Combinators: AND, OR, NOT.
  • AND works across fields.
  • OR only works between leaves on a single fieldstatus="running" OR status="completed" ✅; status="x" OR severity="error" ❌.
  • NOT inverts a single leaf.
  • Quote every value with double quotes. Dotted attribute keys take the explicit-quoted form: attribute."header.country"="US".
URL-encode the filter value when issuing the request (spaces → %20, =%3D, "%22).

Errors

Every error uses a typed envelope. Switch on error.code, not on the human-readable message.

Next Steps

Exporting traces

Combine endpoints to export a full trace into tickets

Best Practices

Patterns for SDKs, automations, and the REST API