> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Hantera ett utgående samtal via SIP-trunk

POST https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call
Content-Type: application/json

Hantera ett utgående samtal via SIP-trunk

Reference: https://elevenlabs.io/docs/eleven-agents/api-reference/sip-trunk/outbound-call

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Body (application/json)

This endpoint expects an object.

- `agent_id` (string, required)
- `agent_phone_number_id` (string, required)
- `to_number` (string, required)
- `conversation_initiation_client_data` (ConversationInitiationClientDataRequestInput, optional)
- `telephony_call_config` (TelephonyCallConfigInput, optional)

## Response

### 200

Lyckat svar

- `success` (boolean, required)
- `message` (string, required)
- `conversation_id` (string, optional)
- `sip_call_id` (string, optional)

## Errors

### 422 Sip Trunk Outbound Call Request Unprocessable Entity Error

Valideringsfel

- `detail` (list of ValidationError, optional)

## Types

### ConversationInitiationClientDataRequestInput

- `conversation_config_override` (ConversationConfigClientOverrideInput, optional)
- `custom_llm_extra_body` (map from string to any, optional)
- `user_id` (string, optional) — ID för slutanvändaren som deltar i den här konversationen (för identifiering av agentägarens användare)
- `source_info` (ConversationInitiationSourceInfo, optional) — Information om källan till att konversationen startades
- `branch_id` (string, optional) — ID för den agentgren som ska användas för den här konversationen
- `environment` (string, optional) — Miljö att använda för att lösa miljövariabler
- `starting_workflow_node_id` (string, optional) — Om angivet startar workflowet vid detta nod-ID i stället för standardingången
- `procedure_ids` (list of string, optional) — Om angivet är endast dessa procedurer tillgängliga för startagenten. Varje ID måste vara kopplat till agenten; okända ID:n gör att konversationen inte kan starta. En tom lista inaktiverar alla agentens procedurer. Tillämpas inte efter en agentöverföring. Kräver enable_procedure_ids_from_client.
- `dynamic_variables` (map from string to any, optional)

### TelephonyCallConfigInput

- `ringing_timeout_secs` (integer, optional, default: 60) — Hur länge mottagaren ska ringas innan försöket avbryts, i sekunder. Observera att detta även begränsas av leverantörens egna begränsningar.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Om samtalet ska spelas in med Twilios samtalsinspelning. Ignoreras för leverantörer som inte är Twilio. Inspelningar lagras på ditt Twilio-konto.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional) — Konfiguration för Twilios operatörsnivåbaserade detektering av telefonsvarare (AMD). Utelämna eller ange null för att inaktivera den. Ignoreras för leverantörer som inte är Twilio och för inkommande samtal. Resultatet levereras som en egen webhook-händelse, `answering_machine_detection`, vilket kräver att händelsen är aktiverad i inställningarna för workspace- eller agentwebhookar; den ingår inte i samtalet eller webhooken efter samtalet. Detekteringen körs asynkront och fördröjer därför aldrig starten av samtalet, och resultatet kan komma när som helst under samtalet – med `detect_message_end`, även efter att det har avslutats. Twilio fakturerar AMD separat.

### ValidationError

- `loc` (list of ValidationErrorLocItem, required)
- `msg` (string, required)
- `type` (string, required)

### ConversationConfigClientOverrideInput

- `asr` (AsrConversationalConfigOverride, optional) — Konfiguration för konversationsbaserad transkribering
- `turn` (TurnConfigOverride, optional) — Konfiguration för turdetektering
- `tts` (TtsConversationalConfigOverride, optional) — Konfiguration för konversationsbaserad Text to Speech
- `conversation` (ConversationConfigOverride, optional) — Konfiguration för samtalshändelser
- `agent` (AgentConfigOverrideInput, optional) — Agentspecifik konfiguration

### ConversationInitiationSourceInfo

Information om källan till att konversationen startades

- `source` (enum, optional, default: unknown) — Källa för konversationsinitieringen
  - Allowed values: `unknown`, `android_sdk`, `node_js_sdk`, `react_native_sdk`, `react_sdk`, `js_sdk`, `python_sdk`, `widget`, `sip_trunk`, `twilio`, `exotel`, `genesys`, `avaya`, `audiocodes`, `swift_sdk`, `whatsapp`, `twilio_sms`, `flutter_sdk`, `zendesk_integration`, `slack_integration`, `telegram_integration`, `intercom_integration`, `freshdesk_integration`, `salesforce_integration`, `template_preview`, `genesys_bot_connector`, `subagent_tool`
- `version` (string, optional) — SDK-versionsnumret

### TwilioMachineDetectionConfig

Hur Twilios operatörsnivåidentifiering av telefonsvarare (AMD) ska köras i ett samtal.

- `mode` (enum, optional, default: enable) — Hur noggrann identifieringen ska vara. `enable` returnerar ett besked så snart Twilio kan skilja en människa från en maskin. `detect_message_end` väntar också tills röstmeddelandets hälsning är klar, vilket ger beskeden `machine_end_*`, men returnerar ett resultat senare.
  - Allowed values: `enable`, `detect_message_end`

### ValidationErrorLocItem

### AsrConversationalConfigOverride

- `keywords` (list of string, optional) — Nyckelord att öka förutsägelsesannolikheten för

### TurnConfigOverride

- `soft_timeout_config` (SoftTimeoutConfigOverride, optional) — Konfiguration för mjuk timeout. Ger omedelbar återkoppling under längre LLM-svar.

### TtsConversationalConfigOverride

- `model_id` (enum, optional, default: eleven_v4_turbo) — Modellen som ska användas för TTS
  - Allowed values: `eleven_turbo_v2`, `eleven_turbo_v2_5`, `eleven_flash_v2`, `eleven_flash_v2_5`, `eleven_multilingual_v2`, `eleven_v3_conversational`, `eleven_v4`, `eleven_v4_turbo`
- `voice_id` (string, optional) — Röst-ID:t som ska användas för TTS
- `supported_voices` (list of SupportedVoice, optional) — Ytterligare röster som stöds för agenten
- `stability` (double, optional) — Stabiliteten hos genererat tal
- `speed` (double, optional) — Hastigheten på genererat tal
- `similarity_boost` (double, optional) — Likhetsförstärkningen för genererat tal
- `pronunciation_dictionary_locators` (list of PydanticPronunciationDictionaryVersionLocator, optional) — Uttalsordbokens lokaliserare

### ConversationConfigOverride

- `text_only` (boolean, optional) — Om den är aktiverad bearbetas inte ljudet och endast text används. Använd detta för att undvika ljudprissättning.
- `max_duration_seconds` (integer, optional) — En konversations maximala längd i sekunder

### AgentConfigOverrideInput

- `first_message` (string, optional) — Om det inte är tomt är detta det första meddelandet agenten säger. Om det är tomt väntar agenten på att användaren ska inleda samtalet.
- `language` (string, optional) — Agentens språk – används för ASR och TTS
- `max_conversation_duration_message` (string, optional) — Om det inte är tomt är detta meddelandet agenten skickar när den maximala samtalslängden har uppnåtts.
- `prompt` (PromptAgentApiModelOverrideInput, optional) — Prompten för agenten

### SoftTimeoutConfigOverride

- `message` (string, optional) — Meddelande att visa när den första mjuka tidsgränsen nås medan du väntar på ett LLM-svar. Stöder dynamiska variabler (till exempel \{\{system\_\_time}}, \{\{custom\_variable}}).
- `additional_soft_timeout_messages` (list of string, optional) — Ytterligare statiska utfyllnadsmeddelanden för efterföljande mjuka tidsgränser i samma LLM-generering. Den första tidsgränsen använder `message`. Om färre meddelanden är konfigurerade än `max_soft_timeouts_per_generation` upprepas det senast konfigurerade meddelandet. Annars används en inbyggd utfyllnadstext.

### SupportedVoice

- `label` (string, required)
- `voice_id` (string, required)
- `description` (string, optional)
- `language` (string, optional)
- `model_family` (enum, optional)
  - Allowed values: `turbo`, `flash`, `multilingual`, `v3_conversational`, `v4`, `v4_turbo`
- `optimize_streaming_latency` (integer, optional)
- `stability` (double, optional)
- `speed` (double, optional)
- `similarity_boost` (double, optional)

### PydanticPronunciationDictionaryVersionLocator

En pekare så att andra dokument kan referera till ett specifikt lexikon och dess version. Det här är en pydantic-version av PronunciationDictionaryVersionLocatorDBModel. Krävs för kompatibilitet med övriga datamodeller för agenter.

- `pronunciation_dictionary_id` (string, required) — ID:t för uttalsordlistan
- `version_id` (string, optional) — ID:t för versionen av uttalsordlistan

### PromptAgentApiModelOverrideInput

- `prompt` (string, optional) — Prompten för agenten
- `llm` (enum, optional) — Den LLM som ska frågas med prompten och chatthistoriken. Vid användning av dataresidens måste LLM:en stödjas i dataresidensmiljön.
  - Allowed values: `gpt-4o-mini`, `gpt-4o`, `gpt-4`, `gpt-4-turbo`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-5`, `gpt-5.1`, `gpt-5.2`, `gpt-5.2-chat-latest`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.5`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, `gpt-6.1-sol`, `gpt-5-mini`, `gpt-5-nano`, `gpt-3.5-turbo`, `gemini-1.5-pro`, `gemini-1.5-flash`, `gemini-2.0-flash`, `gemini-2.0-flash-lite`, `gemini-2.5-flash-lite`, `gemini-2.5-flash`, `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3.1-flash-lite`, `gemini-3.5-flash`, `gemini-3.5-flash-lite`, `gemini-3.6-flash`, `gemini-3.7-flash`, `gemini-3.8-flash`, `claude-sonnet-4-5`, `claude-opus-4-7`, `claude-opus-4-8`, `claude-opus-5`, `claude-opus-5-5`, `claude-sonnet-4-6`, `claude-sonnet-5`, `claude-sonnet-5-5`, `claude-sonnet-4`, `claude-haiku-4-5`, `claude-3-7-sonnet`, `claude-3-5-sonnet`, `claude-3-5-sonnet-v1`, `claude-3-haiku`, `grok-beta`, `custom-llm`, `qwen3-4b`, `qwen3-30b-a3b`, `qwen36-35b-a3b`, `qwen35-397b-a17b`, `gpt-oss-20b`, `gpt-oss-120b`, `glm-45-air-fp8`, `glm-52`, `deepseek-v41-flash`, `gemini-2.5-flash-preview-09-2025`, `gemini-2.5-flash-lite-preview-09-2025`, `gemini-2.5-flash-preview-05-20`, `gemini-2.5-flash-preview-04-17`, `gemini-2.5-flash-lite-preview-06-17`, `gemini-2.0-flash-lite-001`, `gemini-2.0-flash-001`, `gemini-1.5-flash-002`, `gemini-1.5-flash-001`, `gemini-1.5-pro-002`, `gemini-1.5-pro-001`, `claude-sonnet-4@20250514`, `claude-sonnet-4-5@20250929`, `claude-haiku-4-5@20251001`, `claude-3-7-sonnet@20250219`, `claude-3-5-sonnet@20240620`, `claude-3-5-sonnet-v2@20241022`, `claude-3-haiku@20240307`, `gpt-5-2025-08-07`, `gpt-5.1-2025-11-13`, `gpt-5.2-2025-12-11`, `gpt-5.4-2026-03-05`, `gpt-5.4-mini-2026-03-17`, `gpt-5.4-nano-2026-03-17`, `gpt-5.5-2026-04-23`, `gpt-5-mini-2025-08-07`, `gpt-5-nano-2025-08-07`, `gpt-4.1-2025-04-14`, `gpt-4.1-mini-2025-04-14`, `gpt-4.1-nano-2025-04-14`, `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-11-20`, `gpt-4o-2024-08-06`, `gpt-4o-2024-05-13`, `gpt-4-0613`, `gpt-4-0314`, `gpt-4-turbo-2024-04-09`, `gpt-3.5-turbo-0125`, `gpt-3.5-turbo-1106`, `watt-tool-8b`, `watt-tool-70b`
- `tool_ids` (list of string, optional) — En lista över ID:n för verktyg som används av agenten
- `native_mcp_server_ids` (list of string, optional) — En lista med Native MCP-server-ID:n som agenten ska använda
- `knowledge_base` (list of KnowledgeBaseLocator, optional) — En lista med kunskapsbaser som agenten ska använda

### KnowledgeBaseLocator

- `type` (enum, required) — Typen av kunskapsbas
  - Allowed values: `file`, `url`, `text`, `folder`
- `name` (string, required) — Namnet på kunskapsbasen
- `id` (string, required) — ID:t för kunskapsbasen
- `usage_mode` (enum, optional, default: auto) — Användningsläget för kunskapsbasen
  - Allowed values: `prompt`, `auto`

## Examples

**Request**

```json
{
  "agent_id": "agent_id",
  "agent_phone_number_id": "agent_phone_number_id",
  "to_number": "to_number"
}
```

**Response**

```json
{
  "success": true,
  "message": "message",
  "conversation_id": "conversation_id",
  "sip_call_id": "sip_call_id"
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call"

payload = {
    "agent_id": "agent_id",
    "agent_phone_number_id": "agent_phone_number_id",
    "to_number": "to_number"
}
headers = {"Content-Type": "application/json"}

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

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"agent_id":"agent_id","agent_phone_number_id":"agent_phone_number_id","to_number":"to_number"}'
};

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

```go
package main

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

func main() {

	url := "https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call"

	payload := strings.NewReader("{\n  \"agent_id\": \"agent_id\",\n  \"agent_phone_number_id\": \"agent_phone_number_id\",\n  \"to_number\": \"to_number\"\n}")

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

	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
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call")

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

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"agent_id\": \"agent_id\",\n  \"agent_phone_number_id\": \"agent_phone_number_id\",\n  \"to_number\": \"to_number\"\n}"

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

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call")
  .header("Content-Type", "application/json")
  .body("{\n  \"agent_id\": \"agent_id\",\n  \"agent_phone_number_id\": \"agent_phone_number_id\",\n  \"to_number\": \"to_number\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call', [
  'body' => '{
  "agent_id": "agent_id",
  "agent_phone_number_id": "agent_phone_number_id",
  "to_number": "to_number"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/convai/sip-trunk/outbound-call");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"agent_id\": \"agent_id\",\n  \"agent_phone_number_id\": \"agent_phone_number_id\",\n  \"to_number\": \"to_number\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "agent_id": "agent_id",
  "agent_phone_number_id": "agent_phone_number_id",
  "to_number": "to_number"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/convai/sip-trunk/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()
```