Telemetry is the small reports your users' apps send about their calls: when they joined, whether the connection failed, and how good the network was. This page explains what is sent, why, and how to turn it off.
Why it exists. When a user says "the call didn't work", you usually weren't there to see it. Telemetry lets you find out afterwards: you can look up that user's connection in the dashboard or the CLI, and see that, for example, their packet loss jumped to 30% before they dropped.
Who sends it. The RTC client SDK (@livqeno/rtc, and the SDKs built on
it) sends it automatically from your app while a call is running. Your
backend doesn't do anything. You read the results in the dashboard, the CLI,
and Diagnostics.
What is sent
Eleven event types, all about the connection itself. None of them contain media or messages:
| Event | When |
|---|---|
connection_started | join() was called |
connected | The room finished joining |
connection_failed | The join did not complete |
reconnecting / reconnected | An automatic reconnect |
participant_joined / participant_left | Someone else joined or left |
track_published / track_unpublished | Someone else's tracks changed |
stats | Per-track bitrate, packet loss, jitter, RTT, codec, resolution, frame rate |
error | A typed RTCErrorCode and its message |
It also sends the SDK version, platform, and browser.
What is never sent
- No media. No audio, video, or frames.
- No message content.
- No credentials. Not the token, not TURN credentials, not an API key.
- No IP addresses from the SDK. (The API sees the request's source address, like any HTTP server.)
So the getDiagnostics() output is safe to paste into a bug report.
How it is sent
- Telemetry is sent to
/v1/telemetry/events. - It uses the same RTC token as the call. No extra credential.
- The address comes from
telemetryUrlin the token response. The SDK never hardcodes a host.
It never breaks a call
Telemetry is best-effort. If a request fails, it's dropped, not retried. If the endpoint is down, the call works normally.
Turn it off
You might turn it off for a privacy-sensitive app, or if your own policy doesn't allow it. In your browser app, when creating the client:
const client = createRTCClient({
token, endpoint, iceServers,
telemetry: false,
});Or just don't pass telemetryUrl to the client. RTC works either way.
What you lose: connection history and error details for those clients.
They won't show in the dashboard, in livqeno connections inspect, or in
livqeno errors list. Nothing else changes.
How long it's kept
Connection and error records are deleted after 30 days by default. Set by
OBSERVABILITY_CONNECTION_RETENTION_DAYS and
OBSERVABILITY_ERROR_RETENTION_DAYS.
Next steps
- Diagnostics: read the same data live, inside your app, for example to show a "poor connection" warning.
- Connection: what a connection record is.
- Observability: how to use this data to debug calls in production.