> For the complete documentation index, see [llms.txt](https://docs.channex.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.channex.io/api-v.1-documentation/hotels-collection/update-property-api.md).

# Update Property API

## Update a property

> Update a property by its identifier. Attributes absent from the request are left unchanged. The updated property is returned.

```json
{"openapi":"3.1.0","info":{"title":"Channex.io — Properties","version":"0.0.0"},"tags":[{"name":"Properties","description":"Manage Properties — the physical premises you sell: hotels, motels, lodges, cabins, chalets, apartments and the like. Each property has its own address and details, so create one property per premises rather than combining several into a single entry."}],"servers":[{"url":"https://app.channex.io/api/v1","description":"Production server","variables":{}},{"url":"https://staging.channex.io/api/v1","description":"Staging server","variables":{}}],"security":[{"UserApiKeyAuth":[]}],"components":{"securitySchemes":{"UserApiKeyAuth":{"type":"apiKey","in":"header","name":"user-api-key","description":"API key for programmatic access, sent in the `user-api-key` header."}},"schemas":{"Common.Scalars.id":{"type":"string","format":"uuid"},"Properties.PropertyResource":{"type":"object","required":["type","id","attributes","relationships"],"properties":{"type":{"type":"string","enum":["property"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/Properties.Property"},"relationships":{"$ref":"#/components/schemas/Properties.PropertyRelationships"}},"description":"A property as returned by the single-property endpoints."},"Properties.Property":{"type":"object","required":["id","is_active","expected_removal_date","acc_channels_count","property_category","max_count_of_room_types","max_count_of_rate_plans","max_count_of_occupancies","max_count_of_users","title","currency","email","phone","zip_code","country","state","city","address","longitude","latitude","timezone","property_type","logo_url","website","hotel_policy_id","default_cancellation_policy_id","default_tax_set_id","location_precision","min_stay_type","settings","content"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"Unique property identifier."},"is_active":{"type":"boolean","description":"Whether the property is active."},"is_demo":{"type":"boolean","enum":[true],"description":"Marks a demo property, pre-filled with sample data.\nPresent on a demo property only — a property created through `POST /properties`\ncarries no such attribute."},"expected_removal_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Date the property is expected to be removed, or null."},"acc_channels_count":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"}],"description":"Count of connected channels. Read-only aggregate."},"property_category":{"anyOf":[{"$ref":"#/components/schemas/Properties.PropertyCategory"},{"type":"null"}],"description":"Classification category of the property, or null when it is not set. Read-only."},"max_count_of_room_types":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"}],"description":"Maximum number of room types allowed. Read-only limit."},"max_count_of_rate_plans":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"}],"description":"Maximum number of rate plans allowed. Read-only limit."},"max_count_of_occupancies":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"}],"description":"Maximum number of occupancy options allowed. Read-only limit."},"max_count_of_users":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"}],"description":"Maximum number of users allowed. Read-only limit."},"title":{"type":"string","maxLength":255,"description":"Property title, as shown in the system."},"currency":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.currency"}],"description":"Default currency for nested entities, and the property's default currency for connected third-party services."},"email":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.email"},{"type":"null"}],"description":"Contact email. Passed to connected third-party services as the property's contact email. Optional at setup, required before connecting a 3rd-party service."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":32,"description":"Contact phone. Digits, spaces, brackets and special characters; max 32 chars. Passed to connected third-party services as the property's contact phone. Optional at setup, required before connecting a 3rd-party service."},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":32,"description":"ZIP/postal code (max 32 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"country":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.country"},{"type":"null"}],"description":"Country of the property. ISO 3166-1 alpha-2 country code. Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":255,"description":"State/region (max 255 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":255,"description":"City (max 255 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":255,"description":"Street address (max 255 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"longitude":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":12,"description":"Longitude as a decimal string in the range −180..180 (max 7 decimals). Derived from the address when the property is saved without one. Part of the property coordinates passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"latitude":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":11,"description":"Latitude as a decimal string in the range −90..90 (max 7 decimals). Derived from the address when the property is saved without one. Part of the property coordinates passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"timezone":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.timezone"},{"type":"null"}],"description":"Time zone of the property, or null when it is not set. Sending `null` clears it.\n\nTime zone name from the IANA Time Zone Database (the \"tz database\"), published at\nhttps://www.iana.org/time-zones — background at\nhttps://en.wikipedia.org/wiki/Tz_database. See the `/timezones` endpoint for the\nvalues this API accepts."},"property_type":{"anyOf":[{"$ref":"#/components/schemas/Properties.PropertyType"},{"type":"null"}],"description":"Type of the property, or null when it is not set. Sending `null` clears it.\n\n**Set this value — it affects billing. Use `hotel` for a hotel and `apartment`\nfor a vacation rental.**"},"logo_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"URL to the property logo; copied into Channex media storage."},"website":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"URL to the property website."},"hotel_policy_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the property's hotel policy, or null. Sending `null` clears it."},"default_cancellation_policy_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the property's default cancellation policy, or null."},"default_tax_set_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the property's default tax set, or null."},"location_precision":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"},{"type":"null"}],"description":"Location precision, or null."},"min_stay_type":{"allOf":[{"$ref":"#/components/schemas/Properties.MinStayType"}],"description":"Simplified Min Stay restriction handling for the property. Mirrors `settings.min_stay_type`: writing either attribute updates both.","deprecated":true},"settings":{"$ref":"#/components/schemas/Properties.PropertySettings"},"content":{"$ref":"#/components/schemas/Properties.PropertyContent"}},"description":"A property (hotel, apartment, etc.) as returned in responses: every attribute is present."},"Common.Scalars.nonNegativeInt":{"type":"integer","format":"int32","minimum":0},"Properties.PropertyCategory":{"type":"string","enum":["camping","hotel","vacation_rental"],"description":"Classification category of the property."},"Common.Scalars.currency":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 alphabetic currency code. See the `/currencies` endpoint for supported values."},"Common.Scalars.email":{"type":"string","format":"email"},"Common.Scalars.country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code."},"Common.Scalars.timezone":{"type":"string","description":"Time zone name from the IANA Time Zone Database (the \"tz database\"), published at\nhttps://www.iana.org/time-zones — background at\nhttps://en.wikipedia.org/wiki/Tz_database. See the `/timezones` endpoint for the\nvalues this API accepts."},"Properties.PropertyType":{"type":"string","enum":["apart_hotel","apartment","boat","camping","capsule_hotel","chalet","country_house","farm_stay","guest_house","holiday_home","holiday_park","homestay","hostel","hotel","inn","lodge","motel","resort","riad","ryokan","tent","villa"],"description":"Type of property. Affects billing — set `hotel` for hotels or `apartment` for vacation rentals."},"Properties.MinStayType":{"type":"string","enum":["both","arrival","through"],"description":"Simplified handling of Min Stay restrictions. `both` keeps Min Stay Arrival and Min Stay Through separate. Set `arrival` or `through` when a system works with only one Min Stay type: min stay changes are then accepted under a single `min_stay` key and applied as that type in channel mappings."},"Properties.PropertySettings":{"type":"object","required":["allow_availability_autoupdate_on_confirmation","allow_availability_autoupdate_on_modification","allow_availability_autoupdate_on_cancellation","min_stay_type","state_length","cut_off_time","cut_off_days","max_day_advance","min_price","max_price"],"properties":{"allow_availability_autoupdate_on_confirmation":{"type":"boolean","description":"Decrease availability on new bookings. Effectively read-only — cannot be set to `false`. Always equal to `true`."},"allow_availability_autoupdate_on_modification":{"type":"boolean","description":"Increase/decrease availability on booking modification. Default is `false`, which is the recommended setting."},"allow_availability_autoupdate_on_cancellation":{"type":"boolean","description":"Decrease availability on booking cancellation. Default is `false`, which is the recommended setting."},"min_stay_type":{"allOf":[{"$ref":"#/components/schemas/Properties.MinStayType"}],"description":"Simplified Min Stay restriction handling for the property."},"state_length":{"type":"integer","format":"int32","minimum":100,"maximum":730,"description":"Length of the inventory table in days (100-730). Default is 500."},"cut_off_time":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cut-off time in 30-minute steps, e.g. `\"00:00:00\"`, or null when no cut-off is set. At this time each day, availability is closed for today plus `cut_off_days`."},"cut_off_days":{"anyOf":[{"type":"integer","format":"int32"},{"type":"null"}],"minimum":0,"maximum":30,"description":"Number of days closed by the cut-off task (0-30), or null when no cut-off is set."},"max_day_advance":{"anyOf":[{"type":"integer","format":"int32"},{"type":"null"}],"description":"Max number of days open for sale, or null. Applying this overwrites availability with 0 beyond the window; the overwritten values are only recoverable through a full sync."},"min_price":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"},{"type":"null"}],"description":"Minimum price per property, or null. Prices below it are raised to it."},"max_price":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"},{"type":"null"}],"description":"Maximum price per property, or null. Prices above it are lowered to it."}},"description":"Property-level settings as returned in responses: every setting is present."},"Common.Scalars.decimalString":{"type":"string","description":"A decimal number as a string, e.g. `100.00`. Every monetary amount the API returns takes this form."},"Properties.PropertyContent":{"type":"object","required":["description","important_information","photos"],"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property description. Null by default."},"important_information":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Important information, included in booking confirmation emails."},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photos.Photo"},"description":"Photos attached to the property. A property holds at most 30 of them, counted separately from the photos of its room types. See the Photos resource for the full model and management endpoints."}},"description":"Property content as returned in responses: every field is present."},"Photos.Photo":{"type":"object","required":["id","property_id","room_type_id","kind","position","author","description","url"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"Unique photo identifier."},"property_id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"UUID of the Property the photo belongs to. Cannot be changed after the photo is created."},"room_type_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the Room Type the photo belongs to, or null when the photo is attached at property level. Cannot be changed after the photo is created."},"kind":{"allOf":[{"$ref":"#/components/schemas/Photos.PhotoKind"}],"description":"Kind of photo: `photo` for the property or room type itself, `ad` for an advertising image, `menu` for a restaurant menu. Defaults to `photo`."},"position":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"}],"description":"Position in the photo list of the property or, for a room type photo, of that room type. Positions run from `0` without gaps and `0` designates the cover photo. On create the photo is inserted at this position, or appended when omitted; on update it is moved there. The other photos shift to keep the positions contiguous, and a value past the end places the photo last."},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Photo author, or null. An empty string is stored as `null`."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Photo description, or null. An empty string is stored as `null`."},"url":{"type":"string","format":"uri","description":"URL of the image as served by Channex. The create response carries a placeholder image URL; once the source image has been fetched and stored, typically within a few seconds, the photo carries the URL of the stored copy — read the photo back to obtain it. A source image that cannot be fetched leaves the placeholder in place."}},"description":"A photo as returned in responses: every attribute is present."},"Photos.PhotoKind":{"type":"string","enum":["photo","ad","menu"],"description":"Kind of photo: `photo` for the property or room type itself, `ad` for an advertising image, `menu` for a restaurant menu. Defaults to `photo`."},"Properties.PropertyRelationships":{"type":"object","required":["users","groups","facilities","hotel_policies","cancellation_policies","tax_sets"],"properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Authentication.EmbeddedUser"}}},"required":["data"],"description":"Users with access to the property."},"groups":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","required":["type","id","attributes"],"properties":{"type":{"type":"string","enum":["group"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/Common.JsonApi.OptionAttributes"}},"description":"A lightweight JSON:API resource returned by `/options` endpoints — id + title only, no relationships or pagination."}}},"required":["data"],"description":"Groups the property belongs to."},"facilities":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Facilities.FacilityResource"}}},"required":["data"],"description":"Facilities associated with the property."},"hotel_policies":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HotelPolicies.EmbeddedHotelPolicy"}}},"required":["data"],"description":"Hotel policies associated with the property."},"cancellation_policies":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","required":["type","id","attributes"],"properties":{"type":{"type":"string","enum":["cancellation_policy"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/Common.JsonApi.OptionAttributes"}},"description":"A lightweight JSON:API resource returned by `/options` endpoints — id + title only, no relationships or pagination."}}},"required":["data"],"description":"Cancellation policies associated with the property."},"tax_sets":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","required":["type","id","attributes"],"properties":{"type":{"type":"string","enum":["tax_set"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/Common.JsonApi.OptionAttributes"}},"description":"A lightweight JSON:API resource returned by `/options` endpoints — id + title only, no relationships or pagination."}}},"required":["data"],"description":"Tax sets associated with the property."}},"description":"Relationships of a single property: the list blocks plus the facilities, policies and tax sets of the property."},"Authentication.EmbeddedUser":{"type":"object","required":["type","id","attributes"],"properties":{"type":{"type":"string","enum":["user"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/Authentication.EmbeddedUserAttributes"}},"description":"A user embedded in another resource's relationships, carrying identifier, name and email."},"Authentication.EmbeddedUserAttributes":{"type":"object","required":["id","name","email"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"User identifier. Mirrors the resource id."},"name":{"type":"string","description":"Display name of the user."},"email":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.email"}],"description":"Email address the account is registered with."}},"description":"Identifier, display name and email address of an embedded user."},"Common.JsonApi.OptionAttributes":{"type":"object","required":["id","title"],"properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"title":{"type":"string"}},"description":"Attributes of a lightweight `/options` item: identifier and display title."},"Facilities.FacilityResource":{"type":"object","required":["type","id","attributes"],"properties":{"type":{"type":"string","enum":["facility"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/Facilities.Facility"}},"description":"A facility resource object (JSON:API), returned by both list and options endpoints."},"Facilities.Facility":{"type":"object","required":["id","category","title"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"Unique facility identifier. Mirrors the resource `id`."},"category":{"type":"string","description":"Grouping code the facility belongs to, in lower snake case. The property and\nroom type dictionaries have separate vocabularies: a code valid for one is\nrejected by the other. `filter[category]` takes this value."},"title":{"type":"string","description":"Human-readable facility name."}},"description":"Attributes of a facility (amenity) available at a property or room type."},"HotelPolicies.EmbeddedHotelPolicy":{"type":"object","required":["type","id","attributes"],"properties":{"type":{"type":"string","enum":["hotel_policy"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/HotelPolicies.EmbeddedHotelPolicyAttributes"}},"description":"A hotel policy embedded in another resource's relationships."},"HotelPolicies.EmbeddedHotelPolicyAttributes":{"type":"object","required":["id","title","pets_policy","smoking_policy","checkin_from_time","checkin_to_time","checkout_from_time","checkout_to_time"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"Unique hotel policy identifier."},"title":{"type":"string","description":"Hotel policy title."},"pets_policy":{"$ref":"#/components/schemas/HotelPolicies.PetsPolicy"},"smoking_policy":{"$ref":"#/components/schemas/HotelPolicies.SmokingPolicy"},"checkin_from_time":{"type":"string","description":"Earliest check-in time (`HH:MM`)."},"checkin_to_time":{"type":"string","description":"Latest check-in time (`HH:MM`)."},"checkout_from_time":{"type":"string","description":"Earliest check-out time (`HH:MM`)."},"checkout_to_time":{"type":"string","description":"Latest check-out time (`HH:MM`)."}},"description":"Attributes of a hotel policy embedded in another resource's relationships."},"HotelPolicies.PetsPolicy":{"type":"string","enum":["allowed","not_allowed","by_arrangements","assistive_only"],"description":"Policy towards pets."},"HotelPolicies.SmokingPolicy":{"type":"string","enum":["no_smoking","permitted_areas_only","allowed"],"description":"Policy towards smoking."},"Common.Errors.UnparsableRequest":{"type":"object","required":["errors"],"properties":{"errors":{"$ref":"#/components/schemas/Common.Errors.UnparsableRequestObject"}},"description":"The request body could not be parsed as JSON."},"Common.Errors.UnparsableRequestObject":{"type":"object","required":["code","title","details"],"properties":{"code":{"type":"string","enum":["bad_request"]},"title":{"type":"string","enum":["Bad Request"]},"details":{"type":"object","unevaluatedProperties":{"type":"string"},"description":"Maps the part of the request that could not be parsed to the reason."}},"description":"Error object for an unparsable request body, naming the malformed part."},"Common.Errors.Unauthorized":{"type":"object","required":["errors"],"properties":{"errors":{"type":"object","required":["code","title"],"properties":{"code":{"type":"string","enum":["unauthorized"]},"title":{"type":"string","enum":["Unauthorized"]}},"description":"Shape of a single JSON:API error object: a stable machine code plus a human-readable title."}},"description":"Authentication credentials are missing or invalid."},"Common.Errors.NotFound":{"type":"object","required":["errors"],"properties":{"errors":{"type":"object","required":["code","title"],"properties":{"code":{"type":"string","enum":["resource_not_found"]},"title":{"type":"string","enum":["Resource Not Found"]}},"description":"Shape of a single JSON:API error object: a stable machine code plus a human-readable title."}},"description":"The requested resource does not exist."},"Common.Errors.InvalidArguments":{"type":"object","required":["errors"],"properties":{"errors":{"$ref":"#/components/schemas/Common.Errors.InvalidArgumentsObject"}},"description":"The request has missing or invalid arguments; `details` lists the messages per argument."},"Common.Errors.InvalidArgumentsObject":{"type":"object","required":["code","title","details"],"properties":{"code":{"type":"string","enum":["bad_request"]},"title":{"type":"string","enum":["Bad Request"]},"details":{"type":"object","unevaluatedProperties":{"type":"array","items":{"type":"string"}},"description":"Maps each invalid argument to the list of validation messages for that argument."}},"description":"Error object for invalid request arguments, adding per-argument messages."},"Common.Errors.ValidationError":{"type":"object","required":["errors"],"properties":{"errors":{"$ref":"#/components/schemas/Common.Errors.ValidationErrorObject"}},"description":"The request body failed validation."},"Common.Errors.ValidationErrorObject":{"type":"object","required":["code","title","details"],"properties":{"code":{"type":"string","enum":["validation_error"]},"title":{"type":"string","enum":["Validation Error"]},"details":{"type":"object","unevaluatedProperties":{"type":"array","items":{"type":"string"}},"description":"Maps each invalid field to the list of validation messages for that field."}},"description":"Error object for a failed validation, adding per-field messages."},"Properties.PropertyUpdateRequest":{"type":"object","required":["property"],"properties":{"property":{"$ref":"#/components/schemas/Properties.PropertyUpdate"}},"description":"Request body accepted when updating a property."},"Properties.PropertyUpdate":{"type":"object","properties":{"title":{"type":"string","maxLength":255,"description":"Property title, as shown in the system."},"currency":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.currency"}],"description":"Default currency for nested entities, and the property's default currency for connected third-party services."},"email":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.email"},{"type":"null"}],"description":"Contact email. Passed to connected third-party services as the property's contact email. Optional at setup, required before connecting a 3rd-party service."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":32,"description":"Contact phone. Digits, spaces, brackets and special characters; max 32 chars. Passed to connected third-party services as the property's contact phone. Optional at setup, required before connecting a 3rd-party service."},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":32,"description":"ZIP/postal code (max 32 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"country":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.country"},{"type":"null"}],"description":"Country of the property. ISO 3166-1 alpha-2 country code. Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":255,"description":"State/region (max 255 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":255,"description":"City (max 255 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":255,"description":"Street address (max 255 chars). Part of the contact address passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"longitude":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":12,"description":"Longitude as a decimal string in the range −180..180 (max 7 decimals). Derived from the address when the property is saved without one. Part of the property coordinates passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"latitude":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":11,"description":"Latitude as a decimal string in the range −90..90 (max 7 decimals). Derived from the address when the property is saved without one. Part of the property coordinates passed to connected third-party services. Optional at setup, required before connecting a 3rd-party service."},"timezone":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.timezone"},{"type":"null"}],"description":"Time zone of the property, or null when it is not set. Sending `null` clears it.\n\nTime zone name from the IANA Time Zone Database (the \"tz database\"), published at\nhttps://www.iana.org/time-zones — background at\nhttps://en.wikipedia.org/wiki/Tz_database. See the `/timezones` endpoint for the\nvalues this API accepts."},"property_type":{"anyOf":[{"$ref":"#/components/schemas/Properties.PropertyType"},{"type":"null"}],"description":"Type of the property, or null when it is not set. Sending `null` clears it.\n\n**Set this value — it affects billing. Use `hotel` for a hotel and `apartment`\nfor a vacation rental.**"},"logo_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"URL to the property logo; copied into Channex media storage."},"website":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"URL to the property website."},"hotel_policy_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the property's hotel policy, or null. Sending `null` clears it."},"default_cancellation_policy_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the property's default cancellation policy, or null."},"default_tax_set_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the property's default tax set, or null."},"location_precision":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"},{"type":"null"}],"description":"Location precision, or null."},"min_stay_type":{"allOf":[{"$ref":"#/components/schemas/Properties.MinStayType"}],"description":"Simplified Min Stay restriction handling for the property. Mirrors `settings.min_stay_type`: writing either attribute updates both.","deprecated":true},"group_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the group to place the property in. Defaults to the user's Default Group when omitted, and is applied on create only. In responses the group appears under relationships."},"facilities":{"type":"array","items":{"$ref":"#/components/schemas/Common.Scalars.id"},"description":"Property Facility IDs to associate. See the Property Facilities endpoint for the available identifiers. In responses, facilities appear under relationships."},"settings":{"$ref":"#/components/schemas/Properties.PropertySettingsWrite"},"content":{"$ref":"#/components/schemas/Properties.PropertyContentWrite"}},"description":"Property attributes accepted when updating a property. Every attribute is optional; attributes absent from the request are left unchanged."},"Properties.PropertySettingsWrite":{"type":"object","properties":{"allow_availability_autoupdate_on_confirmation":{"type":"boolean","description":"Decrease availability on new bookings. Effectively read-only — cannot be set to `false`. Always equal to `true`."},"allow_availability_autoupdate_on_modification":{"type":"boolean","description":"Increase/decrease availability on booking modification. Default is `false`, which is the recommended setting."},"allow_availability_autoupdate_on_cancellation":{"type":"boolean","description":"Decrease availability on booking cancellation. Default is `false`, which is the recommended setting."},"min_stay_type":{"allOf":[{"$ref":"#/components/schemas/Properties.MinStayType"}],"description":"Simplified Min Stay restriction handling for the property."},"state_length":{"type":"integer","format":"int32","minimum":100,"maximum":730,"description":"Length of the inventory table in days (100-730). Default is 500."},"cut_off_time":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cut-off time in 30-minute steps, e.g. `\"00:00:00\"`, or null when no cut-off is set. At this time each day, availability is closed for today plus `cut_off_days`."},"cut_off_days":{"anyOf":[{"type":"integer","format":"int32"},{"type":"null"}],"minimum":0,"maximum":30,"description":"Number of days closed by the cut-off task (0-30), or null when no cut-off is set."},"max_day_advance":{"anyOf":[{"type":"integer","format":"int32"},{"type":"null"}],"description":"Max number of days open for sale, or null. Applying this overwrites availability with 0 beyond the window; the overwritten values are only recoverable through a full sync."},"min_price":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"},{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"},{"type":"null"}],"description":"Minimum price per property: a decimal string like `\"100.00\"`, an integer in the currency's minor units (`10000` for 100.00 USD), or null. Prices below it are raised to it."},"max_price":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"},{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"},{"type":"null"}],"description":"Maximum price per property: a decimal string like `\"300.00\"`, an integer in the currency's minor units (`30000` for 300.00 USD), or null. Prices above it are lowered to it."}},"description":"Property-level settings accepted on create and update."},"Properties.PropertyContentWrite":{"type":"object","properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property description. Null by default."},"important_information":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Important information, included in booking confirmation emails."},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photos.EmbeddedPhotoWrite"},"description":"Photos to attach to the property. The list is merged into the property's photos rather than replacing them: an entry with a new `url` attaches a photo, an entry carrying `id` updates that photo, and photos the list does not name are kept. Remove a photo through the Photos resource, or by sending its `id` with `is_removed: true`. A property holds at most 30 photos, counted separately from the photos of its room types: a request that would take the count past 30 is refused, while one that does not raise it is accepted even for a property already holding more, and deleting a photo frees its place."}},"description":"Property content accepted on create and update."},"Photos.EmbeddedPhotoWrite":{"type":"object","required":["url","kind"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"UUID of an existing photo of this parent to update in place or, with `is_removed`, to remove. Omit to attach a new photo. An identifier naming no photo of this parent leaves the list unchanged."},"url":{"type":"string","format":"uri","description":"URL to fetch the image from: the temporary URL returned by the upload endpoint, passed unchanged, or any reachable image URL. The image is copied into Channex storage, and responses carry that copy's URL rather than this one. Required in every entry; an entry without `id` whose URL matches a photo already attached updates that photo."},"kind":{"allOf":[{"$ref":"#/components/schemas/Photos.PhotoKind"}],"description":"Kind of photo. Required when attaching or updating a photo; an entry that only removes one may omit it."},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Photo author, or null."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Photo description, or null."},"is_removed":{"type":"boolean","description":"Set to `true` to remove the photo named by `id` or `url` from the parent. The photo is deleted and is no longer readable through the Photos resource. Defaults to `false`."}},"description":"A photo in a parent resource's `content.photos` list."}}},"paths":{"/properties/{id}":{"put":{"operationId":"Properties_update","summary":"Update a property","description":"Update a property by its identifier. Attributes absent from the request are left unchanged. The updated property is returned.","parameters":[{"name":"id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Common.Scalars.id"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Properties.PropertyResource"}},"description":"JSON:API document wrapping a single resource."}}}},"400":{"description":"The request body could not be parsed as JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Common.Errors.UnparsableRequest"}}}},"401":{"description":"Authentication credentials are missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Common.Errors.Unauthorized"}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Common.Errors.NotFound"}}}},"422":{"description":"The request has missing or invalid arguments; `details` lists the messages per argument.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Common.Errors.InvalidArguments"},{"$ref":"#/components/schemas/Common.Errors.ValidationError"}]}}}}},"tags":["Properties"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Properties.PropertyUpdateRequest"}}}}}}}}
```
