Skip to main content

Auth API

Manage end-user authentication within your tenant. All auth endpoints require a tenant API key (X-API-Key).

POST/api/v1/auth/register

Register User

Register a new end-user within your tenant. Returns a user object and JWT tokens.

Request Body

ParameterTypeRequiredDescription
emailstringYesUser email address
passwordstringNoPassword (omit for passwordless/magic-link flow)
usernamestringNoDisplay username
externalUserIdstringNoYour system's user ID for linking
displayNamestringNoDisplay name
metadataobjectNoCustom metadata (key-value pairs)

Example

bash
curl -X POST "https://api.puzzlesection.app/api/v1/auth/register" \
-H "X-API-Key: ps_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"username": "puzzlefan42",
"externalUserId": "your-user-id-123"
}'

Response 201

JSON
1{
2 "user": {
3 "id": "550e8400-e29b-41d4-a716-446655440000",
4 "email": "user@example.com",
5 "username": "puzzlefan42",
6 "tenantId": "tenant-uuid"
7 },
8 "userToken": "eyJhbGciOiJIUzI1NiIs...",
9 "refreshToken": "eyJhbGciOiJIUzI1NiIs...",
10 "isNewUser": true
11}
POST/api/v1/auth/login

Login

Authenticate an existing user with email and password.

ParameterTypeRequiredDescription
emailstringYesUser email
passwordstringYesUser password

Response 200

JSON
{
"user": { "id": "...", "email": "...", "username": "..." },
"userToken": "eyJ...",
"refreshToken": "eyJ..."
}
POST/api/v1/auth/refresh

Refresh Token

Exchange a refresh token for a new token pair.

ParameterTypeRequiredDescription
refreshTokenstringYesCurrent refresh token

Response 200

JSON
{
"userToken": "eyJ...",
"refreshToken": "eyJ..."
}
GET/api/v1/auth/me

Get Current User

Returns the authenticated user's profile. Requires both X-API-Key and X-User-Token.

Response 200

JSON
{
"user": {
"id": "550e8400-...",
"email": "user@example.com",
"username": "puzzlefan42",
"tenantId": "tenant-uuid"
},
"tokenBalance": 50
}
POST/api/v1/auth/logout

Logout

Invalidate the current user session. Requires both API key and user token.

Response 200

JSON
{ "message": "Logged out successfully" }

Auth Error Codes

CodeDescription
USER_EXISTSEmail already registered in this tenant
USERNAME_EXISTSUsername already taken
INVALID_CREDENTIALSWrong email or password
USER_DEACTIVATEDAccount has been deactivated
NO_PASSWORDUser registered without password (use magic link)
MAGIC_LINK_EXPIREDMagic link token has expired
MAGIC_LINK_USEDMagic link has already been used
TENANT_MISMATCHUser belongs to a different tenant