Getting Started
This page will guide you so that you can begin developing
your integration with SHMS API. You can explore this API to enhance
your connectivity with the SHMS system and develop new use cases and
features.
In order to make your first request, you will need access to the SHMS
URL and an API Key. You can request these parameters from the
property. The API key is subject to rate limits that are explained in
the
Authentication section.
First request
You can check that your setup is working using the
Get room types operation, which
returns details about the room structure of the property. For
example, we can try a
curl -X GET "SHMS_API_SERVER"/openapi/roomTypes" -H
'x-api-key: "YOUR_API_KEY"'
. If successful, the API will return 200 HTTP status code with the
room structure in the message body, something like this:
[{
"code": "TRI",
"type": "NORMAL_ROOM",
"description": "Triple Room",
"altDescriptions": [],
"numPax": 3,
"numRooms": 27,
"account": "70000000"
},
{
"code": "DOB",
"type": "NORMAL_ROOM",
"description": "Double Room",
"altDescriptions": [],
"numPax": 2,
"numRooms": 40,
"account": "70000000"
},
{
"code": "JS",
"type": "NORMAL_ROOM",
"description": "Junior Suite ",
"altDescriptions": [],
"numPax": 2,
"numRooms": 14,
"account": "70000000"
},
{
"code": "MAST",
"type": "HALL",
"description": "MASTER ",
"altDescriptions": [],
"numPax": 0,
"numRooms": 15,
"account": "70000000"
}]
API Versioning
You can include the request header
Accept
to choose between different versions of the API. Available values are
described in each method (application/openapi-v1+json,
application/openapi-v2+json, etc.). If this header is omitted, then
the latest version of the API will be used and the
content-type
response header will indicate which version is being used.
Request parameters format
date: following the format YYYY-MM-DD, without
including a time component. For example, October 21st, 2025 is
represented as 2025-10-21
date-time: following the format YYYY-MM-DD
hh:mm:ss, using the 24-hour clock system. For example, October
21st, 2025 at 21:00 is represented as 2025-10-21 21:00:00
number: used for floating-point numbers,
otherwise type integer (or int64/int32)
would be used
array of string: used for passing multiple
values in a query parameter, following a comma-separated format.
For example: DB,JS,BB
Data serialization
date: following the format YYYY-MM-DD, without
including a time component. For example, October 21st, 2025 is
represented as 2025-10-21
date-time: following the format YYYY-MM-DD
hh:mm:ss, using the 24-hour clock system. For example, October
21st, 2025 at 21:00 is represented as 2025-10-21 21:00:00
number: used for floating-point numbers,
otherwise type integer would be used
Pagination
Some operations might return a huge amount of records or need a lot
of processing resources, so pagination is introduced to limit the
number of records that the operation returns. In these cases, query
parameters
page
and
size
are used to handle this situation and retrieve all the data in a
manageable and efficient manner. The limit for the
size
parameter could be different from one method to another, depending on
the resources consumed by the operation that is being executed.
API errors
Whenever an error is thrown by the API, the response body will have
the format described in
ApiError.
The reason of the error will be described in the fields
message
,
detailedDescription
and
validationErrors
. The
code
field is an internal code to help accelerate troubleshooting.
Best practices
- Use the available parameters to reduce the returned data to
get only the data you need
- Cache unchanging data or data that you use very often, to
limit the number of requests done
- Do not retry the request when you hit the rate limit.
Instead, read and respect the value in the
Retry-After
response header. Please do not retry them automatically.
- Pay close attention to the error message descriptions.
Typical use cases
Booking engine
A booking engine could use this API to get the availability and
prices in real time:
- Use the method Get
availability filtering by dates and room types.
- Use the method Get
restrictions if the booking engine wants to control minLOS, maxLOS
or release restrictions.
- Use the method Get rate details
filtering by dates and room types to get the prices of a rate.
Optionally, use the method Get rate's
close restrictions in order to get the close restrictions of the
rate.
- Instead of using Get rate details, use the method Get rate prices
filtering by dates, room type and meal plan to get the final prices
of a rate.
POS system
A POS system could use this API to get in-house stays information
about their meal plans in real time:
- Use the method Get stay by
room number to locate the information for the stay.
- Or use the method Get
stays to obtain all the stays information.
- Depending on the parameters
fullCredit and mealPlan,
decide if a charge to the room can be made, and post it using the Post
charge operation
Reference tables
There are some enumerated values throughout the API whose
meanings are explained in the following section. All the values for
the enum types that are mentioned in the rest of the documentation
are explained here.
Occupancy status
- FREE: if the room is empty
- OCCUPIED: if the room currently has a stay in it
- RESERVED: if the room is empty but with a reservation
scheduled to check-in
- OCCUPIED_AND_RESERVED: if the room currently has a stay in
it that has not yet checked out and with a reservation scheduled to
check-in
Cleaning status
- DIRTY: if the room is dirty
- CLEAN: if the room is clean
- CLEANING: if the room is dirty but the cleaning has started
- INSPECTED: if the room is clean and revised by the
houskeeeper
Cleaning reason
- CHECK_IN: if the room has a check-in
- CHECK_OUT: if the room has a check-out
- STAY_CONTINUE: if the room has a continuing stay
- CHECK_IN_AND_OUT: if the room has a check-in and a check-out
on the same day
- DIRTY_PREV_DAYS: if the room is dirty from previous days
Client type
- AGENCY: the client is an agency
- COMPANY: the client is a company
- DIRECT_CLIENT: the client is a person
Agency type
- AGENCY: common agency
- ONLINE_AGENCY: online agency
- TOUR_OPERATOR: common tour operator
- ONLINE_TOUR_OPERATOR: online tour operator
- ONLINE: rest of online agencies
Commission enforcement
- ROOM: only room charges
- MEAL_PLAN: only meal plan charges
- OTHER: only other charges
- ROOM_MEAL_PLAN: only room and meal plan charges
- ROOM_MEAL_PLAN_OTHER: all charges: room, meal plan and other
Type of fiscal identifier
- DNI: Spanish personal identifier (DNI)
- PASSPORT: passport
- CAR_PERMIT: driving licence
- ID_DOCUMENT: other fiscal identifier documents
- ESP_PERMIT: Spanish residence permit
- UE_PERMIT: rest of European union residence permits
Type of fiscal identifier (only for
Peruvian properties, description in Spanish)
- DNI: Doc. Nacional de identidad
- PASSPORT: pasaporte
- RUC: Registro Único de contribuyentes
- DOC_NO_DOM: Doc.trib.no.dom.sin.ruc
- EXTR: Carnet de extranjería
- CED_DIPLOMATIC: Cédula diplomática
- DOC_ID_COUNTRY_ADDRESS: Documento identidad país residencia
- TIN: Tax identification number
- ID_NUMBER: IN - Identification number
- TAM: Tarjeta Andina de Migración
Charge type
- ROOM: room charge
- MEAL_PLAN: meal plan charge
- OTHER: other charge
- PACK: pack charge
Pack charge type
- DAILY: price of the pack is divided and charged equally
every day
- TOTAL: price of the pack is charged on the first day of the
pack
Rate service mode
- PER_ROOM: price of the service is calculated per room
- PER_PAX: price of the service is calculated per adult pax
- PER_MEN: price of the service is calculated per child
- PER_PAX_MEN: price of the service is calculated per adult
and child
- PER_MEN1: price of the service is calculated per child of
type MEN1
- PER_MEN2: price of the service is calculated per child of
type MEN2
- PER_MEN3: price of the service is calculated per child of
type MEN3
Imputation type
- ROOM: room service
- MEAL_PLAN: meal plan service
- OTHER: other service
Type of room type
- NORMAL_ROOM: if the room type is a common room type
- HALL: if the room type is a hall: fictional or master rooms,
venues, etc.
Advanced payment type
- ADVANCE_PAYMENT: We consider an advance payment to be a
payment made in advance which will generally be applied later toward
the payment of an invoice
- DEPOSIT: We consider deposits to be amounts left with us by
the client as collateral for the use of a specific service (towels,
TV remote, safe key, etc.). This amount is returned to the client
once the service has ended.
Employee type
- NORMAL: normal employee
- MAID: employee that cleans the rooms
- HOUSEKEEPER: employee that supervises the cleaning of the
rooms
- REPAIRMAN: employee that resolves and fixes failures and
does the maintenance of the hotel
Department type
- MAINTENANCE: dedicated to hotel maintenance. It is currently
the only type, but there will be more in the future
Special condition
conditioning
- NO_CONDITION: the special condition is active regardless of
the date.
- ENTRANCE_DATE: the special condition is active only for
reservations with check-in date between the dates indicated in the
special condition.
- STAY_DATE: the special condition is active only for
reservations with stay dates between the dates indicated in the
special condition.
Special condition
strategy
- LINEAL: the discounted amount is applied equally for every
day.
- FREE_HIGHEST_PRICE: the day with the highest price is
discounted
- FREE_LOWEST_PRICE: the day with the lowest price is
discounted
- FIRST_DAYS: the first days are discounted. For example,
having a reservation of 14 days, and a special condition of 14x12
then the first two days would be free
- LAST_DAYS: the last days are discounted. For example, having
a reservation of 14 days, and a special condition of 14x12 then the
last two days would be free
This API Key will be provided by the property. It is
subject to rate limiting in order to protect the system against an
excessive volume of requests which could slow down the service for
the rest of the users. These restrictions are also configured in the
SHMS system, so the property will inform you about your rate limits
(requests per day and requests per minute).
In case you hit the rate limit, an HTTP 429 error will be returned
with a response header Retry-After indicating how long to wait
before making the next request.