Rate limits and quotas

Requests per minute and per month for each plan, the X-RateLimit headers, how usage is counted, and the hard limits of every request.

Limits per plan

PlanRequests per minuteRequests per monthActive API keys
Free6010,0002
Premium300200,00010
Expert1,0001,000,00050

The plan that applies is the one currently in force: an expired subscription falls back to the Free limits, and the keys already issued keep working. The monthly allowance resets on the 1st of each month at 00:00 UTC.

The same allowance is shared with the MCP server: tool calls count against the workspace quota too.

Headers

Every authenticated response carries six headers, refusals included (400, 404, 429), so that you can slow down before you hit a limit:

X-RateLimit-Limit: 300              requests allowed per minute
X-RateLimit-Remaining: 287          left in the current minute
X-RateLimit-Reset: 1754995200       when the minute window resets (Unix seconds)
X-RateLimit-Quota: 200000           requests allowed this month
X-RateLimit-Quota-Remaining: 199000 left this month
X-RateLimit-Quota-Reset: 1756684800 first day of next month, 00:00 UTC (Unix seconds)

They are absent from 401 responses: the key is resolved before the counters are read.

Two different 429s

CodeMeaningWhat to do
RATE_LIMIT_EXCEEDEDToo many requests this minute.Wait the number of seconds in Retry-After. details.resetAt says when the window resets.
QUOTA_EXCEEDEDThe monthly allowance is used up.Waiting will not help before the 1st of next month (UTC): upgrade the plan. details.used and details.quota give the numbers.

An exhausted API quota only blocks the API. The Maylee app and its real-time updates keep working.

How usage is counted

  • One request costs one unit.
  • Bulk operations cost one unit per email processed: a POST /emails/bulk on 200 emails costs 200 units.
  • Usage is counted when the request is accepted, not when it completes.
  • A replayed idempotent request costs the same as the original.

Hard limits

These values are enforced server-side, on every plan.

LimitValue
Emails per bulk operation500
limit per page200 (default 50)
Filter tree depth5 levels
Conditions per filter tree50
Length of a condition value500 characters
Raw filters parameter8 KB
Search term2 to 200 characters
Request execution time10 seconds
JSON request body256 KB

A query that runs longer than 10 seconds is cancelled on the database side and returns 408 QUERY_TIMEOUT: narrow the filters, lower limit, or target a single mailbox. A body above 256 KB returns 413 PAYLOAD_TOO_LARGE.

On this page