Skip to content

Units & occupancy

All four endpoints need landlord:read:units.

Every apartment you hold or held, with the tenure that ties it to you. A unit you sold stays listed with tenure.current: false, so your history keeps reading — but nothing after the sale date is yours.

{
"units": [
{
"id": "0190c…",
"slug": "marina-loft-2br",
"name": "Marina Loft · 2BR",
"status": "published",
"city": "Dubai",
"area": "Dubai Marina",
"building": "Marina Heights",
"address": "Marina Heights, Tower B",
"bedrooms": 2,
"beds": 3,
"bathrooms": 2,
"maxGuests": 5,
"sizeSqm": 118,
"checkinTime": "15:00",
"checkoutTime": "11:00",
"petsAllowed": false,
"tourUrl": "https://my.matterport.com/show/?m=…",
"coverPhoto": "/static/photos/marina-stays/marina-loft-2br/cover.webp",
"tenure": {
"sharePct": 100,
"commissionPct": 18,
"validFrom": "2024-03-01",
"validTo": null,
"current": true
}
}
]
}

tenure.commissionPct is the agency fee that actually applies to your stays — resolved from the unit override, your landlord override and the agency default, in that order. coverPhoto is relative to https://api.myrentalcalendar.com.

One of your apartments, same shape. 404 NOT_FOUND for anything that is not inside one of your tenures — including apartments that exist but belong to someone else.

Query parameterRequiredMeaning
unityesUnit slug
from / toyes[from, to), at most 366 days
{ "unit": "marina-loft-2br", "from": "2026-10-01", "to": "2026-11-01", "blockedNights": ["2026-10-03", "2026-10-04", "2026-10-05"] }

Blocked nights are stays of any kind, your own blocks, and the cleaning block after a checkout. A night not listed is free — which is what you check before blocking dates for yourself.

Anonymised occupancy inside your tenure. Stays are attributed by arrival date: a stay that arrived before you bought the unit belongs to the seller and does not appear.

Query parameterMeaning
from / toStays with departure ≥ from and arrival ≤ to
unitUnit slug
page / pageSize1-based page, 1–200 rows (default 100); newest arrival first
{
"bookings": [
{
"id": "0191a…",
"unitSlug": "marina-loft-2br",
"unitName": "Marina Loft · 2BR",
"type": "guest",
"status": "confirmed",
"source": "airbnb",
"arrival": "2026-10-03",
"departure": "2026-10-06",
"nights": 3,
"adults": 2,
"children": 0,
"totalAmount": 168000,
"currency": "AED",
"earlyCheckin": null,
"lateCheckout": null,
"cleanedAt": null,
"createdAt": "2026-09-12T10:22:00.000Z"
},
{
"id": "0191e…",
"type": "owner_stay",
"status": "confirmed",
"source": "direct",
"arrival": "2026-10-20",
"departure": "2026-10-27",
"nights": 7,
"adults": 2,
"children": 0,
"totalAmount": 0,
"…": "…"
}
],
"page": 1, "pageSize": 100, "totalItems": 41, "pageCount": 1
}
FieldNotes
typeguest (revenue), owner_stay (your own use), block, maintenance
totalAmountGross amount of a guest stay — what the statement’s gross column shows; 0 for everything else
cleanedAtWhen housekeeping reported the turnover done

There is no guest name, e-mail or phone here, and there will not be.

One stay inside your tenure, same fields. 404 NOT_FOUND otherwise.