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

# Make a call

POST https://api.levrage.ai/v1/call
Content-Type: application/json

Initiate an outbound call to the specified phone number.

The call will use the specified voice agent and any metadata provided
will be available to the agent during the conversation.

Reference: https://docs.levrage.ai/api-reference/calls/make-call

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects a MakeCallRequest.

- `agent_id` (string, required) — Voice agent UUID
- `source_number` (string, required) — Source phone number to call from (+91...)
- `phone_number` (string, required) — Phone to call (+91...)
- `metadata` (MakeCallRequestMetadata, optional, nullable) — Custom data for agent

## Response

### 200

Successful Response

- `data` (CallData, required) — Call data inside response envelope.
- `request_id` (string, required)
- `timestamp` (datetime, required)
- `success` (boolean, optional, default: true)

## Errors

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### MakeCallRequestMetadata

Custom data for agent

### CallData

Call data inside response envelope.

- `id` (string, required) — Call session ID
- `status` (string, required) — initializing, connected, completed, failed
- `phone_number` (string, required) — Phone number being dialed
- `agent` (AgentInfo, required) — Agent handling the call
- `user_id` (string, required) — User who initiated the call
- `created_at` (datetime, required) — Timestamp when call was initiated
- `metadata` (CallDataMetadata, optional, nullable) — Metadata passed with call

### ValidationError

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

### AgentInfo

Agent information in response.

- `id` (string, required)
- `name` (string, required)

### CallDataMetadata

Metadata passed with call

### ValidationErrorLocItems

- string
- integer

## Examples

**Request**

```json
{
  "agent_id": "550e8400-e29b-41d4-a716-446655440000",
  "source_number": "+919240018601",
  "phone_number": "+919876543210",
  "metadata": {
    "customer_name": "Rahul Sharma",
    "order_id": "ORD-12345"
  }
}
```

**Response**

```json
{
  "data": {
    "id": "a3f1c9e2-7b4d-4f8a-9c2e-1d2f3b4a5c6d",
    "status": "initializing",
    "phone_number": "+919876543210",
    "agent": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Acme Sales Agent"
    },
    "user_id": "user_a1b2c3d4",
    "created_at": "2026-01-15T09:30:00+05:30",
    "metadata": {
      "customer_name": "Rahul Sharma",
      "order_id": "ORD-12345"
    }
  },
  "request_id": "req_a1b2c3d4e5f6",
  "timestamp": "2026-01-15T09:30:00+05:30",
  "success": true
}
```

**SDK Code**

```python
import requests

url = "https://api.levrage.ai/v1/call"

payload = {
    "agent_id": "550e8400-e29b-41d4-a716-446655440000",
    "source_number": "+919240018601",
    "phone_number": "+919876543210",
    "metadata": {
        "customer_name": "Rahul Sharma",
        "order_id": "ORD-12345"
    }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript
const url = 'https://api.levrage.ai/v1/call';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"agent_id":"550e8400-e29b-41d4-a716-446655440000","source_number":"+919240018601","phone_number":"+919876543210","metadata":{"customer_name":"Rahul Sharma","order_id":"ORD-12345"}}'
};

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.levrage.ai/v1/call"

	payload := strings.NewReader("{\n  \"agent_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"source_number\": \"+919240018601\",\n  \"phone_number\": \"+919876543210\",\n  \"metadata\": {\n    \"customer_name\": \"Rahul Sharma\",\n    \"order_id\": \"ORD-12345\"\n  }\n}")

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

	req.Header.Add("Authorization", "Bearer <token>")
	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.levrage.ai/v1/call")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"agent_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"source_number\": \"+919240018601\",\n  \"phone_number\": \"+919876543210\",\n  \"metadata\": {\n    \"customer_name\": \"Rahul Sharma\",\n    \"order_id\": \"ORD-12345\"\n  }\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.levrage.ai/v1/call")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"agent_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"source_number\": \"+919240018601\",\n  \"phone_number\": \"+919876543210\",\n  \"metadata\": {\n    \"customer_name\": \"Rahul Sharma\",\n    \"order_id\": \"ORD-12345\"\n  }\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.levrage.ai/v1/call', [
  'body' => '{
  "agent_id": "550e8400-e29b-41d4-a716-446655440000",
  "source_number": "+919240018601",
  "phone_number": "+919876543210",
  "metadata": {
    "customer_name": "Rahul Sharma",
    "order_id": "ORD-12345"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.levrage.ai/v1/call");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"agent_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"source_number\": \"+919240018601\",\n  \"phone_number\": \"+919876543210\",\n  \"metadata\": {\n    \"customer_name\": \"Rahul Sharma\",\n    \"order_id\": \"ORD-12345\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "agent_id": "550e8400-e29b-41d4-a716-446655440000",
  "source_number": "+919240018601",
  "phone_number": "+919876543210",
  "metadata": [
    "customer_name": "Rahul Sharma",
    "order_id": "ORD-12345"
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.levrage.ai/v1/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()
```