Rate limits

Every server-side checkRateLimit({ key: ... }) entry in the platform.

On a 429 the response carries Retry-After (seconds) and the `Retry-After` header value.

SurfaceLimitKey prefixApplies to
MFA TOTP challenge (sign-in)10 / 5mmfa-challenge:Per source IP.
MFA recovery code (sign-in)5 / 5mmfa-recovery-challenge:Per source IP — tighter than TOTP since recovery codes are high-value.
WebAuthn challenge (sign-in)10 / 5mwebauthn-challenge:Per source IP.
WebAuthn register (enrollment)5 / 1hwebauthn-register:Per source IP — 5 enrollment attempts per hour.
WebAuthn autofill options (sign-in)30 / 5mwebauthn-autofill-options:Per source IP — generous so tab switches / reloads on the login page don't trip the limit.
WebAuthn autofill verify (sign-in)10 / 5mwebauthn-autofill-verify:Per source IP — matches /webauthn-challenge:; defends against credential-id enumeration.
Step-up challenge10 / 5mstep-up-challenge:Per (tenantUserId, source IP).
Step-up WebAuthn verify10 / 5mstep-up-verify:Per (tenantUserId, source IP).
Step-up TOTP verify10 / 5mstep-up-totp:Per (tenantUserId, source IP).
SAML SP-initiated login20 / 1msaml-login:Per source IP — defeats AuthnRequest flooding.
SAML ACS (assertion consumer)20 / 1msaml-acs:Per source IP.
Developer-portal webhook verifier20 / 1mdev-webhook-verify:Per source IP — defends against using the endpoint as a free HMAC oracle.
Audit-prune manual run5 / 5maudit-prune-runnow:Per tenant — defeats button-smashing to brute-force evidence destruction.