Self-serve register (email + password)
Public. Responses are byte-identical regardless of whether the email already exists (enumeration-safe): a valid request always returns 202 pendingVerification. The only non-202 branches are 400 (bad format), 429 (rate limit), and 503 (system email globally undeliverable — fail-closed, no account created). Password min length 8.
Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
email
required
string format: email
password
required
string
Examplegenerated
{ "email": "hello@example.com", "password": "example"}Responses
Section titled “Responses”Verification pending (uniform response)
Media typeapplication/json
object
ok
boolean
pendingVerification
boolean
Invalid email or password format
Media typeapplication/json
object
error
required
Human-readable error message.
string
message
string
Examplegenerated
{ "error": "example", "message": "example"}Rate limited
Media typeapplication/json
object
error
required
string
retryAfterSeconds
integer
Examplegenerated
{ "error": "example", "retryAfterSeconds": 1}Self-serve signup unavailable (system email undeliverable)
Media typeapplication/json
object
ok
boolean
error
string
Example
{ "ok": false, "error": "self_serve_signup_unavailable"}