> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.phonic.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.phonic.ai/_mcp/server.

# Sip Outbound Call

POST https://api.phonic.ai/v1/conversations/sip/outbound_call
Content-Type: application/json

Initiates a SIP outbound call using user-supplied SIP credentials in headers.

Reference: https://docs.phonic.ai/api-reference/conversations/sip-outbound-call

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication header of the form `Bearer <PHONIC_API_KEY>`. Manage your API keys [here](https://phonic.co/api-keys).

## Request

### Headers

- `X-Sip-Address` (string, required) — SIP address of the user's SIP trunk. Required.
- `X-Sip-Auth-Username` (string, optional) — SIP auth username, if your provider requires it.
- `X-Sip-Auth-Password` (string, optional) — SIP auth password, if your provider requires it.

### Body (application/json)

This endpoint expects an object.

- `from_phone_number` (string, required) — Caller ID phone number in E.164 format.
- `to_phone_number` (string, required) — Destination phone number in E.164 format.
- `from_display_name` (string, optional) — Display name for the caller ID (the SIP `From` header) on this call. Sent only when non-empty. Whether it reaches the callee depends on your SIP carrier - carriers that forward the `From` display name (e.g. Telnyx) present it, while others (e.g. Twilio) drop it or override it with a CNAM lookup.
- `config` (OutboundCallConfig, optional) — When an `agent` is provided, these `config` options override the agent settings.
- `dry_run` (boolean, optional, default: false) — If true, validates the outbound call setup without placing a call. Returns HTTP 200 with `conversation_id` and `twilio_call_sid` set to null.
- `sip` (ConversationsSipOutboundCallPostRequestBodyContentApplicationJsonSchemaSip, optional) — SIP trunk settings for the outbound trunk created for this call.

## Response

### 200

Success response

- `conversations_sip_outbound_call_Response_200`

### 201

Call initiated successfully

- `conversation_id` (string, required) — The ID of the created conversation.
- `twilio_call_sid` (string, required) — The Twilio Call SID.
- `dry_run` (boolean, required) — Always false when a call was placed.

## Errors

### 400 Bad Request Error

Invalid query parameters or body, or missing required headers

- `PostConversationsSipOutboundCallRequestBadRequestError`

### 401 Unauthorized Error

Unauthorized

- `error` (BasicErrorError, optional)

### 409 Conflict Error

The call could not be completed. When the carrier rejected it, the `sip_status_code` and `sip_status` fields contain the carrier's SIP response details; calls that failed before reaching the carrier - `no_answer`, `call_ended` - carry only `message` and `code`. Also returned when the agent is disabled.

- `PostConversationsSipOutboundCallRequestConflictError`

### 429 Too Many Requests Error

Concurrency limit reached

- `error` (BasicErrorError, optional)

### 500 Internal Server Error

Internal server error

- `error` (BasicErrorError, optional)

## Types

### OutboundCallConfig

When an `agent` is provided, these `config` options override the agent settings.

- `agent` (string, optional) — The name of the agent to use for the call.
- `project` (string, optional, default: main) — The name of the project to use for the call.
- `generate_welcome_message` (boolean, optional, default: false) — When `true`, the welcome message will be automatically generated and the `welcome_message` field will be ignored.
- `is_welcome_message_interruptible` (boolean, optional, default: true) — When `false`, the welcome message will not be interruptible by the user.
- `welcome_message` (string, optional, nullable) — Message to play when the conversation starts. Can contain template variables like `{{customer_name}}`. Ignored when `generate_welcome_message` is `true`.
- `system_prompt` (string, optional, default: Respond in 1-2 sentences.) — Instructions for the conversation. Can contain template variables like `{{subject}}`.
- `template_variables` (map from string to string, optional) — Variables that can be used in the welcome message and the system prompt.
- `voice_id` (string, optional, default: sabrina) — The voice ID to use for the agent.
- `additional_voice_ids` (list of string, optional) — Additional voice IDs that, together with `voice_id`, form a voice set. The conversation is assigned one voice from the set, chosen at random with equal probability. Must not include `voice_id` and must not contain duplicates.
- `generate_no_input_poke_text` (boolean, optional, default: false) — Whether to have the no-input poke text be generated by AI.
- `no_input_poke_sec` (integer, optional, nullable) — Number of seconds of silence before sending a poke message. `null` disables the poke message.
- `no_input_poke_text` (string, optional, default: Are you still there?) — The message to send after the specified silence. Ignored when generate_no_input_poke_text is true.
- `no_input_end_conversation_sec` (integer, optional, default: 180) — Seconds of silence before ending the conversation.
- `default_language` (enum, optional) — ISO 639-1 language code that sets the agent's default language to recognize and speak. Welcome message and no input poke text should be in this language.
  - Allowed values: `ar`, `az`, `bg`, `bn`, `cs`, `da`, `de`, `el`, `en`, `es`, `fa`, `fi`, `fil`, `fr`, `gu`, `he`, `hi`, `hu`, `id`, `it`, `ja`, `ka`, `km`, `kn`, `ko`, `lt`, `lv`, `ml`, `mr`, `ms`, `ne`, `nl`, `no`, `pa`, `pl`, `pt`, `ro`, `ru`, `si`, `sk`, `sq`, `sv`, `sw`, `ta`, `te`, `th`, `tr`, `uk`, `ur`, `vi`, `yue`, `zh`
- `additional_languages` (list of enum, optional, default: []) — Array of additional ISO 639-1 language codes that the agent should be able to recognize and speak. Should not include `default_language`. When `multilingual_mode` is `"auto"`, a maximum of 2 additional languages is allowed.
  - Allowed values: `ar`, `az`, `bg`, `bn`, `cs`, `da`, `de`, `el`, `en`, `es`, `fa`, `fi`, `fil`, `fr`, `gu`, `he`, `hi`, `hu`, `id`, `it`, `ja`, `ka`, `km`, `kn`, `ko`, `lt`, `lv`, `ml`, `mr`, `ms`, `ne`, `nl`, `no`, `pa`, `pl`, `pt`, `ro`, `ru`, `si`, `sk`, `sq`, `sv`, `sw`, `ta`, `te`, `th`, `tr`, `uk`, `ur`, `vi`, `yue`, `zh`
- `multilingual_mode` (enum, optional, default: request) — If `"auto"`, each user audio is automatically identified for the language to respond in. If `"request"`, user must request to change language (recommended). If `"initial"` the first turn user audio determines the language for the rest of the conversation.
  - Allowed values: `auto`, `request`, `initial`
- `push_to_talk` (boolean, optional, default: false) — Push to talk mode. User must send mute/unmute messages to turn on/off listening to audio. Defaults to false.
- `intelligence_level` (enum, optional, default: standard) — The intelligence level of the agent. `high` uses a more capable model for more complex reasoning, while `standard` is optimized for lower latency.
  - Allowed values: `standard`, `high`
- `phonic_model` (enum, optional) — The Phonic speech-to-speech model to generate with. Omit it to use the current default model.
  - Allowed values: `phonic_v0_5`, `phonic_v1`, `phonic_v1_1`
- `boosted_keywords` (list of string, optional) — These words, or short phrases, will be more accurately recognized by the agent.
- `pronunciation_dictionary` (list of OutboundCallConfigPronunciationDictionaryItems, optional) — Array of `{ word, pronunciation }` entries. Words must be unique.
- `min_words_to_interrupt` (integer, optional, default: 1) — Minimum number of words required to interrupt the assistant.
- `tools` (list of OutboundCallConfigToolsItems, optional) — Array of built-in or custom tool names to use.
- `enable_redaction` (boolean, optional, default: false) — When `true`, PII and PHI are redacted from text transcripts (e.g. replaced with tags like `[PHONE]`) and bleeped from audio recordings after the conversation ends.
- `enable_watermarking` (boolean, optional, default: false) — When `true`, an inaudible watermark is embedded in the audio the agent generates.
- `model` (enum, optional, default: merritt) — The speech-to-speech model to use.
  - Allowed values: `merritt`
- `audio_speed` (double, optional, default: 1) — The audio speed of the agent.
- `background_noise` (enum, optional) — The background noise type. Can be "office", "call-center", "coffee-shop", or null.
  - Allowed values: `office`, `call-center`, `coffee-shop`
- `background_noise_level` (double, optional, default: 0) — The background noise level of the agent.
- `mcp_servers` (list of string, optional) — Array of MCP server names to use.
- `tasks` (list of Task, optional) — Array of task objects with `name` and `description` fields.
- `outbound_number_pool` (OutboundNumberPool, optional, nullable) — Pool of phone numbers used for outbound calls.
- `enable_assistant_backchannel` (boolean, optional, default: false) — When `true`, the assistant will produce backchannel responses (e.g. "mm-hmm") while the user is speaking.
- `assistant_backchannel_aggressiveness` (double, optional, default: 0.1) — How aggressively the assistant produces backchannel responses. Only relevant when `enable_assistant_backchannel` is `true`.
- `configuration_endpoint` (OutboundCallConfigConfigurationEndpoint, optional, nullable) — When not `null`, at the beginning of the conversation the agent will make a POST request to this endpoint to get configuration options.
- `additional_params` (map from string to any, optional) — Additional runtime parameters.
- `data_retention_policy` (DataRetentionPolicy, optional) — Controls how long transcripts and audio recordings are retained before deletion.
- `languages` (list of enum, optional, default: ["en"], deprecated) — Array of ISO 639-1 language codes that the agent should be able to recognize. This field is deprecated. Use `default_language` and `additional_languages` instead.
  - Allowed values: `ar`, `az`, `bg`, `bn`, `cs`, `da`, `de`, `el`, `en`, `es`, `fa`, `fi`, `fil`, `fr`, `gu`, `he`, `hi`, `hu`, `id`, `it`, `ja`, `ka`, `km`, `kn`, `ko`, `lt`, `lv`, `ml`, `mr`, `ms`, `ne`, `nl`, `no`, `pa`, `pl`, `pt`, `ro`, `ru`, `si`, `sk`, `sq`, `sv`, `sw`, `ta`, `te`, `th`, `tr`, `uk`, `ur`, `vi`, `yue`, `zh`

### ConversationsSipOutboundCallPostRequestBodyContentApplicationJsonSchemaSip

SIP trunk settings for the outbound trunk created for this call.

- `transport` (enum, optional, default: auto) — SIP signaling transport used for this call. The SIP address must not carry a `;transport=` parameter; set it here instead.
  - Allowed values: `auto`, `udp`, `tcp`, `tls`
- `media_encryption` (enum, optional, default: disabled) — Whether media (SRTP) encryption is used on this call.
  - Allowed values: `disabled`, `allowed`, `required`

### SipOutboundDryRunResponse

- `conversation_id` (any, required) — Always null when `dry_run` is true.
- `twilio_call_sid` (any, required) — Always null when `dry_run` is true.
- `dry_run` (boolean, required) — Always true for this response.

### SipOutboundCallInitiatedResponse

- `conversation_id` (string, required) — The ID of the created conversation.
- `twilio_call_sid` (string, required) — The Twilio Call SID.
- `dry_run` (boolean, required) — Always false when a call was placed.

### ValidationError

- `error` (ValidationErrorError, required)
- `param_errors` (map from string to string, required) — Parameter-specific validation errors

### BasicError

- `error` (BasicErrorError, optional)

### SipCallError

- `error` (SipCallErrorError, required)

### BasicErrorError

- `message` (string, required) — Error message
- `code` (string, optional) — Error code

### OutboundCallConfigPronunciationDictionaryItems

- `word` (string, required)
- `pronunciation` (string, required)

### OutboundCallConfigToolsItems

### Task

- `name` (string, required) — The name of the task.
- `description` (string, required) — The description of the task.

### OutboundNumberPool

Pool of phone numbers used for outbound calls.

- `active` (list of string, required) — E.164 formatted phone numbers available for outbound calls.
- `blocked` (list of string, required) — E.164 formatted phone numbers that are blocked from being used.

### OutboundCallConfigConfigurationEndpoint

When not `null`, at the beginning of the conversation the agent will make a POST request to this endpoint to get configuration options.

- `url` (string, required) — URL to call. Must be a publicly routable HTTPS URL without embedded credentials.
- `headers` (map from string to string, optional) — Object of key-value pairs.
- `timeout_ms` (integer, optional, default: 3000) — Timeout in milliseconds for the endpoint call.

### DataRetentionPolicy

Controls how long transcripts and audio recordings are retained before deletion. When `zero_data_retention` is `true`, nothing is retained and `transcripts`/`audio_recordings` are omitted.

### ValidationErrorError

- `message` (string, required) — Error message

### SipCallErrorError

- `message` (string, required) — Human-readable error message.
- `code` (enum, required) — Machine-readable error code.
  - Allowed values: `sip_call_failed`, `sip_auth_failed`, `invalid_phone_number`
- `sip_status_code` (integer, required) — The SIP response status code from the carrier (e.g. 403, 486, 603).
- `sip_status` (string, required) — The SIP response reason phrase from the carrier (e.g. "Network Blocked", "Trunk CPS limit exceeded").

### DataRetentionPolicy0

Zero data retention mode. No transcripts or audio recordings are retained.

- `zero_data_retention` (boolean, required) — When `true`, no transcripts or audio recordings are retained.

### DataRetentionPolicy1

Standard data retention with configurable deletion windows.

- `zero_data_retention` (boolean, required) — Must be `false` for standard data retention.
- `transcripts` (DataRetentionPolicyOneOf1Transcripts, required)
- `audio_recordings` (DataRetentionPolicyOneOf1AudioRecordings, required)

### DataRetentionPolicyOneOf1Transcripts

- `delete_after_hours` (integer, required, nullable) — Number of hours after which transcripts are deleted. Null means transcripts are retained indefinitely.

### DataRetentionPolicyOneOf1AudioRecordings

- `delete_after_hours` (integer, required, nullable) — Number of hours after which audio recordings are deleted. Null means audio recordings are retained indefinitely.

## Examples

### Dry run response

**Request**

```json
{
  "from_phone_number": "string",
  "to_phone_number": "string"
}
```

**Response**

```json
{
  "conversation_id": null,
  "twilio_call_sid": null,
  "dry_run": true
}
```

**SDK Code**

```python Dry run response
import requests

url = "https://api.phonic.ai/v1/conversations/sip/outbound_call"

payload = {
    "from_phone_number": "string",
    "to_phone_number": "string"
}
headers = {
    "X-Sip-Address": "X-Sip-Address",
    "Authorization": "Bearer <apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Dry run response
const url = 'https://api.phonic.ai/v1/conversations/sip/outbound_call';
const options = {
  method: 'POST',
  headers: {
    'X-Sip-Address': 'X-Sip-Address',
    Authorization: 'Bearer <apiKey>',
    'Content-Type': 'application/json'
  },
  body: '{"from_phone_number":"string","to_phone_number":"string"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Dry run response
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.phonic.ai/v1/conversations/sip/outbound_call"

	payload := strings.NewReader("{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("X-Sip-Address", "X-Sip-Address")
	req.Header.Add("Authorization", "Bearer <apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Dry run response
require 'uri'
require 'net/http'

url = URI("https://api.phonic.ai/v1/conversations/sip/outbound_call")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-Sip-Address"] = 'X-Sip-Address'
request["Authorization"] = 'Bearer <apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}"

response = http.request(request)
puts response.read_body
```

```java Dry run response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.phonic.ai/v1/conversations/sip/outbound_call")
  .header("X-Sip-Address", "X-Sip-Address")
  .header("Authorization", "Bearer <apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}")
  .asString();
```

```php Dry run response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.phonic.ai/v1/conversations/sip/outbound_call', [
  'body' => '{
  "from_phone_number": "string",
  "to_phone_number": "string"
}',
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
    'Content-Type' => 'application/json',
    'X-Sip-Address' => 'X-Sip-Address',
  ],
]);

echo $response->getBody();
```

```csharp Dry run response
using RestSharp;

var client = new RestClient("https://api.phonic.ai/v1/conversations/sip/outbound_call");
var request = new RestRequest(Method.POST);
request.AddHeader("X-Sip-Address", "X-Sip-Address");
request.AddHeader("Authorization", "Bearer <apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Dry run response
import Foundation

let headers = [
  "X-Sip-Address": "X-Sip-Address",
  "Authorization": "Bearer <apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "from_phone_number": "string",
  "to_phone_number": "string"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.phonic.ai/v1/conversations/sip/outbound_call")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Outbound call response

**Request**

```json
{
  "from_phone_number": "string",
  "to_phone_number": "string"
}
```

**Response**

```json
{
  "conversation_id": "conv_12cf6e88-c254-233e-a149-b2f1bdd22783",
  "twilio_call_sid": "CA1234567890",
  "dry_run": false
}
```

**SDK Code**

```python Outbound call response
import requests

url = "https://api.phonic.ai/v1/conversations/sip/outbound_call"

payload = {
    "from_phone_number": "string",
    "to_phone_number": "string"
}
headers = {
    "X-Sip-Address": "X-Sip-Address",
    "Authorization": "Bearer <apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Outbound call response
const url = 'https://api.phonic.ai/v1/conversations/sip/outbound_call';
const options = {
  method: 'POST',
  headers: {
    'X-Sip-Address': 'X-Sip-Address',
    Authorization: 'Bearer <apiKey>',
    'Content-Type': 'application/json'
  },
  body: '{"from_phone_number":"string","to_phone_number":"string"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Outbound call response
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.phonic.ai/v1/conversations/sip/outbound_call"

	payload := strings.NewReader("{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("X-Sip-Address", "X-Sip-Address")
	req.Header.Add("Authorization", "Bearer <apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Outbound call response
require 'uri'
require 'net/http'

url = URI("https://api.phonic.ai/v1/conversations/sip/outbound_call")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-Sip-Address"] = 'X-Sip-Address'
request["Authorization"] = 'Bearer <apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}"

response = http.request(request)
puts response.read_body
```

```java Outbound call response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.phonic.ai/v1/conversations/sip/outbound_call")
  .header("X-Sip-Address", "X-Sip-Address")
  .header("Authorization", "Bearer <apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}")
  .asString();
```

```php Outbound call response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.phonic.ai/v1/conversations/sip/outbound_call', [
  'body' => '{
  "from_phone_number": "string",
  "to_phone_number": "string"
}',
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
    'Content-Type' => 'application/json',
    'X-Sip-Address' => 'X-Sip-Address',
  ],
]);

echo $response->getBody();
```

```csharp Outbound call response
using RestSharp;

var client = new RestClient("https://api.phonic.ai/v1/conversations/sip/outbound_call");
var request = new RestRequest(Method.POST);
request.AddHeader("X-Sip-Address", "X-Sip-Address");
request.AddHeader("Authorization", "Bearer <apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Outbound call response
import Foundation

let headers = [
  "X-Sip-Address": "X-Sip-Address",
  "Authorization": "Bearer <apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "from_phone_number": "string",
  "to_phone_number": "string"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.phonic.ai/v1/conversations/sip/outbound_call")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Outbound call response

**Request**

```json
{
  "from_phone_number": "string",
  "to_phone_number": "string"
}
```

**Response**

```json
{
  "conversation_id": "conv_12cf6e88-c254-233e-a149-b2f1bdd22783",
  "twilio_call_sid": "CA1234567890",
  "dry_run": false
}
```

**SDK Code**

```python Outbound call response
import requests

url = "https://api.phonic.ai/v1/conversations/sip/outbound_call"

payload = {
    "from_phone_number": "string",
    "to_phone_number": "string"
}
headers = {
    "X-Sip-Address": "X-Sip-Address",
    "Authorization": "Bearer <apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Outbound call response
const url = 'https://api.phonic.ai/v1/conversations/sip/outbound_call';
const options = {
  method: 'POST',
  headers: {
    'X-Sip-Address': 'X-Sip-Address',
    Authorization: 'Bearer <apiKey>',
    'Content-Type': 'application/json'
  },
  body: '{"from_phone_number":"string","to_phone_number":"string"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Outbound call response
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.phonic.ai/v1/conversations/sip/outbound_call"

	payload := strings.NewReader("{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("X-Sip-Address", "X-Sip-Address")
	req.Header.Add("Authorization", "Bearer <apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Outbound call response
require 'uri'
require 'net/http'

url = URI("https://api.phonic.ai/v1/conversations/sip/outbound_call")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-Sip-Address"] = 'X-Sip-Address'
request["Authorization"] = 'Bearer <apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}"

response = http.request(request)
puts response.read_body
```

```java Outbound call response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.phonic.ai/v1/conversations/sip/outbound_call")
  .header("X-Sip-Address", "X-Sip-Address")
  .header("Authorization", "Bearer <apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}")
  .asString();
```

```php Outbound call response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.phonic.ai/v1/conversations/sip/outbound_call', [
  'body' => '{
  "from_phone_number": "string",
  "to_phone_number": "string"
}',
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
    'Content-Type' => 'application/json',
    'X-Sip-Address' => 'X-Sip-Address',
  ],
]);

echo $response->getBody();
```

```csharp Outbound call response
using RestSharp;

var client = new RestClient("https://api.phonic.ai/v1/conversations/sip/outbound_call");
var request = new RestRequest(Method.POST);
request.AddHeader("X-Sip-Address", "X-Sip-Address");
request.AddHeader("Authorization", "Bearer <apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"from_phone_number\": \"string\",\n  \"to_phone_number\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Outbound call response
import Foundation

let headers = [
  "X-Sip-Address": "X-Sip-Address",
  "Authorization": "Bearer <apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "from_phone_number": "string",
  "to_phone_number": "string"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.phonic.ai/v1/conversations/sip/outbound_call")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```