openapi: 3.0.1 info: title: apaleo Platform API description: >- Unified OpenAPI view of the apaleo API-first hotel property-management system. apaleo exposes its capabilities as a set of versioned REST APIs - Booking, Inventory, Rate Plan, Availability, Finance, and Settings - all served from https://api.apaleo.com and secured with OAuth 2.0 bearer tokens issued by the apaleo identity provider. Real-time events are delivered via the Webhook API at https://webhook.apaleo.com. termsOfService: https://apaleo.com/terms contact: name: apaleo Developer Support url: https://apaleo.dev version: v1 servers: - url: https://api.apaleo.com description: apaleo Core API (Booking, Inventory, Rate Plan, Availability, Finance, Settings) security: - oauth2: [] tags: - name: Booking description: Bookings, reservations, blocks, groups, and offers. - name: Inventory description: Properties, units, unit groups, and unit attributes. - name: Rate Plan description: Rate plans, rates, services, and policies. - name: Availability description: Real-time availability for units, unit groups, and services. - name: Finance description: Folios, payments, refunds, invoices, and accounts. - name: Settings description: Account- and property-level configuration. paths: /booking/v1/bookings: post: tags: [Booking] operationId: BookingCreateBooking summary: Create a booking with one or more reservations. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateBookingModel' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/BookingCreatedModel' '400': description: Bad Request '401': description: Unauthorized get: tags: [Booking] operationId: BookingGetBookings summary: Return a list of bookings. parameters: - name: pageNumber in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 responses: '200': description: OK /booking/v1/bookings/{id}: get: tags: [Booking] operationId: BookingGetBookingById summary: Return a single booking by id. parameters: - name: id in: path required: true schema: type: string responses: '200': description: OK '404': description: Not Found patch: tags: [Booking] operationId: BookingPatchBooking summary: Modify the booker and related details of a booking. parameters: - name: id in: path required: true schema: type: string responses: '204': description: No Content /booking/v1/reservations: get: tags: [Booking] operationId: BookingGetReservations summary: Return a list of reservations matching the filter criteria. parameters: - name: propertyIds in: query schema: type: array items: type: string - name: status in: query schema: type: array items: type: string enum: [Confirmed, InHouse, CheckedOut, Canceled, NoShow] - name: from in: query schema: type: string format: date-time - name: to in: query schema: type: string format: date-time responses: '200': description: OK /booking/v1/reservations/{id}: get: tags: [Booking] operationId: BookingGetReservationById summary: Return a single reservation by id. parameters: - name: id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReservationItemModel' '404': description: Not Found /booking/v1/reservation-actions/{id}/checkin: put: tags: [Booking] operationId: BookingCheckinReservation summary: Check in a reservation. parameters: - name: id in: path required: true schema: type: string responses: '204': description: No Content /booking/v1/reservation-actions/{id}/checkout: put: tags: [Booking] operationId: BookingCheckoutReservation summary: Check out a reservation. parameters: - name: id in: path required: true schema: type: string responses: '204': description: No Content /booking/v1/blocks: post: tags: [Booking] operationId: BookingCreateBlock summary: Create a block of rooms for a group. responses: '201': description: Created get: tags: [Booking] operationId: BookingGetBlocks summary: Return a list of blocks. responses: '200': description: OK /booking/v1/offers: get: tags: [Booking] operationId: BookingGetOffers summary: Return bookable offers for the given property, dates, and occupancy. parameters: - name: propertyId in: query required: true schema: type: string - name: arrival in: query required: true schema: type: string format: date - name: departure in: query required: true schema: type: string format: date - name: adults in: query schema: type: integer format: int32 responses: '200': description: OK /inventory/v1/properties: get: tags: [Inventory] operationId: InventoryGetProperties summary: Return a list of properties. responses: '200': description: OK post: tags: [Inventory] operationId: InventoryCreateProperty summary: Create a property. responses: '201': description: Created /inventory/v1/properties/{id}: get: tags: [Inventory] operationId: InventoryGetPropertyById summary: Return a single property by id. parameters: - name: id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PropertyModel' /inventory/v1/units: get: tags: [Inventory] operationId: InventoryGetUnits summary: Return a list of units. parameters: - name: propertyId in: query schema: type: string responses: '200': description: OK post: tags: [Inventory] operationId: InventoryCreateUnit summary: Create a unit. responses: '201': description: Created /inventory/v1/unit-groups: get: tags: [Inventory] operationId: InventoryGetUnitGroups summary: Return a list of unit groups. responses: '200': description: OK post: tags: [Inventory] operationId: InventoryCreateUnitGroup summary: Create a unit group. responses: '201': description: Created /rateplan/v1/rate-plans: get: tags: [Rate Plan] operationId: RateplanGetRatePlans summary: Return a list of rate plans. parameters: - name: propertyId in: query schema: type: string responses: '200': description: OK post: tags: [Rate Plan] operationId: RateplanCreateRatePlan summary: Create a rate plan. responses: '201': description: Created /rateplan/v1/rate-plans/{id}: get: tags: [Rate Plan] operationId: RateplanGetRatePlanById summary: Return a single rate plan by id. parameters: - name: id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RatePlanModel' /rateplan/v1/rate-plans/{id}/rates: get: tags: [Rate Plan] operationId: RateplanGetRates summary: Return the rates of a rate plan. parameters: - name: id in: path required: true schema: type: string - name: from in: query schema: type: string format: date - name: to in: query schema: type: string format: date responses: '200': description: OK patch: tags: [Rate Plan] operationId: RateplanUpdateRates summary: Update the rates of a rate plan. parameters: - name: id in: path required: true schema: type: string responses: '204': description: No Content /rateplan/v1/services: get: tags: [Rate Plan] operationId: RateplanGetServices summary: Return a list of services. responses: '200': description: OK post: tags: [Rate Plan] operationId: RateplanCreateService summary: Create a service. responses: '201': description: Created /availability/v1/units: get: tags: [Availability] operationId: AvailabilityGetUnits summary: Return unit availability for a property and date range. parameters: - name: propertyId in: query required: true schema: type: string - name: from in: query required: true schema: type: string format: date-time - name: to in: query required: true schema: type: string format: date-time responses: '200': description: OK /availability/v1/unit-groups: get: tags: [Availability] operationId: AvailabilityGetUnitGroups summary: Return unit-group availability for a property and date range. parameters: - name: propertyId in: query required: true schema: type: string responses: '200': description: OK /availability/v1/services: get: tags: [Availability] operationId: AvailabilityGetServices summary: Return service availability for a property and date range. responses: '200': description: OK /finance/v1/folios: get: tags: [Finance] operationId: FinanceGetFolios summary: Return a list of folios. parameters: - name: reservationId in: query schema: type: string responses: '200': description: OK post: tags: [Finance] operationId: FinanceCreateFolio summary: Create a folio. responses: '201': description: Created /finance/v1/folios/{id}: get: tags: [Finance] operationId: FinanceGetFolioById summary: Return a single folio by id. parameters: - name: id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/FolioModel' /finance/v1/folio-actions/{folioId}/charges: post: tags: [Finance] operationId: FinancePostCharge summary: Post a charge to a folio. parameters: - name: folioId in: path required: true schema: type: string responses: '200': description: OK /finance/v1/folios/{folioId}/payments: get: tags: [Finance] operationId: FinanceGetPayments summary: Return the payments of a folio. parameters: - name: folioId in: path required: true schema: type: string responses: '200': description: OK post: tags: [Finance] operationId: FinanceCreatePayment summary: Add a payment to a folio. parameters: - name: folioId in: path required: true schema: type: string responses: '200': description: OK /finance/v1/invoices: get: tags: [Finance] operationId: FinanceGetInvoices summary: Return a list of invoices. responses: '200': description: OK post: tags: [Finance] operationId: FinanceCreateInvoice summary: Create an invoice from a folio. responses: '201': description: Created /settings/v1/city-tax: get: tags: [Settings] operationId: SettingsGetCityTaxes summary: Return the configured city taxes. responses: '200': description: OK post: tags: [Settings] operationId: SettingsCreateCityTax summary: Create a city tax configuration. responses: '201': description: Created /settings/v1/market-segments: get: tags: [Settings] operationId: SettingsGetMarketSegments summary: Return a list of market segments. responses: '200': description: OK post: tags: [Settings] operationId: SettingsCreateMarketSegment summary: Create a market segment. responses: '201': description: Created /settings/v1/languages: get: tags: [Settings] operationId: SettingsGetLanguages summary: Return the enabled languages of the account. responses: '200': description: OK components: securitySchemes: oauth2: type: oauth2 description: >- apaleo uses OAuth 2.0. Obtain a bearer access token from the apaleo identity provider and send it in the Authorization header as 'Bearer {token}'. The client-credentials and authorization-code grants are supported. flows: clientCredentials: tokenUrl: https://identity.apaleo.com/connect/token scopes: 'reservations.read': Read reservations and bookings 'reservations.manage': Create and manage reservations and bookings 'setup.read': Read inventory and configuration 'setup.manage': Manage inventory and configuration 'rates.read': Read rate plans and rates 'rates.manage': Manage rate plans and rates 'availability.read': Read availability 'availability.manage': Manage availability 'folios.read': Read folios and finance data 'folios.manage': Manage folios, payments, and invoices authorizationCode: authorizationUrl: https://identity.apaleo.com/connect/authorize tokenUrl: https://identity.apaleo.com/connect/token scopes: 'reservations.read': Read reservations and bookings 'reservations.manage': Create and manage reservations and bookings 'setup.read': Read inventory and configuration 'setup.manage': Manage inventory and configuration 'rates.read': Read rate plans and rates 'rates.manage': Manage rate plans and rates 'availability.read': Read availability 'availability.manage': Manage availability 'folios.read': Read folios and finance data 'folios.manage': Manage folios, payments, and invoices schemas: CreateBookingModel: type: object required: - reservations properties: booker: $ref: '#/components/schemas/BookerModel' paymentAccount: type: object additionalProperties: true reservations: type: array items: $ref: '#/components/schemas/CreateReservationModel' BookerModel: type: object properties: title: type: string firstName: type: string lastName: type: string email: type: string phone: type: string address: $ref: '#/components/schemas/AddressModel' CreateReservationModel: type: object required: - arrival - departure - adults - ratePlanId properties: propertyId: type: string arrival: type: string format: date-time departure: type: string format: date-time adults: type: integer format: int32 childrenAges: type: array items: type: integer format: int32 ratePlanId: type: string guestComment: type: string BookingCreatedModel: type: object properties: id: type: string bookingId: type: string reservationIds: type: array items: type: object properties: id: type: string ReservationItemModel: type: object properties: id: type: string bookingId: type: string status: type: string enum: [Confirmed, InHouse, CheckedOut, Canceled, NoShow] property: $ref: '#/components/schemas/EmbeddedPropertyModel' ratePlanId: type: string arrival: type: string format: date-time departure: type: string format: date-time adults: type: integer format: int32 totalGrossAmount: $ref: '#/components/schemas/MonetaryValueModel' EmbeddedPropertyModel: type: object properties: id: type: string name: type: string PropertyModel: type: object properties: id: type: string code: type: string name: type: string description: type: string timeZone: type: string currencyCode: type: string status: type: string enum: [Test, Live, Archived] location: $ref: '#/components/schemas/AddressModel' RatePlanModel: type: object properties: id: type: string code: type: string name: type: string description: type: string isSubjectToCityTax: type: boolean propertyId: type: string unitGroupId: type: string cancellationPolicyId: type: string noShowPolicyId: type: string FolioModel: type: object properties: id: type: string reservationId: type: string propertyId: type: string type: type: string enum: [Guest, External, House] status: type: string enum: [Open, Closed] balance: $ref: '#/components/schemas/MonetaryValueModel' charges: type: array items: type: object additionalProperties: true payments: type: array items: type: object additionalProperties: true AddressModel: type: object properties: addressLine1: type: string addressLine2: type: string postalCode: type: string city: type: string regionCode: type: string countryCode: type: string MonetaryValueModel: type: object properties: amount: type: number format: double currency: type: string