curl --request POST \
--url https://api.osvi.ai/call \
--header 'API-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"agent_uuid": "agent_IsxxxxSf_60EhxxxxMGbz-Rxxg",
"phone_number": "9876543210",
"country_code": "IN",
"system_prompt": "You are calling to confirm the appointment scheduled for tomorrow at 10 AM.",
"webhook_url": "https://yourdomain.com/osvi-webhook",
"person_name": "John Doe",
"additional_data": {
"appointment_date": "2025-01-15",
"product_name": "Premium Plan"
},
"initial_greeting": "Hello John, this is a reminder about your appointment tomorrow at 10 AM.",
"call_config_overrides": {
"max_call_duration_seconds": 300,
"enable_callback": false,
"retry_config": {
"enabled": true,
"max_attempts": 2,
"interval_minutes": 30
}
},
"data_extraction": [
{
"key": "appointment_confirmed",
"description": "Ask if they can confirm their appointment for tomorrow at 10 AM.",
"required": true,
"output_format": "yes or no"
},
{
"key": "reschedule_preference",
"description": "If they cannot make it, ask what date and time works better.",
"required": false,
"output_format": "date and time"
}
],
"scheduled_at": "2026-09-12T11:00:00+05:30"
}
'import requests
url = "https://api.osvi.ai/call"
payload = {
"agent_uuid": "agent_IsxxxxSf_60EhxxxxMGbz-Rxxg",
"phone_number": "9876543210",
"country_code": "IN",
"system_prompt": "You are calling to confirm the appointment scheduled for tomorrow at 10 AM.",
"webhook_url": "https://yourdomain.com/osvi-webhook",
"person_name": "John Doe",
"additional_data": {
"appointment_date": "2025-01-15",
"product_name": "Premium Plan"
},
"initial_greeting": "Hello John, this is a reminder about your appointment tomorrow at 10 AM.",
"call_config_overrides": {
"max_call_duration_seconds": 300,
"enable_callback": False,
"retry_config": {
"enabled": True,
"max_attempts": 2,
"interval_minutes": 30
}
},
"data_extraction": [
{
"key": "appointment_confirmed",
"description": "Ask if they can confirm their appointment for tomorrow at 10 AM.",
"required": True,
"output_format": "yes or no"
},
{
"key": "reschedule_preference",
"description": "If they cannot make it, ask what date and time works better.",
"required": False,
"output_format": "date and time"
}
],
"scheduled_at": "2026-09-12T11:00:00+05:30"
}
headers = {
"API-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'API-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agent_uuid: 'agent_IsxxxxSf_60EhxxxxMGbz-Rxxg',
phone_number: '9876543210',
country_code: 'IN',
system_prompt: 'You are calling to confirm the appointment scheduled for tomorrow at 10 AM.',
webhook_url: 'https://yourdomain.com/osvi-webhook',
person_name: 'John Doe',
additional_data: {appointment_date: '2025-01-15', product_name: 'Premium Plan'},
initial_greeting: 'Hello John, this is a reminder about your appointment tomorrow at 10 AM.',
call_config_overrides: {
max_call_duration_seconds: 300,
enable_callback: false,
retry_config: {enabled: true, max_attempts: 2, interval_minutes: 30}
},
data_extraction: [
{
key: 'appointment_confirmed',
description: 'Ask if they can confirm their appointment for tomorrow at 10 AM.',
required: true,
output_format: 'yes or no'
},
{
key: 'reschedule_preference',
description: 'If they cannot make it, ask what date and time works better.',
required: false,
output_format: 'date and time'
}
],
scheduled_at: '2026-09-12T11:00:00+05:30'
})
};
fetch('https://api.osvi.ai/call', 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://api.osvi.ai/call",
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([
'agent_uuid' => 'agent_IsxxxxSf_60EhxxxxMGbz-Rxxg',
'phone_number' => '9876543210',
'country_code' => 'IN',
'system_prompt' => 'You are calling to confirm the appointment scheduled for tomorrow at 10 AM.',
'webhook_url' => 'https://yourdomain.com/osvi-webhook',
'person_name' => 'John Doe',
'additional_data' => [
'appointment_date' => '2025-01-15',
'product_name' => 'Premium Plan'
],
'initial_greeting' => 'Hello John, this is a reminder about your appointment tomorrow at 10 AM.',
'call_config_overrides' => [
'max_call_duration_seconds' => 300,
'enable_callback' => false,
'retry_config' => [
'enabled' => true,
'max_attempts' => 2,
'interval_minutes' => 30
]
],
'data_extraction' => [
[
'key' => 'appointment_confirmed',
'description' => 'Ask if they can confirm their appointment for tomorrow at 10 AM.',
'required' => true,
'output_format' => 'yes or no'
],
[
'key' => 'reschedule_preference',
'description' => 'If they cannot make it, ask what date and time works better.',
'required' => false,
'output_format' => 'date and time'
]
],
'scheduled_at' => '2026-09-12T11:00:00+05:30'
]),
CURLOPT_HTTPHEADER => [
"API-Token: <api-key>",
"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://api.osvi.ai/call"
payload := strings.NewReader("{\n \"agent_uuid\": \"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg\",\n \"phone_number\": \"9876543210\",\n \"country_code\": \"IN\",\n \"system_prompt\": \"You are calling to confirm the appointment scheduled for tomorrow at 10 AM.\",\n \"webhook_url\": \"https://yourdomain.com/osvi-webhook\",\n \"person_name\": \"John Doe\",\n \"additional_data\": {\n \"appointment_date\": \"2025-01-15\",\n \"product_name\": \"Premium Plan\"\n },\n \"initial_greeting\": \"Hello John, this is a reminder about your appointment tomorrow at 10 AM.\",\n \"call_config_overrides\": {\n \"max_call_duration_seconds\": 300,\n \"enable_callback\": false,\n \"retry_config\": {\n \"enabled\": true,\n \"max_attempts\": 2,\n \"interval_minutes\": 30\n }\n },\n \"data_extraction\": [\n {\n \"key\": \"appointment_confirmed\",\n \"description\": \"Ask if they can confirm their appointment for tomorrow at 10 AM.\",\n \"required\": true,\n \"output_format\": \"yes or no\"\n },\n {\n \"key\": \"reschedule_preference\",\n \"description\": \"If they cannot make it, ask what date and time works better.\",\n \"required\": false,\n \"output_format\": \"date and time\"\n }\n ],\n \"scheduled_at\": \"2026-09-12T11:00:00+05:30\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Token", "<api-key>")
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://api.osvi.ai/call")
.header("API-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agent_uuid\": \"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg\",\n \"phone_number\": \"9876543210\",\n \"country_code\": \"IN\",\n \"system_prompt\": \"You are calling to confirm the appointment scheduled for tomorrow at 10 AM.\",\n \"webhook_url\": \"https://yourdomain.com/osvi-webhook\",\n \"person_name\": \"John Doe\",\n \"additional_data\": {\n \"appointment_date\": \"2025-01-15\",\n \"product_name\": \"Premium Plan\"\n },\n \"initial_greeting\": \"Hello John, this is a reminder about your appointment tomorrow at 10 AM.\",\n \"call_config_overrides\": {\n \"max_call_duration_seconds\": 300,\n \"enable_callback\": false,\n \"retry_config\": {\n \"enabled\": true,\n \"max_attempts\": 2,\n \"interval_minutes\": 30\n }\n },\n \"data_extraction\": [\n {\n \"key\": \"appointment_confirmed\",\n \"description\": \"Ask if they can confirm their appointment for tomorrow at 10 AM.\",\n \"required\": true,\n \"output_format\": \"yes or no\"\n },\n {\n \"key\": \"reschedule_preference\",\n \"description\": \"If they cannot make it, ask what date and time works better.\",\n \"required\": false,\n \"output_format\": \"date and time\"\n }\n ],\n \"scheduled_at\": \"2026-09-12T11:00:00+05:30\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.osvi.ai/call")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent_uuid\": \"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg\",\n \"phone_number\": \"9876543210\",\n \"country_code\": \"IN\",\n \"system_prompt\": \"You are calling to confirm the appointment scheduled for tomorrow at 10 AM.\",\n \"webhook_url\": \"https://yourdomain.com/osvi-webhook\",\n \"person_name\": \"John Doe\",\n \"additional_data\": {\n \"appointment_date\": \"2025-01-15\",\n \"product_name\": \"Premium Plan\"\n },\n \"initial_greeting\": \"Hello John, this is a reminder about your appointment tomorrow at 10 AM.\",\n \"call_config_overrides\": {\n \"max_call_duration_seconds\": 300,\n \"enable_callback\": false,\n \"retry_config\": {\n \"enabled\": true,\n \"max_attempts\": 2,\n \"interval_minutes\": 30\n }\n },\n \"data_extraction\": [\n {\n \"key\": \"appointment_confirmed\",\n \"description\": \"Ask if they can confirm their appointment for tomorrow at 10 AM.\",\n \"required\": true,\n \"output_format\": \"yes or no\"\n },\n {\n \"key\": \"reschedule_preference\",\n \"description\": \"If they cannot make it, ask what date and time works better.\",\n \"required\": false,\n \"output_format\": \"date and time\"\n }\n ],\n \"scheduled_at\": \"2026-09-12T11:00:00+05:30\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"call_id": "call_abc123xyz",
"scheduled_at": "2026-09-12T11:00:00+05:30",
"scheduled_at_epoch": 1789191000
}
}{
"success": false,
"error": "webhook_url is set but post_call_analysis is not enabled on this agent",
"details": null
}{
"success": false,
"error": "Invalid API token"
}{
"success": false,
"error": "Agent not found or not associated with this account",
"details": null
}{
"success": false,
"error": "No phone number is attached to this agent. Attach an outbound number under Agent → Telephony before placing calls.",
"details": {
"error_code": "NO_OUTBOUND_NUMBER_CONFIGURED",
"action": "attach_number"
}
}Initiate a Phone Call
Legacy — will be deprecated soon. Use the versioned endpoint (POST /v1/call) for new integrations.
Starts an outbound phone call to the given number using the specified agent. The call is placed asynchronously — use webhook_url to receive a notification when the call completes. The request and response contract is identical to POST /v1/call.
To place the call later instead, pass scheduled_at as a 24-hour IST time (11:00) or ISO 8601 with offset (2026-09-12T11:00:00+05:30). The response returns immediately with the call_id the webhook will carry once the call is placed.
curl --request POST \
--url https://api.osvi.ai/call \
--header 'API-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"agent_uuid": "agent_IsxxxxSf_60EhxxxxMGbz-Rxxg",
"phone_number": "9876543210",
"country_code": "IN",
"system_prompt": "You are calling to confirm the appointment scheduled for tomorrow at 10 AM.",
"webhook_url": "https://yourdomain.com/osvi-webhook",
"person_name": "John Doe",
"additional_data": {
"appointment_date": "2025-01-15",
"product_name": "Premium Plan"
},
"initial_greeting": "Hello John, this is a reminder about your appointment tomorrow at 10 AM.",
"call_config_overrides": {
"max_call_duration_seconds": 300,
"enable_callback": false,
"retry_config": {
"enabled": true,
"max_attempts": 2,
"interval_minutes": 30
}
},
"data_extraction": [
{
"key": "appointment_confirmed",
"description": "Ask if they can confirm their appointment for tomorrow at 10 AM.",
"required": true,
"output_format": "yes or no"
},
{
"key": "reschedule_preference",
"description": "If they cannot make it, ask what date and time works better.",
"required": false,
"output_format": "date and time"
}
],
"scheduled_at": "2026-09-12T11:00:00+05:30"
}
'import requests
url = "https://api.osvi.ai/call"
payload = {
"agent_uuid": "agent_IsxxxxSf_60EhxxxxMGbz-Rxxg",
"phone_number": "9876543210",
"country_code": "IN",
"system_prompt": "You are calling to confirm the appointment scheduled for tomorrow at 10 AM.",
"webhook_url": "https://yourdomain.com/osvi-webhook",
"person_name": "John Doe",
"additional_data": {
"appointment_date": "2025-01-15",
"product_name": "Premium Plan"
},
"initial_greeting": "Hello John, this is a reminder about your appointment tomorrow at 10 AM.",
"call_config_overrides": {
"max_call_duration_seconds": 300,
"enable_callback": False,
"retry_config": {
"enabled": True,
"max_attempts": 2,
"interval_minutes": 30
}
},
"data_extraction": [
{
"key": "appointment_confirmed",
"description": "Ask if they can confirm their appointment for tomorrow at 10 AM.",
"required": True,
"output_format": "yes or no"
},
{
"key": "reschedule_preference",
"description": "If they cannot make it, ask what date and time works better.",
"required": False,
"output_format": "date and time"
}
],
"scheduled_at": "2026-09-12T11:00:00+05:30"
}
headers = {
"API-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'API-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agent_uuid: 'agent_IsxxxxSf_60EhxxxxMGbz-Rxxg',
phone_number: '9876543210',
country_code: 'IN',
system_prompt: 'You are calling to confirm the appointment scheduled for tomorrow at 10 AM.',
webhook_url: 'https://yourdomain.com/osvi-webhook',
person_name: 'John Doe',
additional_data: {appointment_date: '2025-01-15', product_name: 'Premium Plan'},
initial_greeting: 'Hello John, this is a reminder about your appointment tomorrow at 10 AM.',
call_config_overrides: {
max_call_duration_seconds: 300,
enable_callback: false,
retry_config: {enabled: true, max_attempts: 2, interval_minutes: 30}
},
data_extraction: [
{
key: 'appointment_confirmed',
description: 'Ask if they can confirm their appointment for tomorrow at 10 AM.',
required: true,
output_format: 'yes or no'
},
{
key: 'reschedule_preference',
description: 'If they cannot make it, ask what date and time works better.',
required: false,
output_format: 'date and time'
}
],
scheduled_at: '2026-09-12T11:00:00+05:30'
})
};
fetch('https://api.osvi.ai/call', 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://api.osvi.ai/call",
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([
'agent_uuid' => 'agent_IsxxxxSf_60EhxxxxMGbz-Rxxg',
'phone_number' => '9876543210',
'country_code' => 'IN',
'system_prompt' => 'You are calling to confirm the appointment scheduled for tomorrow at 10 AM.',
'webhook_url' => 'https://yourdomain.com/osvi-webhook',
'person_name' => 'John Doe',
'additional_data' => [
'appointment_date' => '2025-01-15',
'product_name' => 'Premium Plan'
],
'initial_greeting' => 'Hello John, this is a reminder about your appointment tomorrow at 10 AM.',
'call_config_overrides' => [
'max_call_duration_seconds' => 300,
'enable_callback' => false,
'retry_config' => [
'enabled' => true,
'max_attempts' => 2,
'interval_minutes' => 30
]
],
'data_extraction' => [
[
'key' => 'appointment_confirmed',
'description' => 'Ask if they can confirm their appointment for tomorrow at 10 AM.',
'required' => true,
'output_format' => 'yes or no'
],
[
'key' => 'reschedule_preference',
'description' => 'If they cannot make it, ask what date and time works better.',
'required' => false,
'output_format' => 'date and time'
]
],
'scheduled_at' => '2026-09-12T11:00:00+05:30'
]),
CURLOPT_HTTPHEADER => [
"API-Token: <api-key>",
"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://api.osvi.ai/call"
payload := strings.NewReader("{\n \"agent_uuid\": \"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg\",\n \"phone_number\": \"9876543210\",\n \"country_code\": \"IN\",\n \"system_prompt\": \"You are calling to confirm the appointment scheduled for tomorrow at 10 AM.\",\n \"webhook_url\": \"https://yourdomain.com/osvi-webhook\",\n \"person_name\": \"John Doe\",\n \"additional_data\": {\n \"appointment_date\": \"2025-01-15\",\n \"product_name\": \"Premium Plan\"\n },\n \"initial_greeting\": \"Hello John, this is a reminder about your appointment tomorrow at 10 AM.\",\n \"call_config_overrides\": {\n \"max_call_duration_seconds\": 300,\n \"enable_callback\": false,\n \"retry_config\": {\n \"enabled\": true,\n \"max_attempts\": 2,\n \"interval_minutes\": 30\n }\n },\n \"data_extraction\": [\n {\n \"key\": \"appointment_confirmed\",\n \"description\": \"Ask if they can confirm their appointment for tomorrow at 10 AM.\",\n \"required\": true,\n \"output_format\": \"yes or no\"\n },\n {\n \"key\": \"reschedule_preference\",\n \"description\": \"If they cannot make it, ask what date and time works better.\",\n \"required\": false,\n \"output_format\": \"date and time\"\n }\n ],\n \"scheduled_at\": \"2026-09-12T11:00:00+05:30\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Token", "<api-key>")
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://api.osvi.ai/call")
.header("API-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agent_uuid\": \"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg\",\n \"phone_number\": \"9876543210\",\n \"country_code\": \"IN\",\n \"system_prompt\": \"You are calling to confirm the appointment scheduled for tomorrow at 10 AM.\",\n \"webhook_url\": \"https://yourdomain.com/osvi-webhook\",\n \"person_name\": \"John Doe\",\n \"additional_data\": {\n \"appointment_date\": \"2025-01-15\",\n \"product_name\": \"Premium Plan\"\n },\n \"initial_greeting\": \"Hello John, this is a reminder about your appointment tomorrow at 10 AM.\",\n \"call_config_overrides\": {\n \"max_call_duration_seconds\": 300,\n \"enable_callback\": false,\n \"retry_config\": {\n \"enabled\": true,\n \"max_attempts\": 2,\n \"interval_minutes\": 30\n }\n },\n \"data_extraction\": [\n {\n \"key\": \"appointment_confirmed\",\n \"description\": \"Ask if they can confirm their appointment for tomorrow at 10 AM.\",\n \"required\": true,\n \"output_format\": \"yes or no\"\n },\n {\n \"key\": \"reschedule_preference\",\n \"description\": \"If they cannot make it, ask what date and time works better.\",\n \"required\": false,\n \"output_format\": \"date and time\"\n }\n ],\n \"scheduled_at\": \"2026-09-12T11:00:00+05:30\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.osvi.ai/call")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent_uuid\": \"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg\",\n \"phone_number\": \"9876543210\",\n \"country_code\": \"IN\",\n \"system_prompt\": \"You are calling to confirm the appointment scheduled for tomorrow at 10 AM.\",\n \"webhook_url\": \"https://yourdomain.com/osvi-webhook\",\n \"person_name\": \"John Doe\",\n \"additional_data\": {\n \"appointment_date\": \"2025-01-15\",\n \"product_name\": \"Premium Plan\"\n },\n \"initial_greeting\": \"Hello John, this is a reminder about your appointment tomorrow at 10 AM.\",\n \"call_config_overrides\": {\n \"max_call_duration_seconds\": 300,\n \"enable_callback\": false,\n \"retry_config\": {\n \"enabled\": true,\n \"max_attempts\": 2,\n \"interval_minutes\": 30\n }\n },\n \"data_extraction\": [\n {\n \"key\": \"appointment_confirmed\",\n \"description\": \"Ask if they can confirm their appointment for tomorrow at 10 AM.\",\n \"required\": true,\n \"output_format\": \"yes or no\"\n },\n {\n \"key\": \"reschedule_preference\",\n \"description\": \"If they cannot make it, ask what date and time works better.\",\n \"required\": false,\n \"output_format\": \"date and time\"\n }\n ],\n \"scheduled_at\": \"2026-09-12T11:00:00+05:30\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"call_id": "call_abc123xyz",
"scheduled_at": "2026-09-12T11:00:00+05:30",
"scheduled_at_epoch": 1789191000
}
}{
"success": false,
"error": "webhook_url is set but post_call_analysis is not enabled on this agent",
"details": null
}{
"success": false,
"error": "Invalid API token"
}{
"success": false,
"error": "Agent not found or not associated with this account",
"details": null
}{
"success": false,
"error": "No phone number is attached to this agent. Attach an outbound number under Agent → Telephony before placing calls.",
"details": {
"error_code": "NO_OUTBOUND_NUMBER_CONFIGURED",
"action": "attach_number"
}
}Authorizations
16-character API token associated with your OSVI account. Find it in your dashboard under Settings → API.
Body
Unique identifier of the OSVI agent that will handle the call. Must belong to the account that owns the API token, otherwise the request is rejected with 403 Forbidden.
"agent_IsxxxxSf_60EhxxxxMGbz-Rxxg"
Destination phone number (digits only, without country code). Normalized and validated against country_code; an implausible number returns 400 Bad Request.
"9876543210"
ISO 3166-1 alpha-2 country code of the destination number. Must be a recognized country code, otherwise the request is rejected with 400 Bad Request.
"IN"
Optional runtime override for the agent's system prompt for this call only.
"You are calling to confirm the appointment scheduled for tomorrow at 10 AM."
URL that OSVI will POST to when the call completes. Must be a valid HTTP or HTTPS URL that includes a host. The payload matches the webhook schema documented in the Webhooks section.
"https://yourdomain.com/osvi-webhook"
Name of the person being called. Made available to the agent during the call.
"John Doe"
Arbitrary key-value object passed to the agent at runtime. Use this to provide context the agent can reference during the conversation. Must be a JSON object — arrays or scalar values are rejected with 400 Bad Request.
{
"appointment_date": "2025-01-15",
"product_name": "Premium Plan"
}
Opening line the agent speaks when the call connects. Maximum 2000 characters.
2000"Hello John, this is a reminder about your appointment tomorrow at 10 AM."
Per-call overrides for call behavior. All fields are optional.
Show child attributes
Show child attributes
{
"max_call_duration_seconds": 300,
"enable_callback": false,
"retry_config": {
"enabled": true,
"max_attempts": 2,
"interval_minutes": 30
}
}
List of data points the agent should attempt to extract during the conversation. Must be an array; each item requires a non-empty description.
Show child attributes
Show child attributes
[
{
"key": "appointment_confirmed",
"description": "Ask if they can confirm their appointment for tomorrow at 10 AM.",
"required": true,
"output_format": "yes or no"
},
{
"key": "reschedule_preference",
"description": "If they cannot make it, ask what date and time works better.",
"required": false,
"output_format": "date and time"
}
]
Optional. When set, the call is queued and placed at this time instead of immediately. A string in 24-hour format, in one of two shapes:
HH:MM— a time in IST (Asia/Kolkata). Placed today at that time if it is still ahead, otherwise tomorrow at that time. Example:11:00.YYYY-MM-DDTHH:MM:SS+05:30— ISO 8601 with an explicit UTC offset, used exactly as given. Use this for a specific date, or for a zone other than IST. Seconds are required, fractional seconds are accepted (2026-09-12T05:30:00.000Z, as JavaScript'stoISOString()emits), and the offset may beZ,±HH:MMor±HHMMup to ±14:00. Example:2026-09-12T11:00:00+05:30.
Must be in the future and at most 90 days ahead. Rejected with 400 Bad Request: Unix timestamps, 12-hour clocks (11 am), date-times without an offset, and any out-of-range field (12:60, 25:00, +15:00, an invalid calendar date). Nothing is normalised silently.
Calls scheduled for the same moment start together up to the agent's concurrency limit and the rest follow as slots free up. The agent's campaign calling window still applies. All other fields behave exactly as for an immediate call.
"2026-09-12T11:00:00+05:30"
