Create an account
- Scope
- id:accounts:register Admin-issued keys only.
Request bodyapplication/json
| Field | Type | Description |
|---|---|---|
| emailrequired | string, email | Login email. Stored lowercased.up to 254 characters |
| usernamerequired | string | Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$ |
| passwordrequired | string | Never stored or returned.10 to 256 characters |
| displayName | string | 1 to 80 characters |
| acceptTermsrequired | boolean | Must be true: the person has read and accepts the RSX Terms (https://legal.rsx.group/). The moment is recorded on the account.one of true |
Request body of register
- emailrequired
- Type
- string, email
- Description
- Login email. Stored lowercased.up to 254 characters
- usernamerequired
- Type
- string
- Description
- Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$
- passwordrequired
- Type
- string
- Description
- Never stored or returned.10 to 256 characters
- displayName
- Type
- string
- Description
- 1 to 80 characters
- acceptTermsrequired
- Type
- boolean
- Description
- Must be true: the person has read and accepts the RSX Terms (https://legal.rsx.group/). The moment is recorded on the account.one of true
Response 200Account created; access + refresh tokens issued
| Field | Type | Description |
|---|---|---|
| tokenTyperequired | string | one of "Bearer" |
| accessTokenrequired | string | Short-lived ES256 JWT. Verify it via the JWKS endpoint. |
| expiresInrequired | integer | Access-token TTL, seconds. |
| refreshTokenrequired | string | Opaque, long-lived, rotated on every use. Stored hashed server-side. |
| refreshExpiresInrequired | integer | |
| accountrequired | Account | |
| idrequired | string, uuid | |
| emailrequired | string, email | Login email. Stored lowercased.up to 254 characters |
| emailVerifiedrequired | boolean | |
| usernamerequired | string | Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$ |
| displayNamerequired | string, or null | 1 to 80 characters |
| statusrequired | string | one of "active", "suspended", "terminated" |
| statusReasonrequired | string, or null | Set when an admin suspends/terminates the account. |
| typerequired | string | one of "user", "developer" |
| staffRolerequired | string | one of "none", "staff", "admin" |
| scopesrequired | array of string | |
| avatarUrlrequired | string, uri, or null | Profile picture, 512px square WebP on rsxcdn.com. Null when none is set. |
| createdAtrequired | string, date-time | |
| updatedAtrequired | string, date-time | |
| emailVerificationToken | string | Dev-only: present when DEV_RETURN_TOKENS=1 (in production this is emailed). |
Response of register
- tokenTyperequired
- Type
- string
- Description
- one of "Bearer"
- accessTokenrequired
- Type
- string
- Description
- Short-lived ES256 JWT. Verify it via the JWKS endpoint.
- expiresInrequired
- Type
- integer
- Description
- Access-token TTL, seconds.
- refreshTokenrequired
- Type
- string
- Description
- Opaque, long-lived, rotated on every use. Stored hashed server-side.
- refreshExpiresInrequired
- Type
- integer
- Description
- accountrequired
- Type
- Account
- Description
- idrequired
- Type
- string, uuid
- Description
- emailrequired
- Type
- string, email
- Description
- Login email. Stored lowercased.up to 254 characters
- emailVerifiedrequired
- Type
- boolean
- Description
- usernamerequired
- Type
- string
- Description
- Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$
- displayNamerequired
- Type
- string, or null
- Description
- 1 to 80 characters
- statusrequired
- Type
- string
- Description
- one of "active", "suspended", "terminated"
- statusReasonrequired
- Type
- string, or null
- Description
- Set when an admin suspends/terminates the account.
- typerequired
- Type
- string
- Description
- one of "user", "developer"
- staffRolerequired
- Type
- string
- Description
- one of "none", "staff", "admin"
- scopesrequired
- Type
- array of string
- Description
- avatarUrlrequired
- Type
- string, uri, or null
- Description
- Profile picture, 512px square WebP on rsxcdn.com. Null when none is set.
- createdAtrequired
- Type
- string, date-time
- Description
- updatedAtrequired
- Type
- string, date-time
- Description
- emailVerificationToken
- Type
- string
- Description
- Dev-only: present when DEV_RETURN_TOKENS=1 (in production this is emailed).
Example
curl -X POST https://api.rsx.group/id/v1/accounts/register \
-H "Authorization: Bearer rsx_live_..." \
-H "Content-Type: application/json" \
-d '{
"email": "ada@example.com",
"username": "ada_lovelace",
"password": "correct horse battery staple",
"displayName": "Ada Lovelace",
"acceptTerms": true
}'{
"tokenType": "Bearer",
"accessToken": "eyJhbGciOiJFUzI1NiIsImtpZCI6Ii4uLiJ9...",
"expiresIn": 900,
"refreshToken": "rsx_rt_9f8e7d...",
"refreshExpiresIn": 2592000,
"account": {
"id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
"email": "ada@example.com",
"emailVerified": false,
"username": "ada_lovelace",
"displayName": "Ada Lovelace",
"status": "active",
"statusReason": null,
"type": "user",
"staffRole": "none",
"scopes": [],
"avatarUrl": "https://rsxcdn.com/K3nZ9qLm2P.webp",
"createdAt": "2026-07-27T12:00:00Z",
"updatedAt": "2026-07-27T12:00:00Z"
},
"emailVerificationToken": "string"
}