Smoobu Guests API
List and retrieve guest records - name, contact details, address, language, and the reservations associated with each guest - for use in CRM, communication, and guest-experience workflows.
List and retrieve guest records - name, contact details, address, language, and the reservations associated with each guest - for use in CRM, communication, and guest-experience workflows.
openapi: 3.0.3
info:
title: Smoobu API
description: >-
The Smoobu API is a RESTful JSON API for the Smoobu vacation rental channel
manager and property management system. It lets Professional subscribers and
integration partners read and write apartments (listings), reservations
(bookings), rates and availability, guests, and guest messages, and register
webhooks for reservation changes. The primary base URL is
https://login.smoobu.com/api; the public booking availability check is served
under https://login.smoobu.com/booking. Authentication uses an API key sent in
the "Api-Key" header (found in the Smoobu account under Settings > For
Developers / API Keys). Smoobu additionally offers HMAC-signed requests
(X-API-Key, X-Timestamp, X-Nonce, X-Signature headers) as the recommended
method and OAuth 2 for partners; the legacy plain Api-Key header is documented
as being sunset on 2026-09-25. Endpoints marked in descriptions as "modeled"
are inferred from the documentation and should be verified against the live
reference before production use.
version: '1.0'
contact:
name: Smoobu
url: https://www.smoobu.com
servers:
- url: https://login.smoobu.com
description: Smoobu production
security:
- apiKey: []
tags:
- name: User
description: The authenticated Smoobu account.
- name: Reservations
description: Bookings across all connected channels and their price elements.
- name: Apartments
description: Properties / listings in the Smoobu account.
- name: Rates and Availability
description: Daily rates, prices, availability, and booking availability checks.
- name: Guests
description: Guest contact records.
- name: Messaging
description: Reservation messages and unified inbox threads.
paths:
/api/me:
get:
operationId: getMe
tags:
- User
summary: Get the authenticated user
description: Returns the Smoobu account associated with the API key.
responses:
'200':
description: The authenticated account.
'401':
$ref: '#/components/responses/Unauthorized'
/api/apartments:
get:
operationId: listApartments
tags:
- Apartments
summary: List apartments
description: Lists all apartments (properties/listings) in the account.
responses:
'200':
description: A list of apartments.
'401':
$ref: '#/components/responses/Unauthorized'
/api/apartments/{apartmentId}:
parameters:
- $ref: '#/components/parameters/ApartmentId'
get:
operationId: getApartment
tags:
- Apartments
summary: Get an apartment
description: Retrieves a single apartment's details by id.
responses:
'200':
description: The apartment.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/api/reservations:
get:
operationId: listReservations
tags:
- Reservations
summary: List reservations
description: >-
Lists reservations, filterable by created, arrival, departure, and
modified date ranges, by apartment, and with pagination.
parameters:
- name: from
in: query
schema:
type: string
format: date
description: Filter reservations with arrival on or after this date.
- name: to
in: query
schema:
type: string
format: date
description: Filter reservations with departure on or before this date.
- name: arrivalFrom
in: query
schema:
type: string
format: date
- name: arrivalTo
in: query
schema:
type: string
format: date
- name: departureFrom
in: query
schema:
type: string
format: date
- name: departureTo
in: query
schema:
type: string
format: date
- name: created_from
in: query
schema:
type: string
format: date
- name: created_to
in: query
schema:
type: string
format: date
- name: modifiedFrom
in: query
schema:
type: string
format: date
- name: modifiedTo
in: query
schema:
type: string
format: date
- name: apartmentId
in: query
schema:
type: integer
description: Restrict to a single apartment.
- name: showCancellation
in: query
schema:
type: boolean
- name: excludeBlocked
in: query
schema:
type: boolean
- name: includeRelated
in: query
schema:
type: boolean
- name: includePriceElements
in: query
schema:
type: boolean
- name: page
in: query
schema:
type: integer
- name: pageSize
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of reservations.
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createReservation
tags:
- Reservations
summary: Create a reservation
description: >-
Creates a reservation (booking or blocked period) on an apartment.
Requires apartmentId, arrivalDate, departureDate, and channelId along
with guest details.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationInput'
responses:
'200':
description: The created reservation.
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/api/reservations/{reservationId}:
parameters:
- $ref: '#/components/parameters/ReservationId'
get:
operationId: getReservation
tags:
- Reservations
summary: Get a reservation
description: Retrieves a single reservation by id.
responses:
'200':
description: The reservation.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateReservation
tags:
- Reservations
summary: Update a reservation
description: Updates an existing reservation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationInput'
responses:
'200':
description: The updated reservation.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteReservation
tags:
- Reservations
summary: Delete a reservation
description: Deletes (cancels) a reservation by id.
responses:
'200':
description: The reservation was deleted.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/api/reservations/{reservationId}/price-elements:
parameters:
- $ref: '#/components/parameters/ReservationId'
get:
operationId: listPriceElements
tags:
- Reservations
summary: List price elements
description: Lists the price elements (line items) on a reservation.
responses:
'200':
description: A list of price elements.
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createPriceElement
tags:
- Reservations
summary: Create a price element
description: Adds a price element (line item) to a reservation. (Modeled from documentation.)
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created price element.
'401':
$ref: '#/components/responses/Unauthorized'
/api/rates:
get:
operationId: getRates
tags:
- Rates and Availability
summary: Get rates and availability
description: >-
Returns daily rate, price, availability, and minimum-length-of-stay data
per apartment over a date range.
parameters:
- name: start_date
in: query
required: true
schema:
type: string
format: date
- name: end_date
in: query
required: true
schema:
type: string
format: date
- name: apartments[]
in: query
schema:
type: array
items:
type: integer
description: One or more apartment ids to return rates for.
responses:
'200':
description: Daily rates and availability keyed by apartment and date.
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: updateRates
tags:
- Rates and Availability
summary: Update rates and availability
description: >-
Pushes rate, price, availability, and restriction updates to Smoobu,
which propagates them to connected channels.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RatesInput'
responses:
'200':
description: Rates were updated.
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/booking/checkApartmentAvailability:
post:
operationId: checkApartmentAvailability
tags:
- Rates and Availability
summary: Check apartment availability
description: >-
Checks which of the given apartments are available for a stay and returns
the price. Used by booking flows to quote a reservation before creating it.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
arrivalDate:
type: string
format: date
departureDate:
type: string
format: date
apartments:
type: array
items:
type: integer
customerId:
type: integer
guests:
type: integer
discountCode:
type: string
required:
- arrivalDate
- departureDate
- apartments
responses:
'200':
description: Availability and pricing for the requested apartments.
'401':
$ref: '#/components/responses/Unauthorized'
/api/guests:
get:
operationId: listGuests
tags:
- Guests
summary: List guests
description: Lists guest records, with pagination.
parameters:
- name: page
in: query
schema:
type: integer
- name: pageSize
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of guests.
'401':
$ref: '#/components/responses/Unauthorized'
/api/guests/{guestId}:
parameters:
- name: guestId
in: path
required: true
schema:
type: integer
get:
operationId: getGuest
tags:
- Guests
summary: Get a guest
description: Retrieves a single guest record by id.
responses:
'200':
description: The guest.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/api/reservations/{reservationId}/messages:
parameters:
- $ref: '#/components/parameters/ReservationId'
get:
operationId: listReservationMessages
tags:
- Messaging
summary: List reservation messages
description: Lists the message history for a reservation.
parameters:
- name: page
in: query
schema:
type: integer
- name: onlyRelatedToGuest
in: query
schema:
type: boolean
responses:
'200':
description: A list of messages.
'401':
$ref: '#/components/responses/Unauthorized'
/api/reservations/{reservationId}/messages/send-message-to-guest:
parameters:
- $ref: '#/components/parameters/ReservationId'
post:
operationId: sendMessageToGuest
tags:
- Messaging
summary: Send a message to the guest
description: Sends a message to the guest on a reservation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MessageInput'
responses:
'200':
description: The message was sent.
'401':
$ref: '#/components/responses/Unauthorized'
/api/reservations/{reservationId}/messages/send-message-to-host:
parameters:
- $ref: '#/components/parameters/ReservationId'
post:
operationId: sendMessageToHost
tags:
- Messaging
summary: Send a message to the host
description: Sends a message to the host/channel on a reservation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MessageInput'
responses:
'200':
description: The message was sent.
'401':
$ref: '#/components/responses/Unauthorized'
/api/threads:
get:
operationId: listThreads
tags:
- Messaging
summary: List message threads
description: Lists message threads across the unified inbox, with pagination.
parameters:
- name: page_number
in: query
schema:
type: integer
- name: page_size
in: query
schema:
type: integer
- name: apartments[]
in: query
schema:
type: array
items:
type: integer
responses:
'200':
description: A paginated list of threads.
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
apiKey:
type: apiKey
in: header
name: Api-Key
description: >-
Smoobu API key sent in the Api-Key header. HMAC-signed requests
(X-API-Key / X-Timestamp / X-Nonce / X-Signature) are the recommended
method; OAuth 2 is available for partners. The plain Api-Key header is
documented as being sunset on 2026-09-25.
parameters:
ApartmentId:
name: apartmentId
in: path
required: true
schema:
type: integer
description: The apartment id.
ReservationId:
name: reservationId
in: path
required: true
schema:
type: integer
description: The reservation id.
responses:
Unauthorized:
description: Authentication failed or the API key is missing or invalid.
NotFound:
description: The requested resource was not found.
ValidationError:
description: The request payload failed validation.
schemas:
ReservationInput:
type: object
properties:
arrivalDate:
type: string
format: date
departureDate:
type: string
format: date
apartmentId:
type: integer
channelId:
type: integer
firstName:
type: string
lastName:
type: string
email:
type: string
format: email
phone:
type: string
adults:
type: integer
children:
type: integer
price:
type: number
notice:
type: string
required:
- arrivalDate
- departureDate
- apartmentId
- channelId
RatesInput:
type: object
properties:
apartments:
type: array
items:
type: integer
operations:
type: array
items:
type: object
properties:
dates:
type: array
items:
type: string
format: date
daily_price:
type: number
min_length_of_stay:
type: integer
available:
type: integer
MessageInput:
type: object
properties:
messageBody:
type: string
required:
- messageBody