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:
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.
In addition to read operations, the API also supports write
operations for managing reservations:
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
LINEAR: 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
Failure location
type
DEPARTMENT: if the failure is located in a specific
department
ROOM: if the failure is located in a specific room
MACHINE: if the failure is located in a specific machine
(TVs, kitchen equipments, etc.)
OTHER: for other type of locations
Measurement layout reading type
INITIAL: for initial readings
PERIODIC: if the reading is periodically registered
ROUTINE: if the reading is routinely performed
COUNTER_ANALYSIS: for counter analysis readings of an
external laboratory
Measurement layout periodicity
or frequency
DAILY: for daily readings
WEEKLY: for weekly readings
FORTNIGHTLY: every two weeks readings
MONTHLY: monthly readings
QUARTERLY: for readings every three months
ANNUALLY: for readings once in a year
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.