livqenoDocs

BackendTelemetry & privacy

Telemetry & privacy

What the client SDKs report, what they never report, and how to turn it off.

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:

EventWhen
connection_startedjoin() was called
connectedThe room finished joining
connection_failedThe join did not complete
reconnecting / reconnectedAn automatic reconnect
participant_joined / participant_leftSomeone else joined or left
track_published / track_unpublishedSomeone else's tracks changed
statsPer-track bitrate, packet loss, jitter, RTT, codec, resolution, frame rate
errorA 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 telemetryUrl in 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.