Rate limits
One allowance per account, shared by the REST API and MCP: a call through either counts against the same budget.
The budget
Per minute
240 units
A token bucket that refills continuously at 4 units per second (240 ÷ 60). It is a continuous refill rather than a hard reset every 60 seconds, so a steady drawdown never empties the bucket.
Per day
10,000 units
Resets at 00:00 UTC. Independent of the per-minute bucket: you can be well under the daily cap and still get a per-minute 429 during a burst.
These are the published defaults. Support can set a higher or lower per-account override, visible on your developer dashboard. The numbers above are what a new Pro account gets.
Cost per operation
Every call is billed in units against both budgets above, whichever surface (REST or MCP) you call it through. GET /v1/usage is free.
| Operation | REST path | Units |
|---|---|---|
| lookup_property | /v1/lookup | 10 |
| search_listings | /v1/search | 2 |
| get_comps | /v1/comps | 5 |
| get_rental_estimates | /v1/rentals | 5 |
| get_mortgage_rates | /v1/rates | 1 |
| get_listing_updates | /v1/updates | 1 |
Per-account overrides
Support can raise or lower your per-minute and per-day ceilings. Support can also suspend Pro API access entirely, independent of your subscription tier. A suspended account gets a 403 forbidden on every call (API and MCP) until support lifts it. This is separate from, and takes precedence over, the ordinary Premium and MCP entitlement check.
Permanent-refusal semantics
A call whose cost exceeds your entire ceiling (support sets your per-minute limit below an operation's unit cost) can never succeed by waiting. That is reported as 429 rate_limited the same as an ordinary transient limit, but the message says so explicitly ("exceeds your … limit of …"); retrying it will never help, only a higher limit will. An ordinary transient 429 (you are temporarily out of budget, not permanently over the ceiling) is worth retrying after Retry-After.
Guidance for 429 and Retry-After
- Read the
Retry-Afterheader (seconds) on a 429 and wait at least that long before retrying the same call. - Read
meta.minute_remainingandmeta.daily_remainingon every successful response (or call the freeGET /v1/usage) to pace bursts before you hit the limit, rather than reacting only to 429s. - Back off exponentially on repeated 429s from the same account. Hammering the endpoint immediately after a refusal only delays your own recovery.
Full error-envelope shape and retry guidance for other status codes: REST API guide.