Financials - 2026-04-27

No breaking changes have been introduced to taxes; rather, the documentation now aligns with the actual product behavior.

Added

  • Add pre-deduct commission support so you can configure automatic deduction behavior in commission settings (PUT /channel-commissions-v2/account, PUT /channel-commissions-v2/listings, PUT /channel-commission/listings, and PUT /channel-commission/account)
  • Add optional isUpsellFee to requests for POST /invoice-items/reservation/:reservationId
  • Add optional realizationDates.items.from and realizationDates.items.to to requests for POST /invoice-items/reservation/:reservationId
  • Add optional stayIndex to requests for POST /invoice-items/reservation/:reservationId
  • Add DIRECT_SERVICE, GUESTY_BASIC_TRAVEL_COVERAGE, GUESTY_EXTENDED_TRAVEL_COVERAGE, GUESTY_SHIELD, PROPERTY_INSURANCE, and TOTAL_PAYOUT_BASED enum values to secondIdentifier in requests for POST /invoice-items/reservation/:reservationId
  • Support parentInvoiceItemId, realizationDates[].from, realizationDates[].to, and stayIndex in requests to POST /price-adjustments/manual-total-amount to allow richer mapping of manual total amount adjustments
  • Support additional secondIdentifier values DIRECT_SERVICE, GUESTY_BASIC_TRAVEL_COVERAGE, GUESTY_EXTENDED_TRAVEL_COVERAGE, GUESTY_SHIELD, PROPERTY_INSURANCE, and TOTAL_PAYOUT_BASED in requests to POST /price-adjustments/manual-total-amount
  • Support additional normalType values MAR and MARF in requests to POST /price-adjustments/manual-total-amount
  • Return optional parentInvoiceItemId, realizationDatesRange, and stayIndex fields in 200 responses from GET /price-adjustments/total-amount/:id for better visibility into item-level adjustment context
  • Add optional request property channelOverrides to POST /taxes and PATCH /taxes/:id
  • Add optional request property isInclusive to POST /taxes and PATCH /taxes/:id
  • Add optional query parameter applyRequiredChangesToTaxesWithSameType to PATCH /taxes/:id
  • Add optional response property channelOverrides to POST /taxes, PATCH /taxes/:id, GET /taxes/account, GET /taxes/unit-type/:id, and GET /taxes/unit-type/:id/actual
  • Add optional response property isInclusive to POST /taxes, PATCH /taxes/:id, GET /taxes/account, GET /taxes/unit-type/:id, and GET /taxes/unit-type/:id/actual
  • Expand supported request enum values for appliedOnFees/items in POST /taxes and PATCH /taxes/:id to include many additional fee types (for example: ACTIVITIES, ADDITIONAL_BED, BOOKING_FEE, CLEANING, PARKING, POOL_HEATING, RESORT, WIFI, WOOD, and others)

Changed

  • Restrict appliedOnFees/items to enum values in POST /taxes and PATCH /taxes/:id
  • Restrict conditionalOverrides.rules[].dateRange.from and conditionalOverrides.rules[].dateRange.to to MMDD_DATE_FORMAT_REGEX in POST /taxes and PATCH /taxes/:id
  • Add vrboLite as a possible response enum value for appliedByDefaultOnChannels/items in POST /taxes, PATCH /taxes/:id, GET /taxes/account, GET /taxes/unit-type/:id, and GET /taxes/unit-type/:id/actual
  • Expand the supported commission.of values by adding DIRECT_SERVICE, GUESTY_BASIC_TRAVEL_COVERAGE, GUESTY_EXTENDED_TRAVEL_COVERAGE, GUESTY_SHIELD, PROPERTY_INSURANCE, and TOTAL_PAYOUT_BASED in update payloads for PUT /channel-commission/account, PUT /channel-commission/listings, PUT /channel-commissions-v2/account, and PUT /channel-commissions-v2/listings
  • Relax validation by making tax optional for payloads used by PUT /channel-commissions-v2/account and PUT /channel-commissions-v2/listings
  • Allow commission tax to be omitted when it is not relevant in channel commission updates (PUT /channel-commissions-v2/account, PUT /channel-commissions-v2/listings)
  • Improve consistency of channel commission update inputs to make account and listing updates more predictable (PUT /channel-commissions-v2/account, PUT /channel-commissions-v2/listings).
  • Make realizationDates.items.date optional in requests for POST /invoice-items/reservation/:reservationId
  • Allow priceAdjustments[].realizationDates[].date to be omitted in requests to POST /price-adjustments/manual-total-amount when using range-based realization dates (from/to)

Removed

  • Remove channel enum values agoda, airbnb, bookingCom, bookingPal, expedia, homeAway, homeaway2, rentalsUnited, siteMinder, and tripAdvisor from request property appliedByDefaultOnChannels/items in POST /taxes and PATCH /taxes/:id

Owner Payout Methods 2026-04-23

New Payouts API for managing owner payout details

Added

  • Add GET /payouts/owners/{ownerId} to retrieve owner payout details
  • Add POST /payouts/owners/{ownerId} for creating a payout method for a given owner
  • Add PUT /payouts/owners/{ownerId} for updating an existing payout method for a given owner
  • Add POST /payouts/owners/bulk for adding payout methods for multiple owners in a single request

Roles are deprecated from the /users API and separated into their own /roles and /user-scope API resources to align Guesty's Open API with the latest roles and permissions version supported by the platform.


Added

  • Add GET /roles to retrieve a list of supported user roles and permissions
  • Add GET /roles/:id to retrieve the roles and permissions assigned to a user
  • Add POST /roles/assign to assign roles and permissions to a user
  • Add POST /user-scope/assign to assign the scope of listing permissions to a user
  • Add GET /user-scope/:id to retrieve the scope of listing permissions assigned to a user

Changed

  • Add optional country request property to POST /users
  • Add optional registrationOrigin request property to POST /users

Removed

  • Breaking: deprecated the roles property from the /user endpoints. Update your integrations to utilise the /roles and /user-scope APIs to manage user roles and permissions instead

New feature for adding and managing external links in your property's "Channels" section, and a new owner-guest creation endpoint to support owner-guest reservations


Added

  • Add POST /properties-api/listing-settings/external-links/{propertyId} for adding an external link to the property's page
  • Add PUT /properties-api/listing-settings/external-links/{propertyId}/{linkId} for updating the URL and name of an existing external link
  • Add PUT /properties-api/listing-settings/external-links/{propertyId}/order for reordering the list of external links
  • Add GET /properties-api/listing-settings/external-links/{propertyId} for retrieving the property's list of external links
  • Add DEL properties-api/listing-settings/external-links/{propertyId}/{linkId} for deleting an external link
  • Add POST /owners/:ownerId/guest endpoint to support owner reservations. You need to generate this ID only for a first-time owner reservation.

Changed

  • Add EXPENSES_CSV_IMPORT as a filterable trigger to GET /accounting-api/journal-entries and GET /accounting-api/journal-entries/all
  • Document GET /expenses-api/expenses pagination limit as “up to 100 items per page” in the endpoint description.
  • Document POST /expenses-api/expenses validation/usage details in the endpoint description (including lock period behavior and clarifications around required inputs and mutual exclusivity of owners vs listingIds).
  • Document GET /expenses-api/expenses/:id} returned details to explicitly mention attachments in the endpoint description.
  • Document POST /expenses-api/expenses/:id/attachments constraints and required fields in the endpoint description (including “up to 10 attachments per request” and urlThumbnail).
  • Document DELETE /expenses-api/expenses/:id/attachments/:attachmentId behavior in the endpoint description to emphasize it returns the updated expense after removal.
  • Document updated cancellation rules for POST /expenses-api/expenses/:id/cancel in the endpoint description (expanded eligible statuses and clarified rejection conditions).
  • Simplify/standardize multiple 404 response descriptions (e.g., “Expense not found”, “Expense or attachment not found”).
  • Add businessInformation.businessName to Owner create/update payloads and expose it in Owner responses (POST /owners, PUT /owners/:ownerId, GET /owners/:ownerId).
  • Add ownersPortalSettings.rentalIncome to Owner create/update payloads and expose it in Owner responses (POST /owners, PUT /owners/:ownerId, GET /owners/:ownerId).
  • Add bulk support for businessInformation.businessName and ownersPortalSettings.rentalIncome in request/response items (POST /owners/bulk).

Resources


Added


Removed

  • Remove CASH from the supported recorded payment enums list, as it is part of the payment automations workflow and can lead to an unintended credit card charge, once a valid credit card is added to the reservation. Use RECORDED_CASH instead.

Introducing a new custom review functionality for uploading external reviews to Guesty. Learn more

Changed

  • General backend optimizations

Added

  • Add POST /reviews/custom-channel-reviews endpoint.
  • Add GET /reviews/custom-channels endpoint.
  • Add POST /reviews/custom-channels endpoint.

Removed

  • Remove non-functional and unsupported PUT /reviews endpoint.

Added

  • Add reservation.created.v2 and reservation.updated.v2 enum values to the events request and response properties for the GET, POST, and PUT methods on the /webhooks and /webhooks/{id} endpoints.

Changed

  • Deprecate the PUT /reservations/{id}/custom-fields, GET /reservations/{id}/custom-fields/{field_id}, and DELETE /reservations/{reservation_id}/custom-fields/{field_id} endpoints. See Custom Reservation Fields Migration.

Introducing Combo Properties (Unified Unit) to replace Smart Calendar Rules; currently in limited pilot testing (see Pilot: Managing combo properties and property variants and Understanding Guesty property types


Added

  • Add POST /properties-api/groups/group to create COMBO or DUPLICATES groups
  • Add GET /properties-api/groups/group to list and filter property groups with pagination
  • Add GET /properties-api/groups/group/{id} to retrieve details for a specific group
  • Add PATCH /properties-api/groups/group/{id} to modify group membership or primary listing
  • Add DELETE /properties-api/groups/group/{id} to remove groups and associated rules
  • Add DELETE /expenses-api/expenses/{id}/attachments/{attachmentId} to permit you to correct any mistakes with expense attachments

Changed

  • Update description of owners property in POST /expenses-api/expenses request body to clarify requirements: that you may only send owners entries if the corresponding OWNER appears in the shares array with a payment share.

New Features

Attachments Support

  • New endpoint: POST /expenses-api/expenses/{id}/attachments - Upload attachments to existing expenses
  • Added optional attachments field to:
    • Request: POST /expenses-api/expenses - Include attachments when creating expenses
    • Response: GET /expenses-api/expenses and GET /expenses-api/expenses/{id} - View attachments associated with expenses

Tax Payee Types

  • Added optional taxPayeeTypes field to:
    • Request: POST /expenses-api/expenses - Specify tax payee types when creating expenses
    • Response: GET /expenses-api/expenses and GET /expenses-api/expenses/{id} - View tax payee types associated with expenses

Improvements

More Flexible Expense Creation

  • The type field in POST /expenses-api/expenses is now optional, providing greater flexibility when creating expenses
  • VATPE (VAT on expense), MARF(markup on fees), and JE (manual journal entry) have been added to the chargeCode enum parameter of the /accounting-api/ endpoints.

API Documentation Updates

  • Renamed API tag from "Accounting (only available for accounting add-on users)" to "Expenses (only available for accounting add-on users)" for better clarity across all expenses endpoints

Validation Changes ⚠️

New Field Length Restrictions

Added maximum length validations to POST /expenses-api/expenses request properties:

  • currency: 3 characters maximum
  • name: 255 characters maximum
  • description: 255 characters maximum
  • taxName: 255 characters maximum
  • taxDescription: 255 characters maximum

Important: Please ensure your client applications respect these field length restrictions before upgrading. Requests exceeding these limits will be rejected.