> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# SIP

> You can make SIP calls to Vapi Assistants.

<Accordion title="1. Create an Assistant.">
  ## 1. Create an Assistant

  We'll create an assistant with `POST /assistant` endpoint. This is no different than creating an assistant for other transports.

  ```json
  {
  	"name": "My SIP Assistant",
  	"firstMessage": "Hello {{first_name}}, you've reached me over SIP. How can I help you today?"
  }

  ```
</Accordion>

<Accordion title="2. Create a SIP Phone Number.">
  ## 2. Create A SIP Phone Number

  We'll create a SIP phone number with `POST /phone-number` endpoint.

  ```json
  {
  	"provider": "vapi",
  	"sipUri": "sip:your_unique_user_name@sip.vapi.ai",
  	"assistantId": "your_assistant_id"
  }

  ```

  `sipUri` is the SIP URI of the phone number. It must be in the format `sip:username@sip.vapi.ai`. You are free to choose any username you like.
</Accordion>

<Accordion title="3. Start a SIP call.">
  ## 3. Start a SIP call.

  You can use any SIP softphone to test the Assistant. Examples include [Zoiper](https://www.zoiper.com/) or [Linphone](https://www.linphone.org/).

  You just need to dial `sip:your_unique_user_name@sip.vapi.ai` and the Assistant will answer your call.

  There is no authentication or SIP registration required.
</Accordion>

<Accordion title="4. Send SIP Headers to Fill Template Variables.">
  ## 4. Send SIP Headers to Fill Template Variables.

  To fill your template variables, you can send custom SIP headers.

  For example, to fill the `first_name` variable, you can send a SIP header `x-first_name: John`.

  The header name is case insensitive. So, `X-First_Name`, `x-first_name`, and `X-FIRST_NAME` are all the same.
</Accordion>

<Accordion title="5. Use a Custom Assistant For Each Call.">
  ## 5. Use a Custom Assistant For Each Call.

  You can use a custom assistant for SIP calls same as phone calls.

  Set the `assistantId` to `null` and the `serverUrl` to the URL of your server which will respond to the `assistant-request`.

  `PATCH /phone-number/:id`

  ```json
  {
  	"assistantId": null,
  	"serverUrl": "https://your_server_url"
  }
  ```

  Now, every time you make a call to this phone number, the server will receive a `assistant-request` event.
</Accordion>
