2026-11-05

Reservations (v3) now supports locking property and guest assignments, making it easier to manage who stays where and when. You can also take advantage of a new reservations report search to quickly find the information you need. Please note that we'll retire the older reservations endpoints on March 1, 2027. Legacy payment endpoints don't have a sunset date at this time

Changed

  • Deprecate 18 legacy /reservations operations by moving them to the [Deprecated] Reservations tag, prefixing their summaries with [DEPRECATED], and stating removal dates and replacements in their descriptions. See the Reservation migration guide
  • Deprecate GET /reservations in favor of GET /reservations-v3/search, with removal on March 1, 2027. Some filters and fields differ
  • Deprecate POST /reservations in favor of POST /reservations-v3, with removal on March 1, 2027
  • Deprecate GET /reservations/{id} in favor of GET /reservations-v3, with removal on March 1, 2027. Some filters and fields differ
  • Deprecate PUT /reservations/{id} in favor of the dedicated v3 alteration endpoints, with removal on March 1, 2027. See the Reservation Alterations guide
  • Deprecate POST /reservations/{id}/approve in favor of POST /reservations-v3/{reservationId}/approve, with removal on March 1, 2027
  • Deprecate POST /reservations/{id}/decline in favor of POST /reservations-v3/{reservationId}/decline, with removal on March 1, 2027
  • Deprecate POST /reservations/{id}/request-cancellation-sync in favor of POST /reservations-v3/{reservationId}/request-cancellation, with removal on March 1, 2027
  • Deprecate POST /reservations.csv with removal on March 1, 2027. Use GET /reservations-reports/{viewId}/csv, or build the export from GET /reservations-v3/search
  • Deprecate POST /reservations.email with removal on March 1, 2027. It has no direct replacement: set up a reservations report and share it on a recurring schedule
  • Deprecate POST /reservations/{id}/payments in favor of POST /payments. It remains available, and no removal date is set
  • Deprecate PUT /reservations/{id}/payments/{paymentId} in favor of PATCH /payments/{paymentId} and POST /payments/{paymentId}/cancel. It remains available, and no removal date is set
  • Deprecate POST /reservations/{id}/payments/{paymentId}/refund in favor of POST /payments/{paymentId}/refund. It remains available, and no removal date is set
  • Deprecate PATCH /reservations/{id}/payments/{paymentId}/cancel in favor of POST /payments/{paymentId}/cancel. It remains available, and no removal date is set
  • Deprecate the money response field on GET /reservations, POST /reservations, GET /reservations/{id}, PUT /reservations/{id}, and POST /reservations/{id}/invoiceItems, because it mixes pricing and payment data. Use GET /guest-folio/overview, GET /guest-folio/invoice-items, and GET /guest-folio/settings-snapshot for pricing, and GET /payments for payments. The field's shape is unchanged.
  • Deprecate mergeAccommodationFarePriceComponents in favor of applyGuestFacingMerges on GET /reservations-v3, PUT /reservations-v3/{reservationId}/source, PUT /reservations-v3/{reservationId}/dates, PUT /reservations-v3/{reservationId}/relocate, PUT /reservations-v3/{reservationId}/guests, GET /quotes/{quoteId}, POST /quotes, POST /quotes/multiple, and POST /quotes/{quoteId}/coupons
  • Rename the Reservations Open Api [Beta] tag to Reservations for the reservations-v3 operations and GET /reservation-logs/{reservationId}
  • Rename the Group Reservations Open Api [Beta] tag to Group Reservations for GET /reservations-v3/group/{groupId} and POST /reservations-v3/group
  • Rename the Quotes Open Api [Beta] tag to Quotes for GET /quotes/{quoteId}, POST /quotes, POST /quotes/multiple, and POST /quotes/{quoteId}/coupons
  • Rename the Reservations Reports Open Api [Beta] tag to Reservations Reports for GET /reservations-reports/{viewId}

Added

  • Add POST /reservations-v3/{reservationId}/property-lock endpoint to lock a reservation property against listing and unit changes. The operation is idempotent: locking an already locked reservation refreshes the lock metadata. Returns 200, 400, 403 when property lock is not enabled for the account, 404, or 500
  • Add DELETE /reservations-v3/{reservationId}/property-lock endpoint to unlock a reservation property so listing and unit changes are allowed again. The operation is idempotent and returns the same status codes as the lock endpoint
  • Add GET /reservations-v3/{reservationId}/guests endpoint to list the guests of a reservation, including the booker. Each item returns _id and type only, not the full guest profile
  • Add PUT /reservations-v3/{reservationId}/guests/assign endpoint to assign one guest (_id and a type of adult, children, infant, or pet) to a reservation. Returns 422 when the guest cannot be assigned, for example when already assigned
  • Add PUT /reservations-v3/{reservationId}/guests/unassign endpoint to unassign one guest (_id) from a reservation. Returns 422 when the guest cannot be unassigned, for example, the booker or a guest who is not assigned
  • Add GET /reservations-reports/reservations/search endpoint to search reservations with bracket-notation filters (filter[<field>] and filter[<field>][<operator>]), skip and limit pagination, and sort. The response returns the full report enrichments, and all date and time fields use the listing timezone
  • Add GET /reservations-reports/{viewId}/csv endpoint to download the reservations report as a comma-separated values (CSV) file. It takes limit, skip, and a required timezone
  • Add Reservation migration guide to map each legacy /reservations workflow (retrieval, exports, creation, alterations, financials, payments, guest details, and webhooks) to its replacement endpoints. It states that the legacy endpoints and the reservation.new and reservation.updated webhook events retire on March 1, 2027, and that legacy guest payment resources have no removal date yet
  • Add optional lockProperty request field to POST /reservations-v3 and POST /reservations-v3/quote to create a reservation that is already locked
  • Add propertyLock and guests (id, type, assignedAt) to responses of POST /reservations-v3, POST /reservations-v3/quote, POST /reservations-v3/owner/confirmed, and GET /reservations-v3, and add propertyLock to GET /reservations-v3/search responses
  • Add channelMetadata.merchantOfRecord (PMS or CHANNEL) and a channelMetadata.guestContact object to responses of GET /reservations-v3 and GET /reservations-v3/search
  • Add optional applyGuestFacingMerges parameter (default false) to GET /reservations-v3, PUT /reservations-v3/{reservationId}/source, PUT /reservations-v3/{reservationId}/dates, PUT /reservations-v3/{reservationId}/relocate, PUT /reservations-v3/{reservationId}/guests, GET /quotes/{quoteId}, POST /quotes, POST /quotes/multiple, and POST /quotes/{quoteId}/coupons to return a simplified guest-facing view of financial breakdowns
  • Add a 422 response to POST /reservations-v3/mid-stay for dates or units that are not available for the relocation
  • Add payments.refund.failed, payments.authenticationFailed, payments.invalidBcomCard, payments.invalidSecondBcomCard, and reservation.payments.updated to the webhook events list (31 to 36 values) on GET /webhooks, POST /webhooks, GET /webhooks/{id}, and PUT /webhooks/{id}
  • Add the same five events to the payment webhooks table in the payment-webhooks and webhooks guides, and link the "Financials webhooks" row in the webhooks guide to the Financial webhooks guide
  • Document that bookingDate must use Coordinated Universal Time (UTC) on POST /reservations-v3, POST /reservations-v3/owner/confirmed, and PUT /reservations-v3/{reservationId}/booking-date, with an example on the last
  • Document the status values that PUT /reservations-v3/{reservationId}/status accepts. Non-channel reservations accept inquiry, awaiting_payment, reserved, confirmed, canceled, closed, declined, and expired. Channel reservations can only be canceled, and the system sets alteration, checked_in, checked_out, and completed

Fixed

  • Fix request status values on POST /reservations-v3, POST /reservations-v3/quote, and POST /reservations-v3/group to list only inquiry, awaiting_payment, reserved, and confirmed (previously (mistakenly) eight values, including canceled, closed, declined, and expired)
  • Fix response status to list 12 values on POST /reservations-v3, POST /reservations-v3/quote, POST /reservations-v3/owner/confirmed, POST /reservations-v3/mid-stay, PUT /reservations-v3/{reservationId}/status, GET /reservations-v3, GET /reservations-v3/search, and alterationPayload.status on the four quotes operations: the previous eight plus alteration, completed, checked_in, and checked_out (previously incomplete or missing)
  • Fix identifier and stay field types in responses of GET /reservations-v3 and POST /reservations-v3/mid-stay: _id, groupId, integrationId, quoteId, accountId, stay[]._id, stay[].unitTypeId, and stay[].unitId are now string (previously object), and sendQuoteId and ratePlans[].ratePlanId now have type string (previously none)
  • Fix stay[]._id, stay[].unitTypeId, and stay[].unitId to type string (previously object) in responses of GET /quotes/{quoteId}, POST /quotes, POST /quotes/multiple, and POST /quotes/{quoteId}/coupons
  • Fix stay[].eta and stay[].etd so responses of GET /reservations-v3, POST /reservations-v3/mid-stay, and the four quotes operations no longer list them as required
  • Fix the 400 body of POST /reservations-v3/mid-stay to { "error": { "message", "code", "timestamp", "moreDetails" } } (previously { "statusCode", "message", "error": "Bad Request" }), and stop naming availability errors in the 400 description
  • Fix error.data to accept a string or an object (previously string only) in the documented error responses of POST /reservations-v3/{reservationId}/approve, POST /reservations-v3/{reservationId}/decline, POST /reservations-v3/{reservationId}/pre-approve, and POST /reservations-v3/{reservationId}/request-cancellation
  • Fix customFields[].value on PUT /reservations-v3/{reservationId}/custom-fields to remove a duplicate string option. The accepted types are unchanged: string, number, and boolean