curl --request POST \
--url https://api.lumisreach.com/api/v1/quick/ai-calls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to_numbers": [
"<string>"
],
"goal": "<string>",
"language": "en",
"retry_attempts": 1,
"retry_delay_minutes": 10,
"max_call_duration_seconds": 600,
"voicemail_enabled": true,
"record": true,
"instructions": "<string>",
"opening_message": "<string>",
"voice": "<string>",
"voicemail_message": "<string>",
"contact_name": "<string>"
}
'import requests
url = "https://api.lumisreach.com/api/v1/quick/ai-calls"
payload = {
"to_numbers": ["<string>"],
"goal": "<string>",
"language": "en",
"retry_attempts": 1,
"retry_delay_minutes": 10,
"max_call_duration_seconds": 600,
"voicemail_enabled": True,
"record": True,
"instructions": "<string>",
"opening_message": "<string>",
"voice": "<string>",
"voicemail_message": "<string>",
"contact_name": "<string>"
}
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_numbers: ['<string>'],
goal: '<string>',
language: 'en',
retry_attempts: 1,
retry_delay_minutes: 10,
max_call_duration_seconds: 600,
voicemail_enabled: true,
record: true,
instructions: '<string>',
opening_message: '<string>',
voice: '<string>',
voicemail_message: '<string>',
contact_name: '<string>'
})
};
fetch('https://api.lumisreach.com/api/v1/quick/ai-calls', 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.lumisreach.com/api/v1/quick/ai-calls",
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_numbers' => [
'<string>'
],
'goal' => '<string>',
'language' => 'en',
'retry_attempts' => 1,
'retry_delay_minutes' => 10,
'max_call_duration_seconds' => 600,
'voicemail_enabled' => true,
'record' => true,
'instructions' => '<string>',
'opening_message' => '<string>',
'voice' => '<string>',
'voicemail_message' => '<string>',
'contact_name' => '<string>'
]),
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://api.lumisreach.com/api/v1/quick/ai-calls"
payload := strings.NewReader("{\n \"to_numbers\": [\n \"<string>\"\n ],\n \"goal\": \"<string>\",\n \"language\": \"en\",\n \"retry_attempts\": 1,\n \"retry_delay_minutes\": 10,\n \"max_call_duration_seconds\": 600,\n \"voicemail_enabled\": true,\n \"record\": true,\n \"instructions\": \"<string>\",\n \"opening_message\": \"<string>\",\n \"voice\": \"<string>\",\n \"voicemail_message\": \"<string>\",\n \"contact_name\": \"<string>\"\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://api.lumisreach.com/api/v1/quick/ai-calls")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to_numbers\": [\n \"<string>\"\n ],\n \"goal\": \"<string>\",\n \"language\": \"en\",\n \"retry_attempts\": 1,\n \"retry_delay_minutes\": 10,\n \"max_call_duration_seconds\": 600,\n \"voicemail_enabled\": true,\n \"record\": true,\n \"instructions\": \"<string>\",\n \"opening_message\": \"<string>\",\n \"voice\": \"<string>\",\n \"voicemail_message\": \"<string>\",\n \"contact_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lumisreach.com/api/v1/quick/ai-calls")
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_numbers\": [\n \"<string>\"\n ],\n \"goal\": \"<string>\",\n \"language\": \"en\",\n \"retry_attempts\": 1,\n \"retry_delay_minutes\": 10,\n \"max_call_duration_seconds\": 600,\n \"voicemail_enabled\": true,\n \"record\": true,\n \"instructions\": \"<string>\",\n \"opening_message\": \"<string>\",\n \"voice\": \"<string>\",\n \"voicemail_message\": \"<string>\",\n \"contact_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "ai_call",
"status": "<string>",
"from_number": "<string>",
"target_count": 123,
"status_url": "<string>",
"pricing": {
"start_fee_usd": 123,
"per_minute_usd": 123,
"note": "<string>"
}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}Start a Quick AI Phone Call
Has an AI agent call one or more phone numbers to accomplish a goal. No phone-number purchase is required — the call is placed from a shared LumisReach number on the LumisReach Official account, and that is the number the recipient sees. Configure voice, language, goal, opening line, retry attempts and maximum call length per request. Billing: 0.20perinitiatedcall(eachretrycounts)plus0.20 per minute of conversation, charged to the wallet of the organization that owns the API key. Shared numbers have a daily volume ceiling (75 calls once warmed up) so carriers do not flag them; a job spreads across the pool and each destination reports the from_number it used. Returns 202 with a job id; poll GET /v1/quick/actions/{id} for per-number progress. Returns 409 when the shared pool has no daily volume left.
curl --request POST \
--url https://api.lumisreach.com/api/v1/quick/ai-calls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to_numbers": [
"<string>"
],
"goal": "<string>",
"language": "en",
"retry_attempts": 1,
"retry_delay_minutes": 10,
"max_call_duration_seconds": 600,
"voicemail_enabled": true,
"record": true,
"instructions": "<string>",
"opening_message": "<string>",
"voice": "<string>",
"voicemail_message": "<string>",
"contact_name": "<string>"
}
'import requests
url = "https://api.lumisreach.com/api/v1/quick/ai-calls"
payload = {
"to_numbers": ["<string>"],
"goal": "<string>",
"language": "en",
"retry_attempts": 1,
"retry_delay_minutes": 10,
"max_call_duration_seconds": 600,
"voicemail_enabled": True,
"record": True,
"instructions": "<string>",
"opening_message": "<string>",
"voice": "<string>",
"voicemail_message": "<string>",
"contact_name": "<string>"
}
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_numbers: ['<string>'],
goal: '<string>',
language: 'en',
retry_attempts: 1,
retry_delay_minutes: 10,
max_call_duration_seconds: 600,
voicemail_enabled: true,
record: true,
instructions: '<string>',
opening_message: '<string>',
voice: '<string>',
voicemail_message: '<string>',
contact_name: '<string>'
})
};
fetch('https://api.lumisreach.com/api/v1/quick/ai-calls', 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.lumisreach.com/api/v1/quick/ai-calls",
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_numbers' => [
'<string>'
],
'goal' => '<string>',
'language' => 'en',
'retry_attempts' => 1,
'retry_delay_minutes' => 10,
'max_call_duration_seconds' => 600,
'voicemail_enabled' => true,
'record' => true,
'instructions' => '<string>',
'opening_message' => '<string>',
'voice' => '<string>',
'voicemail_message' => '<string>',
'contact_name' => '<string>'
]),
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://api.lumisreach.com/api/v1/quick/ai-calls"
payload := strings.NewReader("{\n \"to_numbers\": [\n \"<string>\"\n ],\n \"goal\": \"<string>\",\n \"language\": \"en\",\n \"retry_attempts\": 1,\n \"retry_delay_minutes\": 10,\n \"max_call_duration_seconds\": 600,\n \"voicemail_enabled\": true,\n \"record\": true,\n \"instructions\": \"<string>\",\n \"opening_message\": \"<string>\",\n \"voice\": \"<string>\",\n \"voicemail_message\": \"<string>\",\n \"contact_name\": \"<string>\"\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://api.lumisreach.com/api/v1/quick/ai-calls")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to_numbers\": [\n \"<string>\"\n ],\n \"goal\": \"<string>\",\n \"language\": \"en\",\n \"retry_attempts\": 1,\n \"retry_delay_minutes\": 10,\n \"max_call_duration_seconds\": 600,\n \"voicemail_enabled\": true,\n \"record\": true,\n \"instructions\": \"<string>\",\n \"opening_message\": \"<string>\",\n \"voice\": \"<string>\",\n \"voicemail_message\": \"<string>\",\n \"contact_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lumisreach.com/api/v1/quick/ai-calls")
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_numbers\": [\n \"<string>\"\n ],\n \"goal\": \"<string>\",\n \"language\": \"en\",\n \"retry_attempts\": 1,\n \"retry_delay_minutes\": 10,\n \"max_call_duration_seconds\": 600,\n \"voicemail_enabled\": true,\n \"record\": true,\n \"instructions\": \"<string>\",\n \"opening_message\": \"<string>\",\n \"voice\": \"<string>\",\n \"voicemail_message\": \"<string>\",\n \"contact_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "ai_call",
"status": "<string>",
"from_number": "<string>",
"target_count": 123,
"status_url": "<string>",
"pricing": {
"start_fee_usd": 123,
"per_minute_usd": 123,
"note": "<string>"
}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {},
"doc_url": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
UUID — when present, deduplicates repeat submissions. See /api-reference/idempotency.
Body
One or more destinations in E.164 format
1 - 20 elementsDestination in E.164 format
^\+[1-9]\d{1,14}$What the AI should accomplish on the call. Drives the system prompt.
10 - 2000100 <= x <= 51 <= x <= 144030 <= x <= 18004000500120standard, mini 600120Response
Success
Show child attributes
Show child attributes