Use the live and retained paths together
The live stream and retained archive are independent delivery paths:- a frame observed live is not proof that the same record was durably retained;
- a retained span is not a byte-for-byte replay of its live
startandendmessages; - reconnect can replay frames you already processed; and
- moving to the current live tail does not repair an earlier gap.
GET /phones/sessions/{session_id}/frames to reconcile after a gap and after
the session ends.
Resume without assuming exactly-once delivery
Opt in to cursor checkpoints withresume=1. Store each opaque CURSOR value
only after you have processed every frame that came before it.
On reconnect, preserve the returned URL and its existing parameters. Add or
replace resume=1 and cursor=<opaque-value>. Never parse, construct, or
depend on the cursor’s encoding.
(trace_id, span_id, phase)for a span;- stable session, span, timestamp, and body fields for a log; and
- the complete normalized JSON for an unknown frame.
Recover after a replay gap
The live replay window is bounded, but Axilio does not publish a guaranteed duration or entry count. If the stream sends:- Retrieve every available retained page for the session.
- Deduplicate the retained frames against data you already processed.
- Rebuild the local trace from the reconciled record.
- If the session remains active, attach again and resume from a current checkpoint.
Gapped(). CLI follow mode and the
Python helper perform more reconciliation for you.
Reconnect with a bounded budget
Current first-party readers treat abrupt loss and observed WebSocket1001,
1011, or 1013 closes as transient while a session is active. They use
bounded exponential backoff with jitter.
For a raw client:
- retry transient connection loss with bounded backoff and the last completed cursor;
- treat a normal
1000close with reasonsession endedas terminal; - treat an attach
401as a credential problem; - treat an attach
403as terminal for that live URL; and - switch to retained retrieval when the session has ended.
These are observed current signals and first-party retry behavior, not an
exhaustive versioned close-code contract. No public numeric
size, throughput, viewer, buffer, or slow-consumer limit is currently
published.
Account for interface differences
Do not describe unreleased SDK behavior as available. Check the package version
used by your application before relying on a compatibility fix.
Troubleshoot common symptoms
For REST failures, parse the Problem Details response and follow
Errors. A missing session and one outside your
organization are intentionally indistinguishable. Do not interpret an
authorization, validation, rate-limit, or internal failure as an empty trace.
Build a tolerant reader
A resilient custom reader should:- accept one frame object or an array from the live transport, while recognizing that current producers normally send individual objects;
- ignore or preserve unknown fields within a known frame;
- treat new
span_typeandlog_typevalues as additive; - preserve an unknown nonempty string
kindas raw JSON; - reject malformed data without discarding other valid frames when possible;
- persist cursors only after processing preceding frames;
- tolerate replayed frames;
- paginate the retained archive to
total; and - avoid relying on a deterministic order among frames with equal timestamps.
Claims to avoid
Do not build or document an assumption that:- every produced frame reaches every live subscriber;
- every event appears in retained history;
- every live span receives an end frame;
- replay is unlimited or time-guaranteed;
- delivery is exactly once;
- the Dashboard displays every retained frame or raw attribute;
- all readers preserve an unknown top-level frame kind;
- zero cost proves finalized free usage; or
- the access-expiration timestamp is a physical-deletion deadline.
Next steps
Live telemetry
Connect, mint access, and follow an active session.
Retrieve telemetry
Refill from the retained record and page to completion.
Frame reference
Build a version-aware frame decoder.
Data controls
Control capture and protect sensitive Telemetry data.