Skip to content

Getting started

The API has three doors. They share one key format, one error convention and one set of budgets, but each has its own base URL, its own scopes and its own contract — a key made for one door cannot open another.

DoorWho holds the keyWhere the key is createdBase URL
AgencyThe agency’s own systems and partnersAgency console → Partner APIhttps://api.myrentalcalendar.com/partner/v1
LandlordA landlord’s accountant or toolsLandlord portal → API accesshttps://api.myrentalcalendar.com/partner/v1/landlord
CleaningA cleaning company’s dispatch softwareCleaning portal → API accesshttps://api.myrentalcalendar.com/partner/v1/cleaning

The agency console lists the keys of all three doors and can revoke any of them — the agency pays for the API and answers for the data. It can also create a landlord or cleaning key on someone’s behalf. API access is part of the Pro plan (or the Partner API add-on on Grow).

  1. Sign in to the portal of your door (see the table above).
  2. Open the API page and create a key. Pick only the scopes your integration needs — reads are pre-selected, writes and personal data are not.
  3. Copy the key now — it starts with hr_live_ and is shown exactly once. Only a hash is stored on our side.

Every door answers GET …/me for any valid key — it tells you which agency, which door, whom the key is bound to and how much budget is left:

Terminal window
curl https://api.myrentalcalendar.com/partner/v1/me \
-H "Authorization: Bearer hr_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
{
"audience": "agency",
"tenant": { "id": "0190c…", "name": "Marina Stays", "slug": "marina-stays", "currency": "AED", "timezone": "Asia/Dubai" },
"key": { "id": "0190d…", "name": "Channel sync", "prefix": "hr_live_a4f2…", "scopes": ["read:units", "read:availability", "read:rates", "read:bookings"], "createdAt": "2026-09-01T09:12:44.000Z", "expiresAt": null },
"landlord": null,
"cleaningCompany": null,
"rateLimit": { "requestsPerMinute": 60, "sharedWith": ["rest", "mcp"] },
"quota": { "month": "2026-09", "used": 12480, "quota": 50000, "remaining": 37520, "resetsAt": "2026-10-01T00:00:00.000Z" }
}

A landlord key answers the same shape with "audience": "landlord" and the landlord named; a cleaning key with "audience": "cleaning" and the crew.

Agency — list the units, check availability, price a stay:

Terminal window
curl https://api.myrentalcalendar.com/partner/v1/units -H "Authorization: Bearer $KEY"
curl "https://api.myrentalcalendar.com/partner/v1/availability?unit=marina-loft-2br&from=2026-09-01&to=2026-10-01" -H "Authorization: Bearer $KEY"
curl https://api.myrentalcalendar.com/partner/v1/quote -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{ "unit": "marina-loft-2br", "arrival": "2026-09-10", "departure": "2026-09-14" }'

Landlord — the units and last month’s statement:

Terminal window
curl https://api.myrentalcalendar.com/partner/v1/landlord/units -H "Authorization: Bearer $KEY"
curl "https://api.myrentalcalendar.com/partner/v1/landlord/statement?from=2026-08-01&to=2026-08-31" -H "Authorization: Bearer $KEY"

Cleaning — today’s round, then report the first stop:

Terminal window
curl "https://api.myrentalcalendar.com/partner/v1/cleaning/plan?date=2026-09-03" -H "Authorization: Bearer $KEY"
curl -X POST "https://api.myrentalcalendar.com/partner/v1/cleaning/jobs/turnover:0191a…/finish" -H "Authorization: Bearer $KEY"
ConventionRule
Base URLhttps://api.myrentalcalendar.com plus the door’s prefix
ContractGET <door>/openapi.json — OpenAPI 3.1, generated from the code, readable without a key
DatesISO YYYY-MM-DD; a night is the date the guest sleeps, stays are [arrival, departure)
AmountsIntegers in the agency currency’s minor unit (fils/cents): 45000 = AED 450.00
ErrorsJSON with a stable code and a human-readable title — see errors & limits
Rate limit60 requests per minute per key, shared between REST and MCP
Monthly quota50,000 requests per agency per month, all keys of all doors together