Update a property
Rewrites a property's stored fields. Both name and magicTags are written exactly as sent, so leaving one out clears it. There is no partial update on this endpoint.
Authorization
AuthorizationstringrequiredPath parameters
propertyIdstringrequiredSnowflake id of the property, as a decimal string.
Body
application/json
The property is written from this body in full. A field you leave out is cleared, not left alone.
namestringWhat to call the property, 1 to 150 characters. Leave it out to clear the name.
addressobjectrequiredWhere the property is. Required on every update.
typeenum<string>requiredWhat kind of building this is.
imageSessionIdstringId of a completed upload session for a new main photo.
imageIdstringdeprecatedId of an already-uploaded but unclaimed file. Use imageSessionId instead.
iconsstring[]Replaces the icon list. Leave it out and the list is emptied.
magicTagsobjectReplaces the labels, as a map of string keys to string values. Leave it out and they are cleared.
totalFloorsintegerNumber of floors in the building, 1 to 200.
Response
200 · The updated property, hydrated.
idstringSnowflake id of the property.
namestringThe name a property manager gave the property. Absent when the property was never named.
displayNamestringWhat to show in a list: the name if there is one, otherwise streetAddress1, otherwise the literal "Unnamed Property". Computed on every read.
addressobjectThe property's address. Absent when no address has been recorded.
portfolioIdstringThe portfolio this property sits in.
typeenum<string>What kind of building this is. A singleFamily or condo property, and a townHome with exactly one unit, is treated as a single-unit property elsewhere in the API.
totalFloorsintegerNumber of floors in the building, 1 to 200. Absent when it was never set.
unitCountintegerHow many units belong to the property, active and deactivated together. Maintained by MagicDoor as units are created and deleted; you cannot set it.
recentRentalApplicationsintegerHow many rental applications naming this property arrived in the recent window. Computed; you cannot set it.
activebooleanfalse once the property has been deactivated.
imageIdstringThe file behind the property's main photo. Absent when no photo has been set.
iconsstring[]Icon keys pinned to the property. Free-form strings.
magicTagsobjectFree-form labels on the property, as a map of string keys to string values. MagicDoor stores them as given and uses them to scope things like vendor bills. Absent when none are set.
imageobjectThe property's main photo, resolved from imageId. Absent when no photo has been set.
portfolioobjectThe portfolio this property sits in, expanded.
totalRentnumberComputed: the sum of currentRent across the property's active leases. Not stored — you cannot set it.
currentBalancenumberComputed: the sum of balance across the property's active leases. A positive figure means tenants owe money.
postedBalancenumberComputed: the sum of postedBalance across the property's active leases — the same total as currentBalance but counting only charges that have already been posted.
totalDepositnumberComputed: the sum of securityDepositPaid across the property's active leases.
occupiedUnitsintegerComputed: how many distinct units of this property have an active lease.
activeUnitsintegerComputed: how many of the property's units are active. Differs from unitCount, which also counts deactivated units.
emptyUnitsintegerComputed as activeUnits minus occupiedUnits.
ownersobject[]Who owns the property and in what share. Empty when no owner has been linked.
defaultUnitobjectThe property's only unit, returned when the property is a single-unit one — singleFamily, condo, or a townHome with exactly one unit. Absent otherwise.
400 · A required field is missing or fails validation. The response carries an `errors` member mapping each rejected field name to its message.
401 · The access token is missing, expired, or not for this company.
404 · No property with that id, or it belongs to another company.
422 · The property has been deactivated, so it cannot be edited.
The property record itself stores name, address, type, portfolioId, totalFloors, imageId, icons and magicTags — those are the fields you can write. Everything else on the response is derived on read: displayName, address.isValid, unitCount, recentRentalApplications, and the whole rollup block — totalRent, currentBalance, postedBalance, totalDeposit, occupiedUnits, activeUnits, emptyUnits, owners, defaultUnit. Sending any of them back on a create or update does nothing.
There is no portfolioId in this body. To put a property in a different portfolio use Move a property, which checks the target and refuses a no-op move.