List properties
Returns a page of properties, each hydrated with its portfolio, owners, unit counts and money rollups, plus the value of every property custom field the company has defined.
Authorization
AuthorizationstringrequiredQuery parameters
pageintegerWhich page to return. Starts at 1.
pageSizeintegerHow many records per page. Between 1 and 100. Defaults to 50.
activebooleantrue returns only active properties, false only deactivated ones. Omit to get both.
namestringExact name match, 1 to 150 characters. Trimmed before it is compared.
typeenum<string>Return only properties of this kind.
portfolioIdstringReturn only properties in this portfolio.
ownerIdstringReturn only properties this owner has a share in.
searchstringFree-text search. The term is stripped of punctuation and common address words are abbreviated — "avenue" becomes "ave", "apartment" becomes "apt" — and then every word in it must appear in the record's searchable text, which is built from its name and address. Must not be empty if given.
Response
200 · One page of hydrated properties, plus the definitions of the custom fields their values refer to.
itemsProperty[]The properties on this page.
currentPageintegerThe page you asked for. Note the name: this endpoint calls it currentPage, not page.
totalPagesintegerHow many pages the filtered set fills at this page size.
pageSizeintegerHow many records a page holds.
totalCountintegerHow many records match the filter across every page.
customFieldsobject[]The definitions behind the customFieldValues on each item, so you can render a value without a second call.
400 · A query parameter failed validation — `page` below 1, `pageSize` outside 1 to 100, or an id that is not a decimal number. 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.
MagicDoor nests records four deep: a portfolio holds properties, a property holds units, and a lease is signed on a unit. Every property names exactly one portfolioId; move it with the move endpoint rather than by writing that field. A property is the building — the rent, the tenants and the money all hang off its units.
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.
The rest of the MagicDoor API returns page in its pagination envelope. The legacy Portal endpoints, including this one, return currentPage instead. The request parameter is still page.