Hotelumo API 1.0.0
Public REST API for Hotelumo. Authenticate with an API key created in the Hotelumo dashboard: send the base64-encoded key secret with HTTP Basic auth. Each key carries per-resource scopes like reservations:read or rates:write.
https://api.hotelumo.com
apiKey— HTTP Basic auth carrying only the API key secret:Authorization: Basic base64(<key secret>).accessToken— Operator session token issued by the Hotelumo dashboard:Authorization: Token <access token>.
Availability
GET/api/hotels/{hotelId}/availability
Find public room offers for a stay
Returns sanitized room-type offers for the requested dates and occupancy. Prices and inventory are calculated by the server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId required |
path | string | |
checkInDate required |
query | string | |
checkOutDate required |
query | string | |
adults |
query | integer default 2 | |
children |
query | integer default 0 | |
infants |
query | integer default 0 |
Responses
| Status | Meaning |
|---|---|
200 | Public room offers |
400 | Invalid dates or occupancy |
404 | Hotel not found |
POST/api/hotels/{hotelId}/book-reservation
Request a room reservation
Revalidates the selected offer, then creates a REQUESTED reservation with one unassigned PENDING room for hotel staff to approve.
Responses
| Status | Meaning |
|---|---|
201 | Reservation request created |
409 | The selected offer is no longer available |
Daily rates
GET/api/dailyRates
List daily rates
Reads per-day prices/inventory for a rate plan over a date window (the ARI surface). Pass hotelId, ratePlanId, dateFrom and dateTo. Requires the rates:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId required |
query | string | |
ratePlanId required |
query | string | |
dateFrom required |
query | string | |
dateTo required |
query | string |
Responses
| Status | Meaning |
|---|---|
200 | Array of daily rates |
403 | API key is missing the rates:read scope |
POST/api/dailyRates
Upsert daily rates
Batch-upserts per-day prices/inventory (max 500 per call). Requires the rates:write scope.
Responses
| Status | Meaning |
|---|---|
200 | The upserted daily rates |
403 | API key is missing the rates:write scope |
Guests
GET/api/guests
List guests
Lists the guests of your organization, optionally filtered by hotelId, email or _ids. Requires the guests:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId |
query | string | |
email |
query | string | |
_ids |
query | string | Comma-separated list of guest ids |
fields |
query | string | Comma-separated projection of fields to return |
Responses
| Status | Meaning |
|---|---|
200 | Array of guests |
401 | Missing or invalid credentials |
403 | API key is missing the guests:read scope |
429 | API key rate limit exceeded |
POST/api/guests
Create a guest
Requires the guests:write scope.
Responses
| Status | Meaning |
|---|---|
200 | The created guest |
403 | API key is missing the guests:write scope |
GET/api/guests/{guestId}
Get a guest
Returns a single guest by id. Guests belonging to another organization respond 404. Requires the guests:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
guestId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The guest |
404 | Not found (or owned by another organization) |
PUT/api/guests/{guestId}
Update a guest
Updates a guest by id. Guests belonging to another organization respond 404. Requires the guests:write scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
guestId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The updated guest |
404 | Not found (or owned by another organization) |
DELETE/api/guests/{guestId}
Delete a guest
Deletes a guest by id. Guests belonging to another organization respond 404. Requires the guests:write scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
guestId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The deleted guest |
404 | Not found (or owned by another organization) |
Rate plans
GET/api/ratePlans
List rate plans
Lists the rate plans for a hotel (pass hotelId). Rate plans are part of the ARI pricing surface, so this requires the rates:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId required |
query | string | |
roomTypeId |
query | string |
Responses
| Status | Meaning |
|---|---|
200 | Array of rate plans |
403 | API key is missing the rates:read scope |
POST/api/ratePlans
Create or update a rate plan
Requires the rates:write scope.
Responses
| Status | Meaning |
|---|---|
200 | The created rate plan |
403 | API key is missing the rates:write scope |
Reservations
GET/api/reservations
List reservations
Lists the reservations of your organization. Optionally filter by hotelId, guestId, a legacy startTime/endTime window, or an overlapping stay window with stayDateFrom/stayDateTo. Requires the reservations:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId |
query | string | |
guestId |
query | string | |
startTime |
query | string | |
endTime |
query | string | |
stayDateFrom |
query | string | Include stays checking out after this date |
stayDateTo |
query | string | Include stays checking in on or before this date |
limit |
query | integer default 0 | |
skip |
query | integer default 0 | |
sortField |
query | string | |
sortDirection |
query | string ASC | DESC | |
fields |
query | string | Comma-separated projection of fields to return |
Responses
| Status | Meaning |
|---|---|
200 | Array of reservations |
401 | Missing or invalid credentials |
403 | API key is missing the reservations:read scope |
429 | API key rate limit exceeded |
POST/api/reservations
Create a reservation
Creates a reservation (and its ReservationRooms from the rooms array). Requires the reservations:write scope.
Responses
| Status | Meaning |
|---|---|
200 | The created reservation |
403 | API key is missing the reservations:write scope |
GET/api/reservations/{reservationId}
Get a reservation
Returns a single reservation by id, with its rooms. Reservations belonging to another organization respond 404. Requires the reservations:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
reservationId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The reservation |
404 | Not found (or owned by another organization) |
PUT/api/reservations/{reservationId}
Update a reservation
Updates a reservation by id. Reservations belonging to another organization respond 404. Requires the reservations:write scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
reservationId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The updated reservation |
403 | API key is missing the reservations:write scope |
404 | Not found (or owned by another organization) |
DELETE/api/reservations/{reservationId}
Delete a reservation
Deletes a reservation by id (cascading its rooms, folio and charges). Reservations belonging to another organization respond 404. Requires the reservations:write scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
reservationId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The deleted reservation |
404 | Not found (or owned by another organization) |
POST/api/reservations/{reservationId}/approve
Approve a requested reservation
Rechecks inventory, promotes the parent to CONFIRMED and each PENDING room to CONFIRMED, then starts the normal folio/reminder workflow. Requires the reservations:write scope.
Responses
| Status | Meaning |
|---|---|
200 | Approved reservation |
409 | The request cannot be approved or inventory changed |
Rooms
GET/api/rooms
List rooms
Lists the physical rooms of your organization, optionally filtered by hotelId or roomTypeId. Requires the rooms:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId |
query | string | |
roomTypeId |
query | string |
Responses
| Status | Meaning |
|---|---|
200 | Array of rooms |
403 | API key is missing the rooms:read scope |
429 | API key rate limit exceeded |
POST/api/rooms
Create a room
Requires the rooms:write scope.
Responses
| Status | Meaning |
|---|---|
200 | The created room |
403 | API key is missing the rooms:write scope |
Room types
GET/api/roomTypes
List room types
Lists the room types of your organization, optionally filtered by hotelId. Room types are part of the physical inventory, so this requires the rooms:read scope.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
hotelId |
query | string |
Responses
| Status | Meaning |
|---|---|
200 | Array of room types |
403 | API key is missing the rooms:read scope |
POST/api/roomTypes
Create a room type
Requires the rooms:write scope.
Responses
| Status | Meaning |
|---|---|
200 | The created room type |
403 | API key is missing the rooms:write scope |
Webhook subscriptions
GET/api/webhooksubscriptions
List webhook subscriptions
Webhook subscriptions deliver reservation.created, reservation.updated, reservation.deleted, guest.created, guest.updated and guest.deleted events to your server as signed POST requests (X-Hotelumo-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of "timestamp.body">). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the secret is only returned once, on create.
Responses
| Status | Meaning |
|---|---|
200 | Array of webhook subscriptions (without secrets) |
POST/api/webhooksubscriptions
Create a webhook subscription
The response includes the signing secret exactly once — store it; it cannot be retrieved again.
Request body application/json
| Field | Type | Description |
|---|---|---|
hotelId required |
string | |
url required |
string | |
events |
array | Empty array subscribes to all events |
Responses
| Status | Meaning |
|---|---|
200 | The created subscription, including its secret |
PUT/api/webhooksubscriptions/{webhookSubscriptionId}
Update a webhook subscription
url, events and active are editable; the secret and hotel are immutable. Re-enabling an auto-disabled endpoint is done by setting active back to true.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookSubscriptionId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | The updated subscription (without secret) |
DELETE/api/webhooksubscriptions/{webhookSubscriptionId}
Delete a webhook subscription
Delete a webhook subscription
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookSubscriptionId required |
path | string |
Responses
| Status | Meaning |
|---|---|
200 | Deleted |