Observability
Inspect workspace runs, node activations, and operator-only call traces.
Use the dashboard to answer what ran, which version it used, and where a call failed or spent time. This is an operator view, not the SDK's public conversation timeline. You need a signed-in dashboard account with membership in the workspace; an SDK session or workspace API key does not grant access to the dashboard-only list, traces, or run-graph endpoints.
Find a run
- Select the workspace in the dashboard and open Observability at
/<tenant_id>/observability. - Filter by agent or status. Each conversation row shows its ID, status,
start time, user when present, completed duration when available, and
either the version number or
draft. - Open a row to inspect
/<tenant_id>/observability/conversations/<conversation_id>. From the canvas run panel, Open run in observability links to the same detail page once a conversation ID exists.
These pages fetch persisted records; they are not a live token stream or an alerting service. Reload to inspect a run that has advanced since you opened it. If the list is empty, check the workspace and clear the filters before assuming execution produced no record.
Inspect the detail
The header shows status, start and finish times, duration, user, token count, LLM calls, tool calls, activation count, and an error summary when present. Check the version or draft marker before comparing the run with current canvas edits.
The operator timeline interleaves node, edge, and subgraph activations with per-call trace cards by start time. Expand multiple cards to compare calls:
| Card | What to inspect |
|---|---|
| LLM | Provider/model, streaming or complete mode, latency, outcome, and Request/Response tabs. |
| Condition | Condition kind, chosen labels, latency, outcome, and Request/Response tabs. |
| Tool | Tool name, client/server side, latency, outcome, and Arguments/Result tabs. |
The graph used for node labels is resolved for that conversation: its start-time graph snapshot for a draft run, or its pinned immutable version. It is not the latest draft. If the graph cannot be loaded, the timeline falls back to short node IDs; that is not evidence that the graph had no names.
For a failure, start with the error summary and the relevant Err card,
then compare the input and outcome with the preceding activation. For latency,
compare individual call durations rather than treating total conversation
duration as model time; a conversation can include pauses for input or tools.
An empty trace list does not prove no work ran: inspect the conversation's
activations and check for capture or storage errors on the deployment.
Routes and access
The dashboard uses these routes with its authenticated dashboard credential
and tenant_id query parameter. Workspace membership is checked server-side.
| Route | Purpose |
|---|---|
GET /v1/conversations?tenant_id=<id> | Workspace summaries; API filters include agent_id, status, started_after, started_before, and limit. The UI exposes agent and status filters. |
GET /v1/conversations/<id>?tenant_id=<id> | Conversation detail and activations for the operator view. |
GET /v1/conversations/<id>/traces?tenant_id=<id> | Captured per-call payloads, dashboard-only. |
GET /v1/conversations/<id>/graph?tenant_id=<id> | The graph that actually ran, dashboard-only. |
The per-conversation detail route is also used by the SDK, but its response is filtered by credential tier. That does not make the trace or run-graph routes SDK APIs. Unknown and cross-workspace conversation IDs are masked as not found. Resolve access problems through workspace membership, not by shipping an operator credential to your users.
Public timeline vs operator traces
Render your product with the SDK timeline, progress hooks, and conversation history. These expose the public view of a user's conversation. Server-tool rows may show the real tool name with redacted arguments and an empty result; private state and full operator call payloads are not part of that public contract. See the redaction contract.
Operator traces can contain prompts, tool arguments, results, and user data that the public stream deliberately omits. Treat them as sensitive when sharing screenshots or debugging reports. Record the workspace, conversation ID, version, and failing call without copying credentials or unrelated user content into a ticket.
Token counts help explain work, but a client-side cost calculation is only an estimate. Use billing's server-reported figures for a user's wallet and metered usage, not a rate calculation over timeline rows. This guide does not define Inlay's commercial pricing.