Calls
Log, search, and enrich inbound and outbound calls across Twilio, Aircall, and RingCentral. Every call is auto-matched to a guest record by phone number. Recordings and AI transcripts are attached when available.
Provider-agnostic call log
Calls are logged automatically via provider webhooks at POST /v1/calls/webhook/twilio, /aircall, or /ringcentral. You can also log calls manually via POST /v1/calls for systems without a webhook API.
The Call object
idstringUnique call ID. Prefixed cal_.property_idstringProperty this call belongs to.guest_idstring?Auto-matched from phone number, or set manually.reservation_idstring?Reservation linked to this call.staff_idstring?Staff member who handled the call.directionenuminbound · outboundstatusenumringing · active · completed · missed · failed · voicemailproviderenumtwilio · aircall · ringcentral · openphone · manualfrom_numberstringE.164 caller number.to_numberstringE.164 destination number.provider_call_sidstring?Provider's native call ID for deduplication.duration_secondsinteger?Call duration. Set by webhook on completion.recording_urlstring?Link to call recording audio file.transcriptstring?Full call transcript text.summarystring?AI-generated call summary.notesstring?Staff notes added after the call.answered_atdatetime?When the call was answered.ended_atdatetime?When the call ended.Endpoints
/v1/callsList callsReturn all calls for the property, newest first.
Path / Query Parameters
directionstringFilter by inbound or outbound.statusstringFilter by call status.providerstringFilter by provider.guest_idstringFilter calls for a specific guest.limitintegerMax results (1–200). Default 50.offsetintegerPagination offset./v1/callsLog a callManually log a call. Guest is auto-matched by phone number if guest_id is omitted.
Request Body
directionenumrequiredinbound or outbound.from_numberstringrequiredE.164 caller number.to_numberstringrequiredE.164 destination number.providerenumtwilio · aircall · ringcentral · openphone · manual. Default manual.statusenumDefault completed.duration_secondsintegerCall duration in seconds.recording_urlstringURL to the call recording.transcriptstringFull transcript text.summarystringAI-generated summary.notesstringStaff notes.guest_idstringOverride auto-match.staff_idstringStaff member who handled the call./v1/calls/summaryCall summaryAggregated totals by direction, status, and provider.
/v1/calls/{id}Get a callRetrieve a single call record.
Path / Query Parameters
idstringrequiredCall ID (cal_...)./v1/calls/{id}Update a callAdd recording URL, transcript, summary, notes, or link to a guest/staff member.
Path / Query Parameters
idstringrequiredCall ID (cal_...)./v1/calls/{id}Delete a callRemove a call record permanently.
Path / Query Parameters
idstringrequiredCall ID (cal_...).Provider webhooks
Configure these URLs in your provider dashboard. No API key is required — calls are matched to your property via the phone number registered in the system.
POST /v1/calls/webhook/twilioSet as Status Callback URL on your Twilio phone number or TwiML application.
POST /v1/calls/webhook/aircallAdd in Aircall Dashboard → Integrations → Webhooks. Subscribe to call.ended, call.missed, call.answered.
POST /v1/calls/webhook/ringcentralCreate a webhook subscription in RingCentral Developer Portal for telephony/sessions events.
Example — log a manual call
curl -X POST https://api.escapelife.ai/v1/calls \
-H "X-API-Key: sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"direction": "inbound",
"from_number": "+13055551234",
"to_number": "+18005559999",
"status": "completed",
"duration_seconds": 187,
"notes": "Guest asked about early check-in. Approved for 1pm."
}'{
"id": "cal_a1b2c3d4e5f6",
"property_id": "pty_xyz",
"guest_id": "gst_matched_by_phone",
"direction": "inbound",
"status": "completed",
"provider": "manual",
"from_number": "+13055551234",
"to_number": "+18005559999",
"duration_seconds": 187,
"recording_url": null,
"transcript": null,
"notes": "Guest asked about early check-in. Approved for 1pm.",
"created_at": "2026-03-16T14:00:00Z"
}