Owner transfers

Ask an owner for a contribution

Raises a request asking an owner to put money into a property. The request starts in requested and becomes completed once a matching contribution is recorded.

POST
https://api.portal.magicdoor.com/company-app/owners/contributions/requests

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.

Body

application/json

propertyId and ownerId are the only ids in this API sent as JSON numbers rather than decimal strings. A 19-digit Snowflake does not survive a round trip through a JavaScript number, so build the request body by hand rather than with JSON.stringify on parsed data. They are left out of the example below because a bare 19-digit number cannot be written accurately here either.

propertyIdintegerrequired

The property the money is for. Sent as a number, unlike most ids in this API, which are decimal strings.

amountnumberrequired

How much to ask for, in dollars and cents. Must be greater than 0.

requestDatestring · daterequired

The day to date the request.

ownerIdinteger

Which owner to ask. Sent as a number. Left out, the request is raised against the property without naming an owner.

dueDatestring · date

The day the owner is asked to pay by.

memostring

What the money is for. At most 1000 characters.

Response

200 · The request that was raised. `owner` and `property` are not resolved on this response.

idstring

The contribution request. A Snowflake id sent as a decimal string.

amountnumber

How much the owner is being asked to put in, in dollars and cents. Always positive.

requestDatestring · date

The day the request was raised.

dueDatestring · date

The day the owner is asked to pay by. Absent when no due date was set.

memostring

What the money is for. Absent when none was set.

statusenum<string>

Where the request stands. requested is waiting on the owner, pending means a payment is in flight, completed means the contribution landed, and cancelled means it was withdrawn.

requestedpendingcompletedcancelled
ownerContributionIdstring

The contribution this request produced. Absent until the owner has paid.

ownerobject

The owner being asked, as the full owner record. Absent when the request was raised without naming an owner, or the owner could not be resolved.

propertyobject

The property the money is for. Absent on the single-request responses that do not resolve it.

createdstring · date-time

When the request was created, in the company's timezone.

updatedstring · date-time

When it last changed, in the company's timezone.

400 · `amount` is not greater than 0, `memo` is longer than 1000 characters, or a required field is missing.

401 · The access token is missing, expired, or does not belong to a property manager.

404 · The owner or property does not exist for the caller's company.

422 · The owner is deactivated.

These two ids are numbers, not strings

Everywhere else in this API a Snowflake id is sent as a decimal string, because a 19-digit integer loses digits in JavaScript. This endpoint's propertyId and ownerId are declared as 64-bit integers and are rejected if you quote them. Assemble the JSON body as text so the digits survive.

cURL
curl --request POST \
  --url '{{baseUrl}}/company-app/owners/contributions/requests' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{"propertyId":1799110447398404096,"ownerId":1812910038475120640,"amount":5000.00,"requestDate":"2026-02-25","dueDate":"2026-03-10","memo":"Roof repair funding"}'