Reports

Owner statement report

Builds one owner's statement for a period: for each property they hold a stake in, the cash it started and finished with, every transaction in between, and the bills still due. One transaction row is one cash movement, with a running balance.

GET
https://api.portal.magicdoor.com/company-app/reports/owner-statement/{ownerId}

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.

Path parameters

ownerIdstringrequired

The owner to build the statement for. A Snowflake id sent as a decimal string.

example: 1830472847398413013

Query parameters

propertyIdsstring[]

Only include these properties. Repeat the parameter once per id. Leave it out for every property the owner holds a stake in.

dateRange.startstring · date

First day of the period. Read in the company's timezone.

example: 2026-01-01
dateRange.endstring · date

Last day of the period, included in the range.

example: 2026-03-31
includeAllUnpaidBillsboolean

Whether the bills-due section covers everything outstanding, rather than only what falls inside the period.

default: true
includeSubsidiesboolean

Whether housing-authority subsidy payments appear as cash in.

default: true

Response

200 · The owner's statement.

ownerobject

The owner the statement is for.

dateRangeobject

The period actually reported on, after any defaulting.

propertiesobject[]

One section per property, sorted by the property's display name.

tenantsobject[]

Every tenant named by a transaction, keyed by tenant id.

vendorsobject[]

Every vendor named by a transaction or a bill, keyed by vendor id.

unsettledManagementFeesTotalnumber

Management fees earned but not yet settled.

unsettledServiceBillsTotalnumber

Service bills raised but not yet settled.

401 · The access token is missing, expired, or not valid for this company.

404 · No owner with that id exists in the caller's company.

What happens when you leave the range out

Send both dateRange.start and dateRange.end and they are used as sent. Send only one and the other is filled in a month away from it. Send neither and the statement covers the month up to now. The period actually used comes back in dateRange.

`netOwnerFunds` is the number to pay out on

endingCash is what the property is holding. netOwnerFunds takes off the bills still due and the property's reserve, so it is what can actually be distributed.

tenants and vendors come back as objects keyed by id, not as arrays, so a transaction's tenantId can be looked up directly.