Start a Single Call
curl --request POST \
--url https://sa.dialgen.ai/api/v1/call/dial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "+1234567890",
"agentConfigId": "agent_123",
"userId": "user_789",
"contactId": "contact_101",
"callerDetails": {
"name": "John Doe",
"email": "john.doe@example.com",
"company": "Example Inc.",
"metadata": {
"customField": "value"
}
},
"statusCallBackUrl": "https://api.your-crm.com/webhook/dialgen/call-complete"
}
'import requests
url = "https://sa.dialgen.ai/api/v1/call/dial"
payload = {
"to": "+1234567890",
"agentConfigId": "agent_123",
"userId": "user_789",
"contactId": "contact_101",
"callerDetails": {
"name": "John Doe",
"email": "john.doe@example.com",
"company": "Example Inc.",
"metadata": { "customField": "value" }
},
"statusCallBackUrl": "https://api.your-crm.com/webhook/dialgen/call-complete"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
to: '+1234567890',
agentConfigId: 'agent_123',
userId: 'user_789',
contactId: 'contact_101',
callerDetails: {
name: 'John Doe',
email: 'john.doe@example.com',
company: 'Example Inc.',
metadata: {customField: 'value'}
},
statusCallBackUrl: 'https://api.your-crm.com/webhook/dialgen/call-complete'
})
};
fetch('https://sa.dialgen.ai/api/v1/call/dial', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sa.dialgen.ai/api/v1/call/dial",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+1234567890',
'agentConfigId' => 'agent_123',
'userId' => 'user_789',
'contactId' => 'contact_101',
'callerDetails' => [
'name' => 'John Doe',
'email' => 'john.doe@example.com',
'company' => 'Example Inc.',
'metadata' => [
'customField' => 'value'
]
],
'statusCallBackUrl' => 'https://api.your-crm.com/webhook/dialgen/call-complete'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sa.dialgen.ai/api/v1/call/dial"
payload := strings.NewReader("{\n \"to\": \"+1234567890\",\n \"agentConfigId\": \"agent_123\",\n \"userId\": \"user_789\",\n \"contactId\": \"contact_101\",\n \"callerDetails\": {\n \"name\": \"John Doe\",\n \"email\": \"john.doe@example.com\",\n \"company\": \"Example Inc.\",\n \"metadata\": {\n \"customField\": \"value\"\n }\n },\n \"statusCallBackUrl\": \"https://api.your-crm.com/webhook/dialgen/call-complete\"\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(string(body))
}HttpResponse<String> response = Unirest.post("https://sa.dialgen.ai/api/v1/call/dial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+1234567890\",\n \"agentConfigId\": \"agent_123\",\n \"userId\": \"user_789\",\n \"contactId\": \"contact_101\",\n \"callerDetails\": {\n \"name\": \"John Doe\",\n \"email\": \"john.doe@example.com\",\n \"company\": \"Example Inc.\",\n \"metadata\": {\n \"customField\": \"value\"\n }\n },\n \"statusCallBackUrl\": \"https://api.your-crm.com/webhook/dialgen/call-complete\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sa.dialgen.ai/api/v1/call/dial")
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 \"to\": \"+1234567890\",\n \"agentConfigId\": \"agent_123\",\n \"userId\": \"user_789\",\n \"contactId\": \"contact_101\",\n \"callerDetails\": {\n \"name\": \"John Doe\",\n \"email\": \"john.doe@example.com\",\n \"company\": \"Example Inc.\",\n \"metadata\": {\n \"customField\": \"value\"\n }\n },\n \"statusCallBackUrl\": \"https://api.your-crm.com/webhook/dialgen/call-complete\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Call initiated successfully",
"callId": "call_clxabc123...",
"contactId": "contact_clx789ghi...",
"status": "ONGOING"
}{
"error": "Bad Request",
"message": "Missing required parameter"
}{
"error": "Unauthorized",
"message": "Invalid or missing API key"
}{
"message": "Call already in progress for this contact",
"callId": "call_clxprev456..."
}{
"error": "Internal Server Error",
"message": "An unexpected error occurred"
}Calls
Start a Single Call
Initiates a single outbound call immediately. All endpoints should pass in the userId in the request body.
POST
/
api
/
v1
/
call
/
dial
Start a Single Call
curl --request POST \
--url https://sa.dialgen.ai/api/v1/call/dial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "+1234567890",
"agentConfigId": "agent_123",
"userId": "user_789",
"contactId": "contact_101",
"callerDetails": {
"name": "John Doe",
"email": "john.doe@example.com",
"company": "Example Inc.",
"metadata": {
"customField": "value"
}
},
"statusCallBackUrl": "https://api.your-crm.com/webhook/dialgen/call-complete"
}
'import requests
url = "https://sa.dialgen.ai/api/v1/call/dial"
payload = {
"to": "+1234567890",
"agentConfigId": "agent_123",
"userId": "user_789",
"contactId": "contact_101",
"callerDetails": {
"name": "John Doe",
"email": "john.doe@example.com",
"company": "Example Inc.",
"metadata": { "customField": "value" }
},
"statusCallBackUrl": "https://api.your-crm.com/webhook/dialgen/call-complete"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
to: '+1234567890',
agentConfigId: 'agent_123',
userId: 'user_789',
contactId: 'contact_101',
callerDetails: {
name: 'John Doe',
email: 'john.doe@example.com',
company: 'Example Inc.',
metadata: {customField: 'value'}
},
statusCallBackUrl: 'https://api.your-crm.com/webhook/dialgen/call-complete'
})
};
fetch('https://sa.dialgen.ai/api/v1/call/dial', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sa.dialgen.ai/api/v1/call/dial",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+1234567890',
'agentConfigId' => 'agent_123',
'userId' => 'user_789',
'contactId' => 'contact_101',
'callerDetails' => [
'name' => 'John Doe',
'email' => 'john.doe@example.com',
'company' => 'Example Inc.',
'metadata' => [
'customField' => 'value'
]
],
'statusCallBackUrl' => 'https://api.your-crm.com/webhook/dialgen/call-complete'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sa.dialgen.ai/api/v1/call/dial"
payload := strings.NewReader("{\n \"to\": \"+1234567890\",\n \"agentConfigId\": \"agent_123\",\n \"userId\": \"user_789\",\n \"contactId\": \"contact_101\",\n \"callerDetails\": {\n \"name\": \"John Doe\",\n \"email\": \"john.doe@example.com\",\n \"company\": \"Example Inc.\",\n \"metadata\": {\n \"customField\": \"value\"\n }\n },\n \"statusCallBackUrl\": \"https://api.your-crm.com/webhook/dialgen/call-complete\"\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(string(body))
}HttpResponse<String> response = Unirest.post("https://sa.dialgen.ai/api/v1/call/dial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+1234567890\",\n \"agentConfigId\": \"agent_123\",\n \"userId\": \"user_789\",\n \"contactId\": \"contact_101\",\n \"callerDetails\": {\n \"name\": \"John Doe\",\n \"email\": \"john.doe@example.com\",\n \"company\": \"Example Inc.\",\n \"metadata\": {\n \"customField\": \"value\"\n }\n },\n \"statusCallBackUrl\": \"https://api.your-crm.com/webhook/dialgen/call-complete\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sa.dialgen.ai/api/v1/call/dial")
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 \"to\": \"+1234567890\",\n \"agentConfigId\": \"agent_123\",\n \"userId\": \"user_789\",\n \"contactId\": \"contact_101\",\n \"callerDetails\": {\n \"name\": \"John Doe\",\n \"email\": \"john.doe@example.com\",\n \"company\": \"Example Inc.\",\n \"metadata\": {\n \"customField\": \"value\"\n }\n },\n \"statusCallBackUrl\": \"https://api.your-crm.com/webhook/dialgen/call-complete\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Call initiated successfully",
"callId": "call_clxabc123...",
"contactId": "contact_clx789ghi...",
"status": "ONGOING"
}{
"error": "Bad Request",
"message": "Missing required parameter"
}{
"error": "Unauthorized",
"message": "Invalid or missing API key"
}{
"message": "Call already in progress for this contact",
"callId": "call_clxprev456..."
}{
"error": "Internal Server Error",
"message": "An unexpected error occurred"
}Authorizations
Bearer token authentication. Obtain your API key from the Dialgen API Keys dashboard at https://sa.dialgen.ai/api-keys
Body
application/json
The E.164 formatted phone number to dial
Example:
"+1234567890"
The ID of the agent to use
The ID of the user owning the agent
Provide if the contact already exists
If contactId is not provided, this object is used to create/update the contact
Show child attributes
Show child attributes
The URL to send the call-status callback to
⌘I