Skip to main content
POST
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.booked webhook 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.

Headers

Idempotency-Key
string

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.

Example:

"8f3a1c2e-3b9d-4f5a-9c7e-1a2b3c4d5e6f"

Body

application/json

Scheduler to book against (must be active)

Example:

"850e8400-e29b-41d4-a716-446655440003"

guest
object
required

The prospect being booked

start_time
string<date-time>
required

Slot start as an ISO-8601 datetime (UTC or with offset). Must be in the future and respect the scheduler's minimum notice.

Example:

"2026-08-01T15:00:00Z"

answers
object[]

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).

closer_email
string<email>

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.

Example:

"closer@acme.com"

end_time
string<date-time>

Slot end. When omitted, derived from the scheduler's configured duration.

Example:

"2026-08-01T15:30:00Z"

timezone
string

IANA timezone for the guest (e.g. Europe/Berlin). Defaults to the scheduler's timezone.

Example:

"Europe/Berlin"

utm_campaign
string
Maximum string length: 255
utm_content
string
Maximum string length: 255
utm_medium
string
Maximum string length: 255
utm_source
string

Attribution: UTM source recorded on the call and lead

Maximum string length: 255
utm_term
string
Maximum string length: 255

Response

Booking created (or idempotent replay of a prior create). When its details could not be read back, data carries details_pending: true and the id to read them from.

data
object
required
success
enum<boolean>
required
Available options:
true