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,
"recipients": [
{
"input": "<string>",
"to_number": "<string>",
"contact_id": "<string>",
"contact_name": "<string>"
}
],
"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 recipients (phone numbers in any common format, +1 assumed when the country code is missing, or names of contacts in the workspace, matched case-insensitively with small typos tolerated; an ambiguous name is rejected with the candidates) 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,
"recipients": [
{
"input": "<string>",
"to_number": "<string>",
"contact_id": "<string>",
"contact_name": "<string>"
}
],
"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
A UUID. When present, deduplicates repeat submissions. See /api-reference/idempotency.
Body
Who to reach: phone numbers in any common format (415-555-0123, (415) 555-0123, +14155550123; +1 is assumed when the country code is missing) and/or names of contacts in the workspace (case-insensitive, small typos are fine). Each entry is detected automatically
1 - 20 elementsPhone number in any common format (+1 assumed when missing) or a contact's name
1 - 120What 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