VANITYPASS
White-label APIAI Concierge

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

FieldTypeRequiredDescription
session_idstringyesConversation session for multi-turn chat.
messagestringyesThe user's question or request.
contextobject | nullnoUser profile, past bookings, or preferences to ground the reply.
Sandbox-only. Try-it requests target https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us.
POST/v1/concierge/chat

Sandbox 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):

FieldTypeRequiredDescription
session_idstringyesConversation session ID.
messagestringyesThe user's message to the engine.
contextobject | nullnoOptional structured context for the engine.
Sandbox-only. Try-it requests target https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us.
POST/v1/engine/conversation/stream

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

ParameterInTypeRequiredDescription
session_idpathstringyesConversation session ID.
Sandbox-only. Try-it requests target https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us.
GET/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):

FieldTypeRequiredDescription
room_idstringyesIdentifier of the room being booked.
room_pricenumber (double)yesPrice of the room.
nightsinteger (int32, ≥ 0)yesNumber of nights for the stay.
Sandbox-only. Try-it requests target https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us.
POST/v1/concierge/individual/perk

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

ParameterInTypeRequiredDescription
circle_idpathstringyesUUID of the circle.

Returns 403 if the caller is not a member of the circle, or 404 if the circle does not exist.

Sandbox-only. Try-it requests target https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us.
GET/v1/concierge/circle/{circle_id}/context

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/concierge/circle/{circle_id}/context' \
  -H 'Content-Type: application/json' \
  -H 'X-Environment: Sandbox' \