curl --request POST \
--url https://api.aura-app.ai/v1/calls \
--header 'Content-Type: application/json' \
--data '
{
"booking_link_id": "850e8400-e29b-41d4-a716-446655440003",
"guest": {
"email": "ada@example.com",
"name": "Ada Lovelace",
"phone": "+49 151 23456789"
},
"start_time": "2026-08-01T15:00:00Z",
"answers": [
{
"field_id": "budget",
"value": "10k-50k"
}
],
"closer_email": "closer@acme.com",
"end_time": "2026-08-01T15:30:00Z",
"timezone": "Europe/Berlin",
"utm_campaign": "<string>",
"utm_content": "<string>",
"utm_medium": "<string>",
"utm_source": "<string>",
"utm_term": "<string>"
}
'import requests
url = "https://api.aura-app.ai/v1/calls"
payload = {
"booking_link_id": "850e8400-e29b-41d4-a716-446655440003",
"guest": {
"email": "ada@example.com",
"name": "Ada Lovelace",
"phone": "+49 151 23456789"
},
"start_time": "2026-08-01T15:00:00Z",
"answers": [
{
"field_id": "budget",
"value": "10k-50k"
}
],
"closer_email": "closer@acme.com",
"end_time": "2026-08-01T15:30:00Z",
"timezone": "Europe/Berlin",
"utm_campaign": "<string>",
"utm_content": "<string>",
"utm_medium": "<string>",
"utm_source": "<string>",
"utm_term": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
booking_link_id: '850e8400-e29b-41d4-a716-446655440003',
guest: {email: 'ada@example.com', name: 'Ada Lovelace', phone: '+49 151 23456789'},
start_time: '2026-08-01T15:00:00Z',
answers: [{field_id: 'budget', value: '10k-50k'}],
closer_email: 'closer@acme.com',
end_time: '2026-08-01T15:30:00Z',
timezone: 'Europe/Berlin',
utm_campaign: '<string>',
utm_content: '<string>',
utm_medium: '<string>',
utm_source: '<string>',
utm_term: '<string>'
})
};
fetch('https://api.aura-app.ai/v1/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.aura-app.ai/v1/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([
'booking_link_id' => '850e8400-e29b-41d4-a716-446655440003',
'guest' => [
'email' => 'ada@example.com',
'name' => 'Ada Lovelace',
'phone' => '+49 151 23456789'
],
'start_time' => '2026-08-01T15:00:00Z',
'answers' => [
[
'field_id' => 'budget',
'value' => '10k-50k'
]
],
'closer_email' => 'closer@acme.com',
'end_time' => '2026-08-01T15:30:00Z',
'timezone' => 'Europe/Berlin',
'utm_campaign' => '<string>',
'utm_content' => '<string>',
'utm_medium' => '<string>',
'utm_source' => '<string>',
'utm_term' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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.aura-app.ai/v1/calls"
payload := strings.NewReader("{\n \"booking_link_id\": \"850e8400-e29b-41d4-a716-446655440003\",\n \"guest\": {\n \"email\": \"ada@example.com\",\n \"name\": \"Ada Lovelace\",\n \"phone\": \"+49 151 23456789\"\n },\n \"start_time\": \"2026-08-01T15:00:00Z\",\n \"answers\": [\n {\n \"field_id\": \"budget\",\n \"value\": \"10k-50k\"\n }\n ],\n \"closer_email\": \"closer@acme.com\",\n \"end_time\": \"2026-08-01T15:30:00Z\",\n \"timezone\": \"Europe/Berlin\",\n \"utm_campaign\": \"<string>\",\n \"utm_content\": \"<string>\",\n \"utm_medium\": \"<string>\",\n \"utm_source\": \"<string>\",\n \"utm_term\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.aura-app.ai/v1/calls")
.header("Content-Type", "application/json")
.body("{\n \"booking_link_id\": \"850e8400-e29b-41d4-a716-446655440003\",\n \"guest\": {\n \"email\": \"ada@example.com\",\n \"name\": \"Ada Lovelace\",\n \"phone\": \"+49 151 23456789\"\n },\n \"start_time\": \"2026-08-01T15:00:00Z\",\n \"answers\": [\n {\n \"field_id\": \"budget\",\n \"value\": \"10k-50k\"\n }\n ],\n \"closer_email\": \"closer@acme.com\",\n \"end_time\": \"2026-08-01T15:30:00Z\",\n \"timezone\": \"Europe/Berlin\",\n \"utm_campaign\": \"<string>\",\n \"utm_content\": \"<string>\",\n \"utm_medium\": \"<string>\",\n \"utm_source\": \"<string>\",\n \"utm_term\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aura-app.ai/v1/calls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"booking_link_id\": \"850e8400-e29b-41d4-a716-446655440003\",\n \"guest\": {\n \"email\": \"ada@example.com\",\n \"name\": \"Ada Lovelace\",\n \"phone\": \"+49 151 23456789\"\n },\n \"start_time\": \"2026-08-01T15:00:00Z\",\n \"answers\": [\n {\n \"field_id\": \"budget\",\n \"value\": \"10k-50k\"\n }\n ],\n \"closer_email\": \"closer@acme.com\",\n \"end_time\": \"2026-08-01T15:30:00Z\",\n \"timezone\": \"Europe/Berlin\",\n \"utm_campaign\": \"<string>\",\n \"utm_content\": \"<string>\",\n \"utm_medium\": \"<string>\",\n \"utm_source\": \"<string>\",\n \"utm_term\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"action_items": [
"Send proposal with detailed timeline",
"Book the technical demo"
],
"ai_summary": "<string>",
"attribution": {
"am_wuid": "wuid_4o251b0b130v3z6d5q0n",
"fbclid": "IwAR_sample_fbclid",
"utm_source": "facebook"
},
"booking_link_id": "850e8400-e29b-41d4-a716-446655440003",
"call_kind": "booking",
"call_stage": "first",
"closer_id": "user_2abc123xyz",
"conferencing_link": "https://zoom.us/j/123456789",
"created_at": "2026-01-17T08:00:00Z",
"duration_minutes": 45,
"ended_at": "2023-11-07T05:31:56Z",
"expected_deal_value": 5000,
"form_answers": [
{
"field_id": "field_1718000000000",
"label": "What is your monthly revenue?",
"value": "$10k-$50k",
"type": "select"
}
],
"form_data": [
{
"field_id": "budget",
"label": "What is your budget?",
"value": "<unknown>"
}
],
"guest_rsvp_confirmed_at": "2023-11-07T05:31:56Z",
"guest_rsvp_status": "yes",
"has_analysis": true,
"has_recording": true,
"id": "550e8400-e29b-41d4-a716-446655440000",
"lead_id": "650e8400-e29b-41d4-a716-446655440001",
"linked_payment_id": "<string>",
"notes": "<string>",
"product_id": "950e8400-e29b-41d4-a716-446655440004",
"recording_url": "<string>",
"referral": "<string>",
"scheduled_at": "2026-01-20T15:00:00Z",
"setter_id": "user_2def456uvw",
"started_at": "2023-11-07T05:31:56Z",
"status": "closed",
"transcript_data": {
"segments": [
{
"text": "<string>",
"end_seconds": 123,
"speaker": "<string>",
"start_seconds": 123
}
],
"duration_seconds": 123,
"language": "<string>"
},
"updated_at": "2026-01-17T09:30:00Z",
"utm_campaign": "summer_promo",
"utm_content": "<string>",
"utm_medium": "cpc",
"utm_source": "google",
"utm_term": "<string>",
"calendar_attempt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"calendar_outcome": "committed",
"old_event_left_on_calendar": true
},
"success": true
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}Create a booking
Book a call on one of your organization’s schedulers. Runs the same booking pipeline as the public booking page and the Aura dashboard:
- The calendar event is created on the assigned host’s calendar and the guest receives the standard invite + confirmation email
- The lead is created or updated (matched by organization + guest email)
- Guest reminders, meeting recording, and configured workflows are scheduled
- The
call.bookedwebhook fires to all subscribers (single emitter — do not expect a second event from this endpoint)
Host assignment: by default the booking link’s normal host assignment
(round-robin / first-free) applies. Pass closer_email to prefer a specific
host — it is resolved server-side against your organization’s roster.
Form answers: answers are validated against the booking link’s custom
field configuration — required fields must be answered and unknown field ids
are rejected with 400. Disqualification rules configured on the link are NOT
evaluated for API-created bookings (matching dashboard host-initiated booking
semantics) — the API caller vouches for the guest.
Slot validation: start_time must respect link hours and minimum notice.
Aura reserves host capacity and verifies selected conflict calendars plus the
destination immediately before mutation. Personal and unidentified busy events
block the write. Calendar providers do not atomically enforce this check, so an
external calendar edit can still race with the provider mutation.
Recovery and retries: send an Idempotency-Key header and retain the
returned attempt reference. A confirmed retry returns the committed call. A
request still in flight or an uncertain provider outcome must be investigated
before another create. An error may follow a successful provider write;
persistence failure does not automatically delete that event. An organization
administrator or authorized support can investigate the attempt through the
restricted recovery lookup. Recovery does not automatically backfill bookings.
Rate limit: this endpoint is limited to 20 requests/minute per API key, in addition to the global limits.
Upstream failures: if the calendar provider rejects the booking the
request fails with 422 EXTERNAL_API_ERROR; if the provider or scheduling
service is degraded it fails with 502 EXTERNAL_API_ERROR.
After the call. The response here describes a freshly booked call, so its
has_analysis is false and ai_summary is null. Once the call happens and the
AI review completes, the full review — scores, objection handling, key moments,
call journey and coaching — is available at GET /v1/calls/{id}/analysis, and
the call.analysis_completed webhook fires with the headline scores.
curl --request POST \
--url https://api.aura-app.ai/v1/calls \
--header 'Content-Type: application/json' \
--data '
{
"booking_link_id": "850e8400-e29b-41d4-a716-446655440003",
"guest": {
"email": "ada@example.com",
"name": "Ada Lovelace",
"phone": "+49 151 23456789"
},
"start_time": "2026-08-01T15:00:00Z",
"answers": [
{
"field_id": "budget",
"value": "10k-50k"
}
],
"closer_email": "closer@acme.com",
"end_time": "2026-08-01T15:30:00Z",
"timezone": "Europe/Berlin",
"utm_campaign": "<string>",
"utm_content": "<string>",
"utm_medium": "<string>",
"utm_source": "<string>",
"utm_term": "<string>"
}
'import requests
url = "https://api.aura-app.ai/v1/calls"
payload = {
"booking_link_id": "850e8400-e29b-41d4-a716-446655440003",
"guest": {
"email": "ada@example.com",
"name": "Ada Lovelace",
"phone": "+49 151 23456789"
},
"start_time": "2026-08-01T15:00:00Z",
"answers": [
{
"field_id": "budget",
"value": "10k-50k"
}
],
"closer_email": "closer@acme.com",
"end_time": "2026-08-01T15:30:00Z",
"timezone": "Europe/Berlin",
"utm_campaign": "<string>",
"utm_content": "<string>",
"utm_medium": "<string>",
"utm_source": "<string>",
"utm_term": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
booking_link_id: '850e8400-e29b-41d4-a716-446655440003',
guest: {email: 'ada@example.com', name: 'Ada Lovelace', phone: '+49 151 23456789'},
start_time: '2026-08-01T15:00:00Z',
answers: [{field_id: 'budget', value: '10k-50k'}],
closer_email: 'closer@acme.com',
end_time: '2026-08-01T15:30:00Z',
timezone: 'Europe/Berlin',
utm_campaign: '<string>',
utm_content: '<string>',
utm_medium: '<string>',
utm_source: '<string>',
utm_term: '<string>'
})
};
fetch('https://api.aura-app.ai/v1/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.aura-app.ai/v1/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([
'booking_link_id' => '850e8400-e29b-41d4-a716-446655440003',
'guest' => [
'email' => 'ada@example.com',
'name' => 'Ada Lovelace',
'phone' => '+49 151 23456789'
],
'start_time' => '2026-08-01T15:00:00Z',
'answers' => [
[
'field_id' => 'budget',
'value' => '10k-50k'
]
],
'closer_email' => 'closer@acme.com',
'end_time' => '2026-08-01T15:30:00Z',
'timezone' => 'Europe/Berlin',
'utm_campaign' => '<string>',
'utm_content' => '<string>',
'utm_medium' => '<string>',
'utm_source' => '<string>',
'utm_term' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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.aura-app.ai/v1/calls"
payload := strings.NewReader("{\n \"booking_link_id\": \"850e8400-e29b-41d4-a716-446655440003\",\n \"guest\": {\n \"email\": \"ada@example.com\",\n \"name\": \"Ada Lovelace\",\n \"phone\": \"+49 151 23456789\"\n },\n \"start_time\": \"2026-08-01T15:00:00Z\",\n \"answers\": [\n {\n \"field_id\": \"budget\",\n \"value\": \"10k-50k\"\n }\n ],\n \"closer_email\": \"closer@acme.com\",\n \"end_time\": \"2026-08-01T15:30:00Z\",\n \"timezone\": \"Europe/Berlin\",\n \"utm_campaign\": \"<string>\",\n \"utm_content\": \"<string>\",\n \"utm_medium\": \"<string>\",\n \"utm_source\": \"<string>\",\n \"utm_term\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.aura-app.ai/v1/calls")
.header("Content-Type", "application/json")
.body("{\n \"booking_link_id\": \"850e8400-e29b-41d4-a716-446655440003\",\n \"guest\": {\n \"email\": \"ada@example.com\",\n \"name\": \"Ada Lovelace\",\n \"phone\": \"+49 151 23456789\"\n },\n \"start_time\": \"2026-08-01T15:00:00Z\",\n \"answers\": [\n {\n \"field_id\": \"budget\",\n \"value\": \"10k-50k\"\n }\n ],\n \"closer_email\": \"closer@acme.com\",\n \"end_time\": \"2026-08-01T15:30:00Z\",\n \"timezone\": \"Europe/Berlin\",\n \"utm_campaign\": \"<string>\",\n \"utm_content\": \"<string>\",\n \"utm_medium\": \"<string>\",\n \"utm_source\": \"<string>\",\n \"utm_term\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aura-app.ai/v1/calls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"booking_link_id\": \"850e8400-e29b-41d4-a716-446655440003\",\n \"guest\": {\n \"email\": \"ada@example.com\",\n \"name\": \"Ada Lovelace\",\n \"phone\": \"+49 151 23456789\"\n },\n \"start_time\": \"2026-08-01T15:00:00Z\",\n \"answers\": [\n {\n \"field_id\": \"budget\",\n \"value\": \"10k-50k\"\n }\n ],\n \"closer_email\": \"closer@acme.com\",\n \"end_time\": \"2026-08-01T15:30:00Z\",\n \"timezone\": \"Europe/Berlin\",\n \"utm_campaign\": \"<string>\",\n \"utm_content\": \"<string>\",\n \"utm_medium\": \"<string>\",\n \"utm_source\": \"<string>\",\n \"utm_term\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"action_items": [
"Send proposal with detailed timeline",
"Book the technical demo"
],
"ai_summary": "<string>",
"attribution": {
"am_wuid": "wuid_4o251b0b130v3z6d5q0n",
"fbclid": "IwAR_sample_fbclid",
"utm_source": "facebook"
},
"booking_link_id": "850e8400-e29b-41d4-a716-446655440003",
"call_kind": "booking",
"call_stage": "first",
"closer_id": "user_2abc123xyz",
"conferencing_link": "https://zoom.us/j/123456789",
"created_at": "2026-01-17T08:00:00Z",
"duration_minutes": 45,
"ended_at": "2023-11-07T05:31:56Z",
"expected_deal_value": 5000,
"form_answers": [
{
"field_id": "field_1718000000000",
"label": "What is your monthly revenue?",
"value": "$10k-$50k",
"type": "select"
}
],
"form_data": [
{
"field_id": "budget",
"label": "What is your budget?",
"value": "<unknown>"
}
],
"guest_rsvp_confirmed_at": "2023-11-07T05:31:56Z",
"guest_rsvp_status": "yes",
"has_analysis": true,
"has_recording": true,
"id": "550e8400-e29b-41d4-a716-446655440000",
"lead_id": "650e8400-e29b-41d4-a716-446655440001",
"linked_payment_id": "<string>",
"notes": "<string>",
"product_id": "950e8400-e29b-41d4-a716-446655440004",
"recording_url": "<string>",
"referral": "<string>",
"scheduled_at": "2026-01-20T15:00:00Z",
"setter_id": "user_2def456uvw",
"started_at": "2023-11-07T05:31:56Z",
"status": "closed",
"transcript_data": {
"segments": [
{
"text": "<string>",
"end_seconds": 123,
"speaker": "<string>",
"start_seconds": 123
}
],
"duration_seconds": 123,
"language": "<string>"
},
"updated_at": "2026-01-17T09:30:00Z",
"utm_campaign": "summer_promo",
"utm_content": "<string>",
"utm_medium": "cpc",
"utm_source": "google",
"utm_term": "<string>",
"calendar_attempt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"calendar_outcome": "committed",
"old_event_left_on_calendar": true
},
"success": true
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}- The calendar event is created on the assigned host’s calendar and the guest receives the standard invite + confirmation email
- The lead is created or updated (matched by organization + guest email)
- Guest reminders, meeting recording, and configured workflows are scheduled
- The
call.bookedwebhook fires to all subscribers (single emitter — do not expect a second event from this endpoint)
closer_email to prefer a specific
host — it is resolved server-side against your organization’s roster.
Form answers: answers are validated against the booking link’s custom
field configuration — required fields must be answered and unknown field ids
are rejected with 400. Disqualification rules configured on the link are NOT
evaluated for API-created bookings (matching dashboard host-initiated booking
semantics) — the API caller vouches for the guest.
Slot validation: start_time must respect link hours and minimum notice.
Aura reserves host capacity and verifies selected conflict calendars plus the
destination immediately before mutation. Personal and unidentified busy events
block the write. Calendar providers do not atomically enforce this check, so an
external calendar edit can still race with the provider mutation.
Recovery and retries: send an Idempotency-Key header and retain the
returned attempt reference. A confirmed retry returns the committed call. A
request still in flight or an uncertain provider outcome must be investigated
before another create. An error may follow a successful provider write;
persistence failure does not automatically delete that event. An organization
administrator or authorized support can investigate the attempt through the
restricted recovery lookup. Recovery does not automatically backfill bookings.
Rate limit: this endpoint is limited to 20 requests/minute per API key,
in addition to the global limits.
Upstream failures: if the calendar provider rejects the booking the
request fails with 422 EXTERNAL_API_ERROR; if the provider or scheduling
service is degraded it fails with 502 EXTERNAL_API_ERROR.
After the call. The response here describes a freshly booked call, so its
has_analysis is false and ai_summary is null. Once the call happens and the
AI review completes, the full review — scores, objection handling, key moments,
call journey and coaching — is available at GET /v1/calls/{id}/analysis, and
the call.analysis_completed webhook fires with the headline scores.Headers
Optional retry key scoped to your organization. Reuse the same key and request body when retrying one create. Use a new key for a different create. A completed request returns the existing resource; a request still in progress returns 409.
"8f3a1c2e-3b9d-4f5a-9c7e-1a2b3c4d5e6f"
Body
Scheduler to book against (must be active)
"850e8400-e29b-41d4-a716-446655440003"
The prospect being booked
Show child attributes
Show child attributes
Slot start as an ISO-8601 datetime (UTC or with offset). Must be in the future and respect the scheduler's minimum notice.
"2026-08-01T15:00:00Z"
Answers to the scheduler's custom form fields. Required fields must be answered; unknown field ids are rejected with 400. Disqualification rules configured on the link are NOT evaluated for API-created bookings (matching dashboard host-initiated booking semantics).
Show child attributes
Show child attributes
Preferred host, by email. Resolved server-side against the organization's roster (no internal user IDs needed). When omitted, the scheduler's normal host assignment (round-robin / first-free) applies.
"closer@acme.com"
Slot end. When omitted, derived from the scheduler's configured duration.
"2026-08-01T15:30:00Z"
IANA timezone for the guest (e.g. Europe/Berlin). Defaults to the scheduler's timezone.
"Europe/Berlin"
255255255Attribution: UTM source recorded on the call and lead
255255