Skip to main content
Tuner only needs a SIP URI and (if your edge uses digest auth) a username and password. Any provider that issues those will work. The tabs below cover SIP setup and provider-specific Call-ID documentation for the most common platforms.
  1. Open Tuner → Agent SettingsSIP Settings.
  2. Paste SIP URI, Username, and Password exactly as your provider issued them (leave username/password empty if your edge does not use digest auth).
  3. Click Verify & Save. Tuner Agent Settings, SIP Settings
That’s it, no provider-specific steps required.

Sync the call back with the SIP ID

Placing the call is only half of simulation, Tuner also has to recognise the call your agent syncs back as the one it just dialled. To make that link, Tuner uses the SIP Call-ID that travels with the call.

The Call-ID may arrive under a different name

When Tuner dials your agent, it sends a standard SIP INVITE that contains a Call-ID header:
INVITE sip:your-agent@provider.example SIP/2.0
Call-ID: 2jf9wCCXfwgxKkTOfLcEsA5LD6f
...
Your SIP provider receives this INVITE, accepts the call, and captures that Call-ID. It then surfaces the value to your application, which you pass back to Tuner via the Create Call API or one of the Tuner SDKs. SIP is a standard, but every provider wraps it in their own platform. By the time the call reaches your application code, the original Call-ID header may have been renamed, nested inside a larger object, or even dropped entirely unless you opt in to forwarding it. Here are some real-world examples of how this happens:
  • Renamed field: A provider receives the SIP Call-ID but exposes it to your app as SipCallId, sip_call_id, or call_id. The value is the same, but the key is different from the original SIP header name.
  • Nested inside metadata: Instead of a top-level field, the Call-ID may appear inside a nested object like sip.headers["Call-ID"] or within a custom_headers list that you need to iterate through.
  • Not forwarded by default: Some providers split the call into two legs: an HTTP webhook (which receives SIP context) and a WebSocket (which carries the audio). The SIP fields may only be available on the webhook side, and you need to explicitly configure your webhook response to forward them to the WebSocket as custom parameters.
  • Replaced with a provider-native ID: If the provider does not forward the SIP Call-ID at all, your app may only see the provider’s own internal identifier (e.g. a CallSid, call_control_id, or call_sid). This is not the same as the original SIP Call-ID that Tuner sent, and simulation linking will not work unless you configure forwarding.
  • Regenerated across hops: If the call passes through multiple SIP intermediaries (e.g. a SIP bridge → a PBX → your provider), each hop may generate its own Call-ID. In these cases, look for a correlation header like X-CID or X-Correlation-Id that carries the original value across all hops.
The bottom line: don’t assume the original Call-ID will just be there. Check your provider’s documentation for how SIP headers are surfaced to your application, and verify that the value you’re sending back to Tuner matches the one Tuner originally sent. When in doubt, capture a test call and inspect the raw payload your application receives.

Passing the Call-ID back to Tuner

How you pass this value back depends on how you sync calls into Tuner:
  • LiveKit: follow the Connecting to LiveKit SDK guide. Pass the Call-ID value as the sip_correlation_id argument in the Tuner LiveKit plugin.
  • Pipecat: follow the Connecting to Pipecat SDK guide. Pass the Call-ID value as the sip_call_id argument in the Tuner Pipecat observer.
  • Custom integration (API): include the Call-ID value as sip_call_id in the payload you send to the Create Call API.
Without sip_call_id coming back on the synced call, the call still gets ingested, it just won’t be linked to its simulation row and will appear as ordinary production traffic instead.
Paste your SIP URI and credentials into Agent Settings → SIP Settings, click Verify & Save, and you’re ready to run simulations.

Run your first simulation

Configure your simulation mix and start a batch.