Smoobu Reservations API

Bookings across all connected channels and their price elements.

OpenAPI Specification

smoobu-reservations-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Smoobu Apartments Reservations 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: Reservations
  description: Bookings across all connected channels and their price elements.
paths:
  /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'
components:
  responses:
    ValidationError:
      description: The request payload failed validation.
    Unauthorized:
      description: Authentication failed or the API key is missing or invalid.
    NotFound:
      description: The requested resource was not found.
  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
  parameters:
    ReservationId:
      name: reservationId
      in: path
      required: true
      schema:
        type: integer
      description: The reservation id.
  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.