# SIP Destinations

> Save the SIP URI of your PBX or voice-agent platform once as an Edesy SIP destination, test it, and reuse it on any number. Portal steps and the /v1/sip-destinations API.

Source: https://edesy.in/docs/sip-trunking/inbound/sip-destinations

A SIP destination is a saved SIP URI, such as your LiveKit Cloud inbound address or your PBX, that Edesy dials when a call arrives on one of your numbers. You save it once with a name and a transport, test it with one click, and then pick it from a dropdown on as many numbers as you like.

## How it works

1. Your platform gives you an inbound SIP URI (for example, LiveKit shows one when you create an inbound trunk).
2. You save it in Edesy as a destination.
3. You click **Test call** to confirm it answers.
4. You choose it as the inbound target on one or more numbers. See [Route a Number to SIP](https://edesy.in/docs/sip-trunking/inbound/route-a-number-to-sip).

## Add a destination in the portal

Open **SIP → Inbound destinations → New destination**:

| Field | What to enter |
|---|---|
| Name | A label shown in the routing dropdown, such as `My LiveKit Cloud` |
| SIP URI | Starts with `sip:` or `sips:`, for example `sip:+91XXXXXXXXXX@your-project.sip.example.com` |
| Transport | **Auto** (recommended), UDP, TCP or TLS |
| Notes | Optional, for your team |

> **Tip:** Include a user part (the number before `@`). Most agent platforms, including Retell, Vapi and LiveKit, pick the agent from the dialled number, so a bare host often will not connect. The portal warns you when the user part is missing.

> **Note:** TLS signalling and SRTP media are available on request. Contact support before saving a destination that only accepts TLS.

## With the API

| Method | Path | Purpose |
|---|---|---|
| `GET` | `/v1/sip-destinations` | List saved destinations |
| `POST` | `/v1/sip-destinations` | Create a destination |
| `PATCH` | `/v1/sip-destinations/:id` | Update name, URI, transport or notes |
| `DELETE` | `/v1/sip-destinations/:id` | Delete a destination |
| `POST` | `/v1/sip-destinations/:id/test-call` | Place a test call to it |

```bash
curl -X POST https://voice-api.edesy.in/v1/sip-destinations \
  -H "Authorization: Bearer sk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My LiveKit Cloud",
    "sip_uri": "sip:+91XXXXXXXXXX@your-project.sip.example.com",
    "transport": "auto",
    "notes": "Production project"
  }'
```

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | Label for the destination |
| `sip_uri` | string | yes | `sip:` or `sips:` URI |
| `transport` | string | no | `auto` (default), `udp`, `tcp` or `tls` |
| `notes` | string | no | Free text |

The URI is forwarded as saved, including a non-standard port (`:9060`) or a `;transport=` parameter.

## Platform-specific values

| Platform | Typical SIP URI | Notes |
|---|---|---|
| LiveKit Cloud | `sip:<number>@<project>.sip.livekit.cloud` | From your LiveKit inbound trunk. See [LiveKit Cloud](https://edesy.in/docs/sip-trunking/guides/livekit-cloud). |
| xAI Grok | `sip:<number>@sip.voice.x.ai` | Leave Transport on Auto. See [xAI Grok](https://edesy.in/docs/sip-trunking/guides/xai-grok-voice-agent). |
| Retell | `sip:<number>@sip.retellai.com` | See [Vapi, Retell and Bolna](https://edesy.in/docs/sip-trunking/guides/vapi-retell-bolna). |
| Vapi | The SIP URI shown in Vapi | Usually needs credentials or an `X-Vapi-Secret` header, set on the number |
| Dograh | From Dograh's SIP connectivity panel | See [Dograh](https://edesy.in/docs/sip-trunking/guides/dograh). |
| Your PBX | `sip:<number>@pbx.example.com:5060` | Allow Edesy's signalling IP on the PBX firewall |

## FAQ

### Can one destination serve many numbers?

Yes. That is the point of saving it. When the URI changes, edit the destination once.

### Where do I set a username and password for the destination?

On each number's inbound routing, under **SIP authentication**. See [Route a Number to SIP](https://edesy.in/docs/sip-trunking/inbound/route-a-number-to-sip).

### Does the caller hear ringing before my agent answers?

The call is bridged with answer-on-bridge, so the caller is connected only when your endpoint answers.

### What happens if my endpoint does not answer?

The call fails on the caller's side with the response your endpoint returned. Check it with a [test call](https://edesy.in/docs/sip-trunking/inbound/test-call).
