---
title: "Update listing basic fees"
method: PUT
path: "/basic-fees/listings/{listingId}"
tags: ["[Beta] Basic Fees"]
---

# Update listing basic fees

`PUT /basic-fees/listings/{listingId}`

## Request

- Base URL: `https://open-api.guesty.com/v1`
- URL: `https://open-api.guesty.com/v1/basic-fees/listings/{listingId}`
- Auth: API key in header `authorization`

Upsert replaces stored listing-default `cleaningFee` only when `cleaningFee` is sent; omitting it keeps the stored default. This PUT cannot clear only the listing default while keeping overrides — use DELETE on the listing to remove all basic fees for that listing. `channelConfigurations` is required: send `[]` to store no overrides (clears existing). Omitting `channelConfigurations` is 400. An override entry may omit `cleaningFee` (channel only); GET by channel then falls back to the listing default. Do not send `_id` or `lastUpdated` on write; they are server-owned. When `shouldUpdateSubUnits` is true, child listings are overwritten with the same payload (not a merge of each child's previous settings).

## Path parameters

- `listingId` string, required

## Query parameters

- `shouldUpdateSubUnits` boolean

## Request body

- object
  - `cleaningFee` object: Listing-default cleaning fee (currently the only basic fee supported). Send to set or replace the default. Omit to leave the stored default unchanged. This PUT cannot clear only the listing default while keeping channel overrides — use DELETE `listings/{listingId}` to remove all basic fees for the listing (default and overrides).
    - `value` object, required: Cleaning fee value details
      - `_id` string: Server-assigned ID of this cleaning-fee value. Present on read responses; omit on write.
      - `multiplier` 'PER_STAY' | 'PER_GUEST' | 'PER_NIGHT' | 'PER_GUEST_PER_NIGHT', required: Always required on this API. FIXED: PER_STAY, PER_NIGHT, PER_GUEST, or PER_GUEST_PER_NIGHT. PERCENTAGE: only PER_STAY.
      - `formula` number, required: FIXED: amount in the listing currency. PERCENTAGE: percent of the accommodation fare.
      - `valueType` 'PERCENTAGE' | 'FIXED', required: Whether formula is a fixed amount (FIXED) or a percent of accommodation fare (PERCENTAGE).
    - `lastUpdated` string, date-time: Last updated timestamp
  - `channelConfigurations` object[], required: Per-channel cleaning fee overrides. Required on PUT. Send [] for no overrides — that replaces any stored overrides. Omitting the field is 400. An entry may omit `cleaningFee` (channel only); effective fee then falls back to the listing default.
    - `cleaningFee` object: Channel-specific cleaning fee. Omit to store an override entry with no fee — GET `listings/{listingId}/channels/{channel}` then falls back to the listing default (same effective fee as having no override for that channel).
      - `value` object, required: Cleaning fee value details
        - `_id` string: Server-assigned ID of this cleaning-fee value. Present on read responses; omit on write.
        - `multiplier` 'PER_STAY' | 'PER_GUEST' | 'PER_NIGHT' | 'PER_GUEST_PER_NIGHT', required: Always required on this API. FIXED: PER_STAY, PER_NIGHT, PER_GUEST, or PER_GUEST_PER_NIGHT. PERCENTAGE: only PER_STAY.
        - `formula` number, required: FIXED: amount in the listing currency. PERCENTAGE: percent of the accommodation fare.
        - `valueType` 'PERCENTAGE' | 'FIXED', required: Whether formula is a fixed amount (FIXED) or a percent of accommodation fare (PERCENTAGE).
      - `lastUpdated` string, date-time: Last updated timestamp
    - `channel` 'airbnb2' | 'bookingCom' | 'homeaway2' | 'aabode' | 'alohacamp' | 'amaSelections' | 'allogio' | 'altoVita' | 'alluraDirect' | 'angells' | 'anystaysCom' | 'awaze' | 'beachguide' | 'belVilla' | 'bluegroundNestpick' | 'bnbFinder' | 'boarding' | 'bookingPalGcm' | 'bookripe' | 'boutiquehomeCom' | 'byndhomesCom' | 'bynd' | 'capitalOne' | 'cockpit' | 'cocoonr' | 'check24' | 'crewDogs' | 'cuddlyNest' | 'desVu' | 'easyReserve' | 'emeraldCoast' | 'etravel' | 'feratel' | 'findRentals' | 'floridaPanhandleCom' | 'floridaRentals' | 'flowOne' | 'getawayGoGo' | 'glampingHub' | 'golfhom' | 'gonesto' | 'googleVacationRentals' | 'got2Go' | 'groupRentals' | 'guestSmiles' | 'hawaiianIslandsCom' | 'helloLanding' | 'hiSite' | 'holidaySwap' | 'holidu' | 'homesVillasByMarriott' | 'homeToGo' | 'hopper' | 'hostelworld' | 'hotelbeds' | 'hotelsCombined' | 'houfy' | 'housingAnywhere' | 'houseStay' | 'housingPanda' | 'HVN' | 'hyperguest' | 'inntopia' | 'invenioHomes' | 'lakeCom' | 'livily' | 'livjaza' | 'luxico' | 'luxuryEscapes' | 'makeMyTrip' | 'mirai' | 'mrMrsSmith' | 'muchosol' | 'mysaGlobal' | 'nesto' | 'netAffinity' | 'oliversTravels' | 'onefinestay' | 'plumGuide' | 'priceTravelCom' | 'rakutenStayInc' | 'reconline' | 'rentalEscapes' | 'rentalz' | 'renters' | 'reserva' | 'revato' | 'roibos' | 'sabreSynxis' | 'situCom' | 'skiCom' | 'skyesCottages' | 'smilingHouse' | 'smokyMountainCom' | 'soujourn' | 'spacestCom' | 'square' | 'stay' | 'stayHvn' | 'stayLonger' | 'stayOne' | 'staySense' | 'stugaCa' | 'szallas' | 'theDyrt' | 'theMaimonGroup' | 'theQuintessCollection' | 'topVillas' | 'torontoBoutiqueApartments' | 'traveloka' | 'travelStaytion' | 'travelWithAspectCom' | 'tripco' | 'tripCom' | 'tripCom2' | 'traum' | 'tropicalEscape' | 'trustedStays' | 'tuiVillas' | 'vacasa' | 'vacationFinder' | 'vacationRenter' | 'vacayHome' | 'vacayMyWay' | 'viajesElCorteIngles' | 'vidle' | 'villaFinder' | 'villaway' | 'villaTracker' | 'vivreStays' | 'vrboLite' | 'wander' | 'weski' | 'weChalet' | 'whimstay' | 'zaaer', required: OTA (for example airbnb2, bookingCom, homeaway2) or Guesty Distribution Hub (GDH) channel this override applies to. Values match the channel path parameter on GET listings/{listingId}/channels/{channel}.

## Response `200`

The basic fees have been successfully created or updated.

- object
  - `listingId` string, required: Listing id
  - `accountId` string, required: Account id
  - `cleaningFee` object: Cleaning fee settings (currently the only basic fee supported)
    - `value` object, required: Cleaning fee value details
      - `_id` string: Server-assigned ID of this cleaning-fee value. Present on read responses; omit on write.
      - `multiplier` 'PER_STAY' | 'PER_GUEST' | 'PER_NIGHT' | 'PER_GUEST_PER_NIGHT', required: Always required on this API. FIXED: PER_STAY, PER_NIGHT, PER_GUEST, or PER_GUEST_PER_NIGHT. PERCENTAGE: only PER_STAY.
      - `formula` number, required: FIXED: amount in the listing currency. PERCENTAGE: percent of the accommodation fare.
      - `valueType` 'PERCENTAGE' | 'FIXED', required: Whether formula is a fixed amount (FIXED) or a percent of accommodation fare (PERCENTAGE).
    - `lastUpdated` string, date-time: Last updated timestamp
  - `channelConfigurations` object[]: Optional per-channel cleaning fee overrides
    - `cleaningFee` object: Channel-specific cleaning fee. Omit to store an override entry with no fee — GET `listings/{listingId}/channels/{channel}` then falls back to the listing default (same effective fee as having no override for that channel).
      - `value` object, required: Cleaning fee value details
        - `_id` string: Server-assigned ID of this cleaning-fee value. Present on read responses; omit on write.
        - `multiplier` 'PER_STAY' | 'PER_GUEST' | 'PER_NIGHT' | 'PER_GUEST_PER_NIGHT', required: Always required on this API. FIXED: PER_STAY, PER_NIGHT, PER_GUEST, or PER_GUEST_PER_NIGHT. PERCENTAGE: only PER_STAY.
        - `formula` number, required: FIXED: amount in the listing currency. PERCENTAGE: percent of the accommodation fare.
        - `valueType` 'PERCENTAGE' | 'FIXED', required: Whether formula is a fixed amount (FIXED) or a percent of accommodation fare (PERCENTAGE).
      - `lastUpdated` string, date-time: Last updated timestamp
    - `channel` 'airbnb2' | 'bookingCom' | 'homeaway2' | 'aabode' | 'alohacamp' | 'amaSelections' | 'allogio' | 'altoVita' | 'alluraDirect' | 'angells' | 'anystaysCom' | 'awaze' | 'beachguide' | 'belVilla' | 'bluegroundNestpick' | 'bnbFinder' | 'boarding' | 'bookingPalGcm' | 'bookripe' | 'boutiquehomeCom' | 'byndhomesCom' | 'bynd' | 'capitalOne' | 'cockpit' | 'cocoonr' | 'check24' | 'crewDogs' | 'cuddlyNest' | 'desVu' | 'easyReserve' | 'emeraldCoast' | 'etravel' | 'feratel' | 'findRentals' | 'floridaPanhandleCom' | 'floridaRentals' | 'flowOne' | 'getawayGoGo' | 'glampingHub' | 'golfhom' | 'gonesto' | 'googleVacationRentals' | 'got2Go' | 'groupRentals' | 'guestSmiles' | 'hawaiianIslandsCom' | 'helloLanding' | 'hiSite' | 'holidaySwap' | 'holidu' | 'homesVillasByMarriott' | 'homeToGo' | 'hopper' | 'hostelworld' | 'hotelbeds' | 'hotelsCombined' | 'houfy' | 'housingAnywhere' | 'houseStay' | 'housingPanda' | 'HVN' | 'hyperguest' | 'inntopia' | 'invenioHomes' | 'lakeCom' | 'livily' | 'livjaza' | 'luxico' | 'luxuryEscapes' | 'makeMyTrip' | 'mirai' | 'mrMrsSmith' | 'muchosol' | 'mysaGlobal' | 'nesto' | 'netAffinity' | 'oliversTravels' | 'onefinestay' | 'plumGuide' | 'priceTravelCom' | 'rakutenStayInc' | 'reconline' | 'rentalEscapes' | 'rentalz' | 'renters' | 'reserva' | 'revato' | 'roibos' | 'sabreSynxis' | 'situCom' | 'skiCom' | 'skyesCottages' | 'smilingHouse' | 'smokyMountainCom' | 'soujourn' | 'spacestCom' | 'square' | 'stay' | 'stayHvn' | 'stayLonger' | 'stayOne' | 'staySense' | 'stugaCa' | 'szallas' | 'theDyrt' | 'theMaimonGroup' | 'theQuintessCollection' | 'topVillas' | 'torontoBoutiqueApartments' | 'traveloka' | 'travelStaytion' | 'travelWithAspectCom' | 'tripco' | 'tripCom' | 'tripCom2' | 'traum' | 'tropicalEscape' | 'trustedStays' | 'tuiVillas' | 'vacasa' | 'vacationFinder' | 'vacationRenter' | 'vacayHome' | 'vacayMyWay' | 'viajesElCorteIngles' | 'vidle' | 'villaFinder' | 'villaway' | 'villaTracker' | 'vivreStays' | 'vrboLite' | 'wander' | 'weski' | 'weChalet' | 'whimstay' | 'zaaer', required: OTA (for example airbnb2, bookingCom, homeaway2) or Guesty Distribution Hub (GDH) channel this override applies to. Values match the channel path parameter on GET listings/{listingId}/channels/{channel}.

## Other responses

- `400`: The input provided is invalid.

## Changes

- **2026-11-03** `3122b8618183`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/guesty/apis/guesty-open-api/changes/basic-fees/listings/:listingId/put.md)

---

[API](https://skmtc.dev/guesty/apis/guesty-open-api.md) - [All operations](https://skmtc.dev/guesty/apis/guesty-open-api/llms.txt) - [OpenAPI document](https://skmtc.dev/guesty/apis/guesty-open-api/revisions/3122b8618183?raw)
