Guests
The Guests module provides a unified guest profile layer across all platform interactions — AI conversations, bookings, messaging, and service requests. Every guest record is property-scoped and identified by a persistent ID.
The Guest object
idstringUnique guest ID. Prefixed gst_.property_idstringThe property this guest is associated with.first_namestringGuest's first name.last_namestringGuest's last name.emailstring | nullEmail address. Used for messaging and identity matching.phonestring | nullPhone number (E.164 format recommended for SMS).languagestringPreferred language (IETF BCP 47). Defaults to en.preferencesobjectArbitrary key-value preferences — room type, dietary, activities, etc.is_activebooleanSet to false to soft-deactivate without deleting.first_seen_atdatetimeFirst platform interaction timestamp.last_seen_atdatetimeMost recent interaction timestamp. Auto-updated.created_atdatetimeRecord creation timestamp.Endpoints
/v1/guestsCreate a guestCreate a new guest profile. If the guest already exists (matched by email), update their record instead.
Request Body
first_namestringrequiredGuest's first name.last_namestringrequiredGuest's last name.emailstringEmail address.phonestringPhone number.languagestringBCP 47 language tag. Defaults to en.preferencesobjectPreference key-value store.metadataobjectArbitrary metadata for your own use.curl -X POST https://api.escapelife.ai/v1/guests \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Jordan",
"last_name": "Mitchell",
"email": "jordan.mitchell@example.com",
"phone": "+13055551234",
"language": "en",
"preferences": {
"room_type": "ocean_view",
"dietary": ["gluten_free"],
"activities": ["golf", "spa"]
}
}'{
"id": "gst_a1b2c3d4e5f6",
"property_id": "pty_xyz123",
"first_name": "Jordan",
"last_name": "Mitchell",
"email": "jordan.mitchell@example.com",
"phone": "+13055551234",
"language": "en",
"preferences": {
"room_type": "ocean_view",
"dietary": ["gluten_free"],
"activities": ["golf", "spa"]
},
"is_active": true,
"first_seen_at": "2026-03-15T10:00:00Z",
"last_seen_at": "2026-03-15T10:00:00Z",
"created_at": "2026-03-15T10:00:00Z",
"updated_at": "2026-03-15T10:00:00Z"
}/v1/guestsList guestsReturn all guests for this property. Supports full-text search by name or email and offset pagination.
Path / Query Parameters
searchstringSearch by first name, last name, or email.limitintegerMax results per page. Default 50, max 200.offsetintegerPagination offset. Default 0./v1/guests/{guest_id}Get a guestPath / Query Parameters
guest_idstringrequiredGuest ID (gst_...)./v1/guests/{guest_id}Update a guestPartial update — only fields present in the request body are modified.
Path / Query Parameters
guest_idstringrequiredGuest ID (gst_...).Request Body
first_namestringUpdated first name.last_namestringUpdated last name.preferencesobjectReplaces the entire preferences object.is_activebooleanSet to false to deactivate./v1/guests/{guest_id}Delete a guestPermanently delete the guest and all associated conversations, intents, and messages. Irreversible.
Path / Query Parameters
guest_idstringrequiredGuest ID (gst_...).Preferences schema
The preferences object is free-form. Recommended keys used by the AI layer:
room_typeocean_view, king, suitePreferred room type.dietary["vegan", "gluten_free"]Dietary requirements.activities["golf", "spa", "tennis"]Preferred activities for recommendation engine.languagees, fr, de, jaPreferred communication language.loyalty_tiergold, platinumLoyalty program tier.occasionhoneymoon, birthday, anniversarySpecial occasion for this stay.Webhooks fired by this module
guest.createdA new guest profile was created.
guest.updatedA guest profile was modified.
guest.intent.createdAI detected a guest intent during a conversation.