Skip to content

Quotas and limits

View as Markdown

Your plan sets several limits at once. This page explains what each one means, how to read your current numbers, and how a script or an AI assistant checks them before doing work that would otherwise be refused.

Limit What it means Where it’s enforced
Monitor count The maximum number of enabled monitors your plan allows. Creating a new monitor beyond the cap is refused (or, when the request opts into it, lands the new monitor disabled instead); monitors you already have keep running. 403 package_limit (API) / an in-app validation message
Check interval floor The shortest interval a monitor on your plan can use. Some monitor types (certificate expiry, domain expiry, DNSBL: every 6 hours; Web Risk: every 12 hours) have their own fixed cadence regardless of plan. 422 invalid_interval / 403 package_interval_conflict
Contacts The maximum number of alert contacts, and a per-contact-type sub-cap (for example voice-call contacts may be capped lower, or unavailable, on some plans). 403 package_limit
Reports Which report frequencies (daily/weekly/monthly/quarterly/yearly) are available, if any. refused subscription write
Status pages and subscribers Each has its own plan-dependent cap. in-app validation
Assertion rules per monitor How many validation rules (AssertRuleLang) a single HTTP or API monitor can carry. 422 on save
Bulk operation size How many items a single bulk create/update/delete request may touch - published per account, not a flat constant. 422 too_many_items

See Plans and packages compared for how these scale across tiers, and Upgrade or downgrade for what happens if a change puts you over a limit.

Open Billing -> Packages to see:

  • Your plan’s limits.
  • How much of each you’re currently using.
  • Whether you’re at or near a cap.

GET /account (MCP get_account) returns two blocks that answer “may I, and how much”:

  • usage.{monitor,contact,report,maintenance} - {used, allowed} per area; allowed: null means unlimited, never zero.
  • limits - the account’s allowed check intervals, alert-delay ladder, and the bulk-operation size caps (maxBulkItems, maxBulkSelection) your account may actually use (these can be smaller than the platform ceiling on a small plan).
  • flags.apiEnabled - whether the account’s plan and billing state allow API access at all.

GET /account/quota (MCP get_account_quota) is the API rate-limit view, separate from the resource limits above - call it first whenever another call answers 429 or a 403 you don’t understand:

{
"apiEnabled": true,
"pools": {
"account": { "limit": 6000, "used": 42, "remaining": 5958, "resetAt": 1758000000,
"quotas": [ { "scope": "monitor:write", "quota": "requests-per-minute", "limit": 60, "used": 3,
"remaining": 57, "resetAt": 1758000060, "windowSec": 60, "successOnly": false } ] },
"ic": { "limit": 100, "used": 5, "remaining": 95, "resetAt": 1758000000, "quotas": [ /* ... */ ] }
},
"scopes": [ { "scope": "monitor:read", "description": "..." } ]
}

Quota is per user, per pool - account covers everything except instant checks, and ic covers instant checks separately, each with its own tightest-binding window across possibly several configured windows (minute, day, month). Every metered API response also carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers, plus a RateLimit-Policy header naming the exact quota that applies to that call - you don’t have to call GET /account/quota just to read your remaining budget on a normal request.

  • A request over the rate limit gets 429 with a Retry-After header (and, on the anonymous/reference tier, rate_limited with the window length). This is separate from a 403 package_limit, which means your plan doesn’t include the resource or feature at all, not that you’re calling too fast.
  • usage.<area>.allowed: null means unlimited - never compare it to used as if it were a real number.
  • A token can carry its own self-imposed cap (tokenCap, tighter than the account limit) - GET /account/quota echoes it when present so a client can tell the two apart.