1. Docs
  2. API Reference
  3. Register a new user

Register a new user

POST/v1/auth/register

Public 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)

max length 128

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

  • dataMessageResponseDto*

Returned object

Request
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"
  }'
Response
{
  "data": {
    "message": "string"
  }
}
Related endpoints
POSTCreate an additional Account for the authenticated admin (no new user)
GETReview the parked account-creation intent before resuming
POSTResume a deferred account creation parked at the register form
DELETEDismiss the parked account-creation intent without creating anything
POSTLook up invite details by token
POSTAccept an invite
POSTAuthenticate and receive tokens
POSTSelect an Account from a pre-auth session (multi-Account login)
POSTSwitch the active Application in an authenticated session
POSTRefresh access token
POSTLogout and revoke tokens
GETVerify email address
POSTResend verification email
POSTResend verification email by token
POSTRequest password reset
POSTReset password with token
POSTChange password (authenticated)
GETGet current user profile
GETGet current user avatar image
POSTUpload profile avatar
DELETERemove profile avatar
POSTRequest an email-address change
POSTConfirm an email-address change
GETGet current user permissions
GETList the Accounts the current user belongs to
GETList active sessions
DELETERevoke all sessions
DELETERevoke a specific session
Was this page helpful?

Tell us how we can improve this guide.