AI Concierge Chat
Stream conversational AI replies, replay history, and get personalized perk recommendations for your end users.
AI Concierge Chat
Send a user's travel question to the AI concierge and stream back a context-aware reply. The concierge understands travel patterns, recommends destinations and perks, and answers complex questions across multi-turn conversations.
All requests use white-label (JWT) auth. Send Authorization: Bearer <JWT>, X-App-Id: <uuid> (or X-App-Slug: <slug>), and X-Environment: Sandbox | Production on every call.
Streaming response format
POST /v1/concierge/chat and POST /v1/engine/conversation/stream respond with Content-Type: text/event-stream. Instead of a single JSON body, the server pushes a sequence of Server-Sent Events. Read the connection as a stream and parse each frame — a data: line (optionally preceded by an event: line) terminated by a blank line:
event: token
data: {"content": "Based on your "}
event: token
data: {"content": "preferences, I'd recommend..."}
event: done
data: [DONE]
Concatenate the content fragments to build the full reply as it streams. The stream ends with a terminal event; close the connection once it arrives. Exact data payloads are application-defined — treat unknown event types as ignorable.
Chat
POST /v1/concierge/chat
Stream a concierge reply to a single user message. Pass a session_id to keep multi-turn context.
Body (IncomingMessage):
| Field | Type | Required | Description |
|---|---|---|---|
session_id | string | yes | Conversation session for multi-turn chat. |
message | string | yes | The user's question or request. |
context | object | null | no | User profile, past bookings, or preferences to ground the reply. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/concierge/chatSandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X POST 'https://cloud.vanitypass.com/v1/concierge/chat' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"session_id":"sess_example","message":"I'm traveling to Barcelona in July. What should I do?"}'Conversation stream
POST /v1/engine/conversation/stream
Lower-level AI engine streaming endpoint. Same SSE response format as /v1/concierge/chat, keyed on an explicit session_id.
Body (ConversationRequest):
| Field | Type | Required | Description |
|---|---|---|---|
session_id | string | yes | Conversation session ID. |
message | string | yes | The user's message to the engine. |
context | object | null | no | Optional structured context for the engine. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/engine/conversation/streamSandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X POST 'https://cloud.vanitypass.com/v1/engine/conversation/stream' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"session_id":"sess_example","message":"Suggest a lounge to visit at CDG."}'Conversation history
GET /v1/engine/conversation/history/{session_id}
Retrieve the stored message history for a conversation session. Use it to rehydrate a chat thread when the user reopens your app.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
session_id | path | string | yes | Conversation session ID. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/engine/conversation/history/{session_id}Sandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X GET 'https://cloud.vanitypass.com/v1/engine/conversation/history/{session_id}' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \Individual perk recommendation
POST /v1/concierge/individual/perk
Get a personalized perk recommendation for a single room booking. Returns a 200 with a perk suggestion for the given room and stay.
Body (IndividualBookingRequest):
| Field | Type | Required | Description |
|---|---|---|---|
room_id | string | yes | Identifier of the room being booked. |
room_price | number (double) | yes | Price of the room. |
nights | integer (int32, ≥ 0) | yes | Number of nights for the stay. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/concierge/individual/perkSandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X POST 'https://cloud.vanitypass.com/v1/concierge/individual/perk' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"room_id":"room_example","room_price":220,"nights":3}'Circle context
GET /v1/concierge/circle/{circle_id}/context
Fetch concierge conversation context for a circle (group) booking. Use it to seed the concierge with the group's shared trip details before starting a chat.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
circle_id | path | string | yes | UUID of the circle. |
Returns 403 if the caller is not a member of the circle, or 404 if the circle does not exist.
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/concierge/circle/{circle_id}/contextSandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X GET 'https://cloud.vanitypass.com/v1/concierge/circle/{circle_id}/context' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \