Skip to content

Overview

This is the agency door — the key an agency creates in its own console, seeing the whole agency. Landlords and cleaning companies have their own doors with their own references: Landlord API, Cleaning API.

Base URLhttps://api.myrentalcalendar.com
OpenAPIGET /partner/v1/openapi.json — generated from the code that serves the API
Version prefix/partner/v1 — additive changes only; breaking changes ship as /partner/v2
AuthAuthorization: Bearer hr_live_… (details)
Content typeapplication/json (UTF-8) both ways
Rate limit60 requests/minute per key, shared with MCP; 429 + Retry-After beyond
Monthly quota50,000 requests per agency per calendar month (UTC), all doors together
Method & pathScopePurpose
GET /partner/v1/me—The agency behind the key, its door, scopes and budget
GET /partner/v1/unitsread:unitsList all units
GET /partner/v1/units/:slugread:unitsOne unit with amenities, photos, sleeping arrangement
GET /partner/v1/amenitiesread:unitsThe amenity catalogue
GET /partner/v1/availabilityread:availabilityBlocked nights of a unit in a range
POST /partner/v1/quoteread:ratesPrice a stay with the live engine
GET /partner/v1/ratesread:ratesNightly rate calendar of a unit
GET /partner/v1/promotionsread:ratesRunning promotions
GET /partner/v1/fee-typesread:ratesThe agency’s active fee catalogue
GET /partner/v1/bookingsread:bookingsBooking rows without guest data
GET /partner/v1/bookings/:idread:bookingsOne booking
POST /partner/v1/bookingswrite:bookingsCreate a booking
POST /partner/v1/bookings/:id/cancelwrite:bookingsCancel a booking
GET /partner/v1/guestsread:guestsGuest master data and prospects
GET /partner/v1/guests/:idread:guestsOne guest with their stays
GET /partner/v1/requestsread:requestsEnquiries from the website and lead portals
GET /partner/v1/requests/:idread:requestsOne enquiry
GET /partner/v1/tasksread:tasksThe office to-do list
GET /partner/v1/tasks/:idread:tasksOne task
POST /partner/v1/taskswrite:tasksCreate a task
PATCH /partner/v1/tasks/:idwrite:tasksUpdate a task
GET /partner/v1/invoicesread:financeIssued invoices
GET /partner/v1/invoices/:idread:financeOne invoice with its lines
GET /partner/v1/paymentsread:financeRecorded payments
GET /partner/v1/depositsread:financeSecurity-deposit ledger
GET /partner/v1/housekeeping/jobsread:housekeepingDerived cleaning jobs
GET /partner/v1/housekeeping/teamsread:housekeepingCleaning crews
GET /partner/v1/landlordsread:landlordsLandlords with their tenures
GET /partner/v1/landlords/:idread:landlordsOne landlord
GET /partner/v1/landlords/:id/statementread:landlordsA landlord’s statement for a period
GET /partner/v1/unit-costsread:costsRunning cost rows
GET /partner/v1/cost-categoriesread:costsCost category catalogue
  • Dates are ISO YYYY-MM-DD. Stays are half-open ranges [arrival, departure); a night is the date the guest sleeps.
  • Amounts are integers in the agency currency’s minor unit (45000 = AED 450.00). The currency appears wherever amounts do.
  • Identifiers: units are addressed by their stable slug; everything else by opaque id. Slugs come from GET /units.
  • Errors always carry a stable code and a human-readable title — branch on the code, log the title. Full list: errors & limits.
  • Lists paginate with ?page=1&pageSize=100 (max 200). The collection keeps its own name in the response (bookings, guests, tasks, …) and the page facts sit beside it: page, pageSize, totalItems, pageCount.
  • Personal data travels only with read:guests: guest records themselves, the contact block on enquiries, the buyer block on invoices. Every other endpoint is free of it whatever the key holds.
  • Budgets are announced on every answer via X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (unix seconds). Pace against the remaining count rather than waiting to be refused.
  • CORS is open on this surface (Access-Control-Allow-Origin: *): it takes no cookies, so a browser can call it directly. That does not make it safe to ship a key to browsers — anyone reading your page would hold your agency’s key.