Hi team
— LiveKit Cloud customer running voice agents over SIP (outbound telephony at meaningful volume). Looking for a supported way to pull the per-call PCAP (or the metadata inside it) programmatically.
Why we want it
We grade carrier/route quality per call. From our own dial events we already track ASR / ACD / PDD / MOS / SHAKEN / hangup-cause. The one thing we can’t get from attributes, CDR, or the participant API is the far-end (carrier) RTP media IP and per-packet stats — which are exactly what you need to spot bad routes: hang-up boxes, anchored/relayed media, one-way audio, and abnormal loss/jitter clustered to a media endpoint.
The PCAP has all of this. We downloaded one from the dashboard (Telephony → Calls → Download) and parsed it offline — from a single call we cleanly extracted the far-end media IP:port, negotiated codec, RTP packet counts + directionality, sequence-loss %, and the media-vs-signaling IP split (anchoring signal). Great data. We only need the packet metadata, not the audio.
The gap — we can’t automate it
- The dashboard Download button calls
cloud_protocol.AnalyticsService/GetSipPcapFile, which authenticates with a browser session token, not a project API key/secret — and it isn’t in the open-source server SDKs or thelkCLI. - The server SDK (
livekit-api) has noListSIPCallInfo/GetSIPCallInfomethod, so we can’t fetchSIPCallInfo(which is wherepcap_file_linklives). - The webhook event set doesn’t appear to include a SIP call-info / PCAP event.
So today the PCAP looks like a dashboard-only, manual capability.
The ask
- Is there a supported, API-key-authenticated way to (a) list/get
SIPCallInfoper call and (b) fetch the PCAP (or a presignedpcap_file_link)? - If not today — could
pcap_file_link(plusto_uri/from_uri,audio_codec) be delivered via a SIP webhook event, or exposed through a server RPC? Either would let us build a small “CDR-style” enrichment job. - Any guidance on PCAP retention window, and whether PCAP capture is on by default for Cloud SIP (or needs enabling)?
We’d sample/target (suspect carriers/DIDs, rolling sample) — not firehose every call — and store only derived metadata. Happy to share more about the use case if helpful. Thanks! ![]()