Hotels, Rooms & Allocations
Attach hotels and rooms to a circle, assign members to rooms, and manage detailed room allocations and occupants.
Hotels, Rooms & Allocations
Once a circle has members, attach the hotels it will stay at, add the rooms, and place members into those rooms. Two layers of assignment exist:
- Quick assignment —
allocationendpoints place a single user into a room in one call. - Detailed allocations —
room-allocationsendpoints model a room's full occupancy: create an allocation for a room, then add or remove occupants and track payment-split metadata.
All endpoints authenticate as the end user with a Bearer JWT plus the X-App-Id and X-Environment headers. {circle_id}, {hotel_id}, {room_id}, {allocation_id}, and {member_id} in the paths are UUIDs.
Payment-split metadata
Room and allocation responses carry payment-split fields so a group can track who pays for each room:
- On a room (
RoomPayload):payee— the member responsible for paying — andhas_paid(boolean). - On an allocated occupant (
RoomAllocationUserMetadata):is_payee(boolean) marking the paying occupant, andsplit_ratio(number, optional) for their share of the cost.
These appear in responses; you do not send them when creating allocations.
Add a Hotel
POST /v1/circle/{circle_id}/hotels
Attaches a hotel to the circle.
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | Hotel identifier from the hotel catalogue. |
provider | string | no | Source provider of the hotel. |
search_parameter | object | no | Integration search parameters used to resolve the hotel. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/hotelsSandbox 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/circle/{circle_id}/hotels' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"id":"hotel_12345","provider":"etg"}'Remove a Hotel
DELETE /v1/circle/{circle_id}/hotels/{hotel_id}
Removes a hotel from the circle. No request body.
| Field | Type | Required | Description |
|---|---|---|---|
circle_id | string (path) | yes | Circle UUID. |
hotel_id | string (path) | yes | Hotel identifier. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/hotels/{hotel_id}Sandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X DELETE 'https://cloud.vanitypass.com/v1/circle/{circle_id}/hotels/{hotel_id}' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \Add Rooms to a Hotel
POST /v1/circle/{circle_id}/hotels/{hotel_id}/rooms
Adds one or more rooms to a hotel in the circle. The body is a rooms array; each entry describes a room. All room fields are optional — populate the ones your catalogue provides.
| Field | Type | Required | Description |
|---|---|---|---|
rooms | array | yes | List of rooms to add. |
rooms[].id | string | no | Room identifier. |
rooms[].category_name | string | no | Room category / name. |
rooms[].room_number | string | no | Room number. |
rooms[].occupants | integer | no | Number of occupants the room holds. |
rooms[].max_allowed | integer | no | Maximum occupancy. |
rooms[].total_price | number | no | Total price for the stay. |
rooms[].currency | string | no | Price currency. |
rooms[].provider | string | no | Source provider of the room. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/hotels/{hotel_id}/roomsSandbox 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/circle/{circle_id}/hotels/{hotel_id}/rooms' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"rooms":[{"id":"room_001","category_name":"Deluxe King","occupants":2,"currency":"AED"}]}'Remove a Room
DELETE /v1/circle/{circle_id}/hotels/{hotel_id}/rooms/{room_id}
Removes a room from a hotel in the circle. No request body.
| Field | Type | Required | Description |
|---|---|---|---|
circle_id | string (path) | yes | Circle UUID. |
hotel_id | string (path) | yes | Hotel identifier. |
room_id | string (path) | yes | Room identifier. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/hotels/{hotel_id}/rooms/{room_id}Sandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X DELETE 'https://cloud.vanitypass.com/v1/circle/{circle_id}/hotels/{hotel_id}/rooms/{room_id}' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \Assign a Member to a Room
POST /v1/circle/{circle_id}/allocation
Quick assignment — places a single user into a specific room.
| Field | Type | Required | Description |
|---|---|---|---|
hotel_id | string | yes | Hotel identifier the room belongs to. |
room_id | string | yes | Room identifier to assign into. |
target_user_id | string | yes | User being assigned to the room. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/allocationSandbox 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/circle/{circle_id}/allocation' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"hotel_id":"hotel_12345","room_id":"room_001","target_user_id":"user_789"}'Remove a Room Assignment
PUT /v1/circle/{circle_id}/allocation/remove
Removes a quick room assignment. Uses the same body shape as the assign call to identify the room and user.
| Field | Type | Required | Description |
|---|---|---|---|
hotel_id | string | yes | Hotel identifier the room belongs to. |
room_id | string | yes | Room identifier. |
target_user_id | string | yes | User whose assignment is being removed. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/allocation/removeSandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X PUT 'https://cloud.vanitypass.com/v1/circle/{circle_id}/allocation/remove' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"hotel_id":"hotel_12345","room_id":"room_001","target_user_id":"user_789"}'List Room Allocations
GET /v1/circle/{circle_id}/room-allocations
Lists all detailed room allocations for the circle, including occupants and payment-split metadata. No request body.
| Field | Type | Required | Description |
|---|---|---|---|
circle_id | string (path) | yes | Circle UUID. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/room-allocationsSandbox 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/circle/{circle_id}/room-allocations' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \Create a Room Allocation
POST /v1/circle/{circle_id}/room-allocations
Creates a detailed allocation for a specific circle hotel room. Occupants are added separately.
| Field | Type | Required | Description |
|---|---|---|---|
hotel_room_id | string | yes | Identifier of the circle hotel room to allocate. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/room-allocationsSandbox 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/circle/{circle_id}/room-allocations' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"hotel_room_id":"hotel_room_abc"}'Get a Room Allocation
GET /v1/circle/{circle_id}/room-allocations/{allocation_id}
Returns a single allocation with its occupants and payment-split metadata. Returns 404 if not found. No request body.
| Field | Type | Required | Description |
|---|---|---|---|
circle_id | string (path) | yes | Circle UUID. |
allocation_id | string (path) | yes | Allocation UUID. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/room-allocations/{allocation_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/circle/{circle_id}/room-allocations/{allocation_id}' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \Delete a Room Allocation
DELETE /v1/circle/{circle_id}/room-allocations/{allocation_id}
Deletes an allocation. No request body.
| Field | Type | Required | Description |
|---|---|---|---|
circle_id | string (path) | yes | Circle UUID. |
allocation_id | string (path) | yes | Allocation UUID. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/room-allocations/{allocation_id}Sandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X DELETE 'https://cloud.vanitypass.com/v1/circle/{circle_id}/room-allocations/{allocation_id}' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \Add an Occupant
POST /v1/circle/{circle_id}/room-allocations/{allocation_id}/occupants
Adds a circle member as an occupant of the allocation.
| Field | Type | Required | Description |
|---|---|---|---|
circle_member_id | string | yes | The member's circle-membership identifier. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/room-allocations/{allocation_id}/occupantsSandbox 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/circle/{circle_id}/room-allocations/{allocation_id}/occupants' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \
-d '{"circle_member_id":"{member_id}"}'Remove an Occupant
DELETE /v1/circle/{circle_id}/room-allocations/{allocation_id}/occupants/{member_id}
Removes an occupant from the allocation. No request body.
| Field | Type | Required | Description |
|---|---|---|---|
circle_id | string (path) | yes | Circle UUID. |
allocation_id | string (path) | yes | Allocation UUID. |
member_id | string (path) | yes | Member UUID to remove. |
https://cloud.vanitypass.com with X-Environment: Sandbox. No real bookings or charges. Production access: contact us./v1/circle/{circle_id}/room-allocations/{allocation_id}/occupants/{member_id}Sandbox credentials
Keys never leave your browser — they are sent only to cloud.vanitypass.com with X-Environment: Sandbox.
curl -X DELETE 'https://cloud.vanitypass.com/v1/circle/{circle_id}/room-allocations/{allocation_id}/occupants/{member_id}' \
-H 'Content-Type: application/json' \
-H 'X-Environment: Sandbox' \