EscapeLifeDocs
Phase 6 · Available

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 · outbound
statusenumringing · active · completed · missed · failed · voicemail
providerenumtwilio · aircall · ringcentral · openphone · manual
from_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

GET/v1/callsList calls

Return 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.
POST/v1/callsLog a call

Manually 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.
GET/v1/calls/summaryCall summary

Aggregated totals by direction, status, and provider.

GET/v1/calls/{id}Get a call

Retrieve a single call record.

Path / Query Parameters

idstringrequiredCall ID (cal_...).
PATCH/v1/calls/{id}Update a call

Add recording URL, transcript, summary, notes, or link to a guest/staff member.

Path / Query Parameters

idstringrequiredCall ID (cal_...).
DELETE/v1/calls/{id}Delete a call

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

TwilioPOST /v1/calls/webhook/twilio

Set as Status Callback URL on your Twilio phone number or TwiML application.

AircallPOST /v1/calls/webhook/aircall

Add in Aircall Dashboard → Integrations → Webhooks. Subscribe to call.ended, call.missed, call.answered.

RingCentralPOST /v1/calls/webhook/ringcentral

Create a webhook subscription in RingCentral Developer Portal for telephony/sessions events.

Example — log a manual call

cURL
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."
  }'
Response
{
  "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"
}