AUTH4D-344 Passkey sign-up limits
No request or response shapes change. Passkey sign-up (registration without a proof, in an
authorization, device sign-in or guest-linking flow; see AUTH4D-143 (repository file docs/api-spec/auth4d-143.md) and
AUTH4D-214 (repository file docs/api-spec/auth4d-214.md)) now has its own limits on top of the 20 ceremonies per browser flow.
Enrolling a passkey on an existing account is not affected.
| Limit | Spent by | Default |
|---|---|---|
| Sign-up options per application and client IP | registration/options |
20/hour |
| Accounts created per application and client IP | registration/verify |
10/hour |
| Accounts created per project (all IPs) | registration/verify |
500/hour |
| Accounts created per browser flow | registration/verify |
1 |
- The client IP is the one every per-IP limit uses (AUTH4D-335 (repository file
docs/api-spec/auth4d-335.md)): IPv4 as is, IPv6 grouped by /64. It is stored only as a keyed hash. registration/verifyspends the client IP’s budget before the project’s, so one limited address does not use up the project ceiling. Both are spent after the WebAuthn checks pass and before the pre-registration hook and the account insert.- An exhausted budget returns
429 slow_down. - A second sign-up in the same browser flow returns
403 access_denied, including one that uses options issued before the first account was created. The flow’s sign-up is used up once the account creation starts, even if it then fails. - When the client IP is unknown (or the deployment has no privacy key), both sign-up endpoints
return
503 temporarily_unavailableand nothing is created.
Source: docs/api-spec/auth4d-344.md