Register a new user
/v1/auth/registerPublic self-service signup for a platform admin. POST accepting email, password, first_name, last_name, account_name, and application_name; rate-limited to 5 per hour per IP. Always returns the same generic 201 — the outcome is delivered by email so the response never reveals whether the address is already registered or how it authenticates. For a brand-new email it parks a PendingRegistration and emails a 24-hour verification link — the real User, Account, owner AccountMember, and first Application are not created until the email is verified. If the email already belongs to a user the account-creation intent is stashed and the owner is emailed either a sign-in notice (password user) or a set-password link (SSO-only user); no duplicate is created, and the parked intent materializes only after the owner signs in and explicitly confirms the reviewed names. Passwords are checked against a breach list and argon2id-hashed on every path so response timing is uniform.
Request body
application/json
emailstring Required User email address
passwordstring Required Password (8-128 chars, must contain uppercase, lowercase, digit, and special character)
first_namestring Required User first name
last_namestring Required User last name
account_namestring Required Account name (the customer's billing tenant + identity directory). Slug is auto-derived.
application_namestring Required Name of the first Application inside the new Account. Slug is auto-derived. Customers can add more Applications later.
Responses
application/json
data *MessageResponseDto
Returned object
curl -X POST "https://auth.canopy-io.com/v1/auth/register" \ -H "Content-Type: application/json" \ -d '{ "email": "string", "password": "string", "first_name": "string", "last_name": "string", "account_name": "string", "application_name": "string" }'
{ "data": { "message": "string" } }
Tell us how we can improve this guide.