Skip to content
Docs

Rate limits

Each rate limit is <burst>,<every>: that many requests at once, then one more every <every> (a duration: 500ms, 5s, 6m, 1h). RATE_LIMIT_SIGNIN_IP=20,5s allows 20 sign-in requests from one address at once, then one every 5 seconds. Limits are per client address unless the description says otherwise.

Security-sensitive limits (sign-in, visitor sign-in, the connector’s OAuth) can be made stricter freely but at most four times looser than the default; anything looser stops the server at startup. The others may be set to anything, with a startup warning past ten times looser.

Burst must be 1–100,000 and <every> 1ms–24h, within any stricter security ceiling. Security-sensitive limits also include email codes, site passcode tries and spam-checked posts. Their burst may be at most four times the default and <every> at least a quarter of it; startup errors name the ceiling. Other limits log WARNING beyond ten times looser. Unknown RATE_LIMIT_* names are ignored with a startup WARNING.

RATE_LIMIT_SITE_OPS also covers account deletion; RATE_LIMIT_EXPORT includes link downloads. RATE_LIMIT_EVENT_APPLY_USER permits five applications an hour by default. Visitor OAuth limits cover both starts and callbacks. Passcode limits trigger the site lockout periods.

Setting Default Allowed What it does
RATE_LIMIT_SIGNIN_IP 20,5s stricter freely; loosest 80,1.25s Sign-in and email-change requests per address. Security-sensitive.
RATE_LIMIT_SIGNIN_EMAIL 5,50s stricter freely; loosest 20,12.5s Sign-in codes sent to one email address. Security-sensitive.
RATE_LIMIT_VISITOR_OAUTH 20,5s stricter freely; loosest 80,1.25s Visitor Google sign-ins per address. Security-sensitive.
RATE_LIMIT_VISITOR_AUTH 20,5s stricter freely; loosest 80,1.25s Visitor email-code sign-ins per address. Security-sensitive.
RATE_LIMIT_VISITOR 20,5s stricter freely; loosest 80,1.25s Finishing a visitor sign-in and signing out, per address. Security-sensitive.
RATE_LIMIT_HANDLE_CHECK 30,2s any (warns past 10× looser) Address availability checks while someone types a handle (GET /v1/handles/check), per address.
RATE_LIMIT_OAUTH_REGISTER 10,6m stricter freely; loosest 40,1m30s AI app registrations on the connector, per address. Security-sensitive.
RATE_LIMIT_OAUTH_AUTHORIZE 30,2s stricter freely; loosest 120,500ms AI app sign-in requests on the connector, per address. Security-sensitive.
RATE_LIMIT_OAUTH_TOKEN 30,2s stricter freely; loosest 120,500ms AI app token requests on the connector, per address. Security-sensitive.
RATE_LIMIT_UPLOAD 30,10s any (warns past 10× looser) Uploads and deploys per client.
RATE_LIMIT_SITE_OPS 30,2s any (warns past 10× looser) Deleting, changing and restoring sites, and admin sign-in tries, per address.
RATE_LIMIT_EXPORT 10,10s any (warns past 10× looser) Site and account downloads per address.
RATE_LIMIT_ANALYTICS 30,2s any (warns past 10× looser) Top pages and referring domains reads, per address.
RATE_LIMIT_PASSCODE_IP 5,3m stricter freely; loosest 20,45s Wrong passcode tries on one site per address. Security-sensitive.
RATE_LIMIT_PASSCODE_SITE 60,1m stricter freely; loosest 240,15s Wrong passcode tries on one site from everyone together. Security-sensitive.
RATE_LIMIT_SPAM_CHECKED_IP 10,30s stricter freely; loosest 40,7.5s Posts on comments-preset resources (anyone posts after the Turnstile spam check), per address across every site. Security-sensitive.
RATE_LIMIT_SPAM_CHECKED_SITE 60,10s stricter freely; loosest 240,2.5s Posts on comments-preset resources, per site from everyone together. Security-sensitive.
RATE_LIMIT_STATE 60,1s any (warns past 10× looser) Saved-data and list writes per client.
RATE_LIMIT_TLS_ASK 60,100ms any (warns past 10× looser) Certificate checks (/internal/tls-ask), per address.
RATE_LIMIT_DOMAIN_CHECK 10,10s any (warns past 10× looser) “Check again” on a domain, per address.
RATE_LIMIT_DOMAIN_CHECK_USER 3,30s any (warns past 10× looser) “Check again” on a domain, per account.
RATE_LIMIT_ADDRESS_FAMILY_CHECK 10,10s any (warns past 10× looser) “Check again” on an address family, per address.
RATE_LIMIT_ADDRESS_FAMILY_CHECK_USER 3,30s any (warns past 10× looser) “Check again” on an address family, per account.
RATE_LIMIT_EVENT_CODES_IP 120,1s any (warns past 10× looser) Hosted events: join, judge and team-code lookups and joins, per network address (roomy: a whole venue can share one address).
RATE_LIMIT_EVENT_CODES_USER 20,3s any (warns past 10× looser) Hosted events: join, judge and team-code joins and lookups, per account.
RATE_LIMIT_EVENT_NAMES_USER 60,1s any (warns past 10× looser) Hosted events: event address checks while someone types one, per account.
RATE_LIMIT_EVENT_APPLY_IP 30,2m any (warns past 10× looser) Hosted events: applications to an event without a join link, per network address.
RATE_LIMIT_EVENT_APPLY_USER 5,12m any (warns past 10× looser) Hosted events: applications to an event without a join link, per account.
RATE_LIMIT_STORAGE_IP 120,100ms any (warns past 10× looser) Visitor storage writes per site and client IP; owner credentials are exempt.
RATE_LIMIT_STORAGE_VISITOR 60,200ms any (warns past 10× looser) Storage writes per site and signed-in visitor; limits add-only flooding.

Recipes

A busy event on one box (many people behind one venue address):

RATE_LIMIT_SIGNIN_IP=80,1250ms
RATE_LIMIT_UPLOAD=120,2s
RATE_LIMIT_STATE=240,250ms