Skip to main content
The contract endpoints share one quota: 600 requests an hour per API key, across all of them together. It is sized for a nightly catalogue sync plus a live calendar feed for a mid-size portfolio; if your integration legitimately needs more, that is a conversation with your Maat contact, not something to engineer around. Every response announces where you stand: Going over answers 429 with code: "rate_limited" and a Retry-After header giving the wait in seconds. Honour it — the window does not reset faster because you keep asking.

Budgeting a sync

Three properties of the API keep a well-shaped integration comfortably inside the quota:
  • Unchanged pushes are cheap for you to skip. Both inbound contracts are idempotent PUTs keyed by your own identifier, so you can safely push only what changed since your last sync — and re-push everything after any doubt.
  • Unchanged photo URLs cost nothing, so a full catalogue push does not re-process images — see Properties.
  • Read RateLimit-Remaining as you go rather than counting requests yourself, and smooth large syncs over the hour rather than bursting them.

The token exchange is counted separately

POST /v1/token has its own, separate ceiling — it does not draw from the 600. Mint one token per batch of work, not one per request: a token lives fifteen minutes by default, which is an entire sync’s worth of calls under one exchange. An integration that exchanges a key per request will meet the exchange’s ceiling long before the contract quota.