Properties

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.

GET
https://api.portal.magicdoor.com/company-app/properties

Authorization

Authorizationstringrequired
Bearer token — Send your API token in the Authorization header as Bearer <token>. Requests without a valid token are rejected with 401 Unauthorized.

Query parameters

pageinteger

Which page to return. Starts at 1.

default: 1
pageSizeinteger

How many records per page. Between 1 and 100. Defaults to 50.

default: 50
activeboolean

true returns only active properties, false only deactivated ones. Omit to get both.

namestring

Exact name match, 1 to 150 characters. Trimmed before it is compared.

typeenum<string>

Return only properties of this kind.

singleFamilymultiFamilycommercialcondotownHomeother
portfolioIdstring

Return only properties in this portfolio.

ownerIdstring

Return only properties this owner has a share in.

searchstring

Free-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.

currentPageinteger

The page you asked for. Note the name: this endpoint calls it currentPage, not page.

totalPagesinteger

How many pages the filtered set fills at this page size.

pageSizeinteger

How many records a page holds.

totalCountinteger

How 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.

Where a property sits

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.

Half of this shape is computed

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.

This envelope names the page `currentPage`

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.