Skip to content
RSXDocs
RSX · API · Reference

id v1

Account and identity service: registration, login, sessions, and the platform's JWT issuer (JWKS).

Current
Base URL
https://api.rsx.group/id/v1
Self-grantable scopes
None. Every endpoint here needs a key issued by a platform admin.
Machine readable
openapi.json
01

accounts

16 operations under /id/v1/accounts.

POST/id/v1/accounts/register

Create an account

Scope
id:accounts:register Admin-issued keys only.

Request bodyapplication/json

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

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
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
}'
200 response
{
  "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"
}
POST/id/v1/accounts/verify-email

Confirm an email address

Scope
id:accounts:verify-email Admin-issued keys only.

Request bodyapplication/json

Request body of verifyEmail

  • tokenrequired
    Type
    string
    Description
    at least 1 character

Response 200Verified

Response of verifyEmail

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/verify-email \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "token": "string"
}'
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/accounts/request-verification

Request a new email-verification token

Scope
id:accounts:request-verification Admin-issued keys only.

Request bodyapplication/json

Request body of requestVerification

  • emailrequired
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters

Response 200Accepted

Response of requestVerification

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/request-verification \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "ada@example.com"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
POST/id/v1/accounts/request-password-reset

Request a password-reset token

Scope
id:accounts:request-password-reset Admin-issued keys only.

Request bodyapplication/json

Request body of requestPasswordReset

  • emailrequired
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters

Response 200Accepted

Response of requestPasswordReset

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/request-password-reset \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "ada@example.com"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
POST/id/v1/accounts/reset-password

Set a new password with a reset token

Scope
id:accounts:reset-password Admin-issued keys only.

Request bodyapplication/json

Request body of resetPassword

  • tokenrequired
    Type
    string
    Description
    at least 1 character
  • passwordrequired
    Type
    string
    Description
    Never stored or returned.10 to 256 characters

Response 200Password reset; all sessions revoked

Response of resetPassword

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/reset-password \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "token": "string",
  "password": "correct horse battery staple"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
GET/id/v1/accounts/me

Fetch the authenticated account

Scope
id:accounts:me Admin-issued keys only.

Response 200Account

Response of getMe

  • datarequired
    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

Example

curl
curl "https://api.rsx.group/id/v1/accounts/me" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/accounts/update

Update the authenticated account

Scope
id:accounts:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateMe

  • displayName
    Type
    string, or null
    Description
    1 to 80 characters
  • username
    Type
    string
    Description
    Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$
  • email
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters

Response 200Updated

Response of updateMe

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "displayName": "Ada Lovelace",
  "username": "ada_lovelace",
  "email": "ada@example.com"
}'
200 response
{
  "data": {
    "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"
}
POST/id/v1/accounts/change-password

Change the authenticated account's password

Scope
id:accounts:change-password Admin-issued keys only.

Request bodyapplication/json

Request body of changePassword

  • currentPasswordrequired
    Type
    string
    Description
    at least 1 character
  • newPasswordrequired
    Type
    string
    Description
    Never stored or returned.10 to 256 characters

Response 200Changed; other sessions revoked

Response of changePassword

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/change-password \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "currentPassword": "string",
  "newPassword": "correct horse battery staple"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
POST/id/v1/accounts/become-developer

Opt in to a developer account

Scope
id:accounts:become-developer Admin-issued keys only.

Request bodyapplication/json

Request body of becomeDeveloper

  • acceptTermsrequired
    Type
    boolean
    Description
    Must be true: explicit consent to the RSX Developer Terms.one of true

Response 200Now a developer account

Response of becomeDeveloper

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/become-developer \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "acceptTerms": true
}'
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/accounts/avatar/update

Set your profile picture

The body is the image (PNG, JPEG, GIF, WebP or AVIF, up to 10 MiB). It is stored on rsxcdn.com as a 512px square WebP, and the account's avatarUrl points at it.

Scope
id:accounts:avatar:update Admin-issued keys only.

Request bodyapplication/octet-stream

The raw bytes, as the body.

Response 200Updated

Response of updateAvatar

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/avatar/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/octet-stream" \
  --data-binary @file
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/accounts/avatar/remove

Remove your profile picture

Scope
id:accounts:avatar:remove Admin-issued keys only.

Response 200Removed

Response of removeAvatar

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/avatar/remove \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/accounts/links/roblox

Link a Roblox username (cosmetic, unverified)

Scope
id:accounts:links:roblox Admin-issued keys only.

Request bodyapplication/json

Request body of linkRoblox

  • usernamerequired
    Type
    string
    Description
    3 to 20 characters · matches ^[A-Za-z0-9_]+$

Response 200Linked

Response of linkRoblox

  • datarequired
    Type
    AccountLink
    Description
  • providerrequired
    Type
    string
    Description
    one of "github", "discord", "roblox"
  • externalIdrequired
    Type
    string
    Description
    The provider's stable user id.
  • externalHandlerequired
    Type
    string, or null
    Description
    Login / username, for display.
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
  • verifiedrequired
    Type
    boolean
    Description
    True when ownership was proven via the provider's OAuth flow.
  • createdAtrequired
    Type
    string, date-time
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/links/roblox \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "username": "builderman"
}'
200 response
{
  "data": {
    "provider": "github",
    "externalId": "1024025",
    "externalHandle": "octocat",
    "avatarUrl": "https://avatars.githubusercontent.com/u/1024025",
    "verified": true,
    "createdAt": "2026-10-10T12:00:00.000Z"
  }
}
POST/id/v1/accounts/links/unlink

Remove a connected account

Scope
id:accounts:links:unlink Admin-issued keys only.

Request bodyapplication/json

Request body of unlinkAccount

  • providerrequired
    Type
    string
    Description
    one of "github", "discord", "roblox"

Response 200Removed (idempotent)

Response of unlinkAccount

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/links/unlink \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "provider": "github"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
02

sessions

8 operations under /id/v1/sessions.

POST/id/v1/sessions/create

Log in (create a session)

Scope
id:sessions:create Admin-issued keys only.

Request bodyapplication/json

Login

Response 200Authenticated

Response of login

  • 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

Example

curl
curl -X POST https://api.rsx.group/id/v1/sessions/create \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "identifier": "ada@example.com",
  "password": "string",
  "clientId": "rsx_client_a1b2c3d4"
}'
200 response
{
  "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"
  }
}
POST/id/v1/sessions/challenge

Start a passkey sign-in

Returns WebAuthn request options for the browser. The assertion it produces is sent to sessions/create with the same clientId. With a clientId, the call must arrive over a service binding, as the form's must.

Scope
id:sessions:challenge Admin-issued keys only.

Request bodyapplication/json

Request body of createSignInChallenge

  • clientId
    Type
    string
    Description

Response 200Request options

Response of createSignInChallenge

  • datarequired
    Type
    PasskeyRequestOptions
    Description
  • challengerequired
    Type
    string
    Description
  • timeout
    Type
    integer
    Description
  • rpId
    Type
    string
    Description
  • allowCredentials
    Type
    array of object
    Description
  • idrequired
    Type
    string
    Description
  • typerequired
    Type
    string
    Description
  • transports
    Type
    array of string
    Description
  • userVerification
    Type
    string
    Description
    one of "required", "preferred", "discouraged"

Example

curl
curl -X POST https://api.rsx.group/id/v1/sessions/challenge \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "rsx_client_a1b2c3d4"
}'
200 response
{
  "data": {
    "challenge": "string",
    "timeout": 1,
    "rpId": "string",
    "allowCredentials": [
      {
        "id": "string",
        "type": "public-key",
        "transports": [
          "string"
        ]
      }
    ],
    "userVerification": "required"
  }
}
POST/id/v1/sessions/refresh

Exchange a refresh token for a new session

Scope
id:sessions:refresh Admin-issued keys only.

Request bodyapplication/json

Request body of refreshSession

  • refreshTokenrequired
    Type
    string
    Description
    at least 1 character

Response 200Rotated

Response of refreshSession

  • 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

Example

curl
curl -X POST https://api.rsx.group/id/v1/sessions/refresh \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "refreshToken": "string"
}'
200 response
{
  "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"
  }
}
POST/id/v1/sessions/exchange

Trade a first-party id_token for a platform session

Scope
id:sessions:exchange Admin-issued keys only.

Request bodyapplication/json

Request body of exchangeSession

  • idTokenrequired
    Type
    string
    Description
    The id_token from the token exchange.at least 1 character
  • clientIdrequired
    Type
    string
    Description

Response 200Authenticated

Response of exchangeSession

  • 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

Example

curl
curl -X POST https://api.rsx.group/id/v1/sessions/exchange \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "idToken": "string",
  "clientId": "rsx_client_a1b2c3d4"
}'
200 response
{
  "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"
  }
}
POST/id/v1/sessions/revoke

Log out (revoke a refresh token)

Scope
id:sessions:revoke Admin-issued keys only.

Request bodyapplication/json

Request body of revokeSession

  • refreshTokenrequired
    Type
    string
    Description
    at least 1 character

Response 200Revoked (idempotent)

Response of revokeSession

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/sessions/revoke \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "refreshToken": "string"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
GET/id/v1/sessions/list

List active sessions

Scope
id:sessions:list Admin-issued keys only.

Response 200Sessions

Response of listSessions

  • datarequired
    Type
    array of SessionInfo
    Description
  • idrequired
    Type
    string, uuid
    Description
  • userAgentrequired
    Type
    string, or null
    Description
  • iprequired
    Type
    string, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time
    Description
  • expiresAtrequired
    Type
    string, date-time
    Description
  • currentrequired
    Type
    boolean
    Description
    True for the session making this request.
  • clientIdrequired
    Type
    string, or null
    Description
    The application this session was created through. Null for a session started at id.rsx.group itself.

Example

curl
curl "https://api.rsx.group/id/v1/sessions/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "userAgent": "Mozilla/5.0 ...",
      "ip": "203.0.113.7",
      "createdAt": "2026-10-10T12:00:00.000Z",
      "lastUsedAt": "2026-10-10T12:00:00.000Z",
      "expiresAt": "2026-10-10T12:00:00.000Z",
      "current": true,
      "clientId": "rsx_client_a1b2c3d4"
    }
  ]
}
POST/id/v1/sessions/revoke-others

Revoke every session except the current one

Scope
id:sessions:revoke-others Admin-issued keys only.

Response 200Revoked

Response of revokeOtherSessions

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/sessions/revoke-others \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "accepted": true,
  "token": "string"
}
GET/id/v1/.well-known/jwks.json

JSON Web Key Set — public keys for RSX ID access tokens

Scope
id:.well-known:jwks.json Admin-issued keys only.

Response 200Public signing keys

Response of jwks

  • keysrequired
    Type
    array of object
    Description
  • ktyrequired
    Type
    string
    Description
  • crvrequired
    Type
    string
    Description
  • xrequired
    Type
    string
    Description
  • yrequired
    Type
    string
    Description
  • kidrequired
    Type
    string
    Description
  • userequired
    Type
    string
    Description
  • algrequired
    Type
    string
    Description

Example

curl
curl "https://api.rsx.group/id/v1/.well-known/jwks.json" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "keys": [
    {
      "kty": "EC",
      "crv": "P-256",
      "x": "string",
      "y": "string",
      "kid": "string",
      "use": "sig",
      "alg": "ES256"
    }
  ]
}
03

passkeys

5 operations under /id/v1/passkeys.

GET/id/v1/accounts/passkeys/list

List your passkeys

Scope
id:accounts:passkeys:list Admin-issued keys only.

Response 200Passkeys

Response of listPasskeys

  • datarequired
    Type
    array of Passkey
    Description
  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters
  • deviceTyperequired
    Type
    string
    Description
    multiDevice is a synced passkey (a password manager); singleDevice lives on one authenticator.one of "singleDevice", "multiDevice"
  • backedUprequired
    Type
    boolean
    Description
    True when the passkey is currently synced to a backup.
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time, or null
    Description

Example

curl
curl "https://api.rsx.group/id/v1/accounts/passkeys/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "name": "iCloud Keychain",
      "deviceType": "singleDevice",
      "backedUp": true,
      "createdAt": "2026-10-10T12:00:00.000Z",
      "lastUsedAt": "2026-10-10T12:00:00.000Z"
    }
  ]
}
POST/id/v1/accounts/passkeys/start

Begin adding a passkey

Checks the password (docs/specs/id-passkeys.md I3) and returns WebAuthn creation options. The browser's response goes to passkeys/add. Enrolment is accepted from id.rsx.group only.

Scope
id:accounts:passkeys:start Admin-issued keys only.

Request bodyapplication/json

Request body of startPasskey

  • passwordrequired
    Type
    string
    Description
    at least 1 character

Response 200Creation options

Response of startPasskey

  • datarequired
    Type
    PasskeyCreationOptions
    Description
  • challengerequired
    Type
    string
    Description
  • rprequired
    Type
    object
    Description
  • namerequired
    Type
    string
    Description
  • id
    Type
    string
    Description
  • userrequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • displayNamerequired
    Type
    string
    Description
  • pubKeyCredParamsrequired
    Type
    array of object
    Description
  • algrequired
    Type
    integer
    Description
  • typerequired
    Type
    string
    Description
  • timeout
    Type
    integer
    Description
  • excludeCredentials
    Type
    array of object
    Description
  • idrequired
    Type
    string
    Description
  • typerequired
    Type
    string
    Description
  • transports
    Type
    array of string
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/passkeys/start \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "password": "string"
}'
200 response
{
  "data": {
    "challenge": "string",
    "rp": {
      "name": "string",
      "id": "string"
    },
    "user": {
      "id": "string",
      "name": "string",
      "displayName": "string"
    },
    "pubKeyCredParams": [
      {
        "alg": 1,
        "type": "string"
      }
    ],
    "timeout": 1,
    "excludeCredentials": [
      {
        "id": "string",
        "type": "public-key",
        "transports": [
          "string"
        ]
      }
    ]
  }
}
POST/id/v1/accounts/passkeys/add

Finish adding a passkey

Scope
id:accounts:passkeys:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addPasskey

  • responserequired
    Type
    PasskeyAttestation
    Description
  • idrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • rawIdrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • typerequired
    Type
    string
    Description
    one of "public-key"
  • responserequired
    Type
    object
    Description
  • clientDataJSONrequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • attestationObjectrequired
    Type
    string
    Description
    up to 16384 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorData
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • transports
    Type
    array of string
    Description
    up to 8 items
  • publicKeyAlgorithm
    Type
    integer
    Description
  • publicKey
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorAttachment
    Type
    string
    Description
    one of "platform", "cross-platform"
  • clientExtensionResults
    Type
    map of any
    Description
    default {}
  • {key}
    Type
    any
    Description
  • name
    Type
    string
    Description
    1 to 64 characters

Response 200Added

Response of addPasskey

  • datarequired
    Type
    Passkey
    Description
  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters
  • deviceTyperequired
    Type
    string
    Description
    multiDevice is a synced passkey (a password manager); singleDevice lives on one authenticator.one of "singleDevice", "multiDevice"
  • backedUprequired
    Type
    boolean
    Description
    True when the passkey is currently synced to a backup.
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time, or null
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/passkeys/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "response": {
    "id": "string",
    "rawId": "string",
    "type": "public-key",
    "response": {
      "clientDataJSON": "string",
      "attestationObject": "string",
      "authenticatorData": "string",
      "transports": [
        "string"
      ],
      "publicKeyAlgorithm": 1,
      "publicKey": "string"
    },
    "authenticatorAttachment": "platform",
    "clientExtensionResults": {}
  },
  "name": "iCloud Keychain"
}'
200 response
{
  "data": {
    "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "name": "iCloud Keychain",
    "deviceType": "singleDevice",
    "backedUp": true,
    "createdAt": "2026-10-10T12:00:00.000Z",
    "lastUsedAt": "2026-10-10T12:00:00.000Z"
  }
}
POST/id/v1/accounts/passkeys/update

Rename a passkey

Scope
id:accounts:passkeys:update Admin-issued keys only.

Request bodyapplication/json

Request body of updatePasskey

  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters

Response 200Renamed

Response of updatePasskey

  • datarequired
    Type
    Passkey
    Description
  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters
  • deviceTyperequired
    Type
    string
    Description
    multiDevice is a synced passkey (a password manager); singleDevice lives on one authenticator.one of "singleDevice", "multiDevice"
  • backedUprequired
    Type
    boolean
    Description
    True when the passkey is currently synced to a backup.
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time, or null
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/passkeys/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "name": "iCloud Keychain"
}'
200 response
{
  "data": {
    "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "name": "iCloud Keychain",
    "deviceType": "singleDevice",
    "backedUp": true,
    "createdAt": "2026-10-10T12:00:00.000Z",
    "lastUsedAt": "2026-10-10T12:00:00.000Z"
  }
}
POST/id/v1/accounts/passkeys/remove

Remove a passkey

Scope
id:accounts:passkeys:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removePasskey

  • idrequired
    Type
    string, uuid
    Description

Response 200Removed

Response of removePasskey

  • datarequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/passkeys/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "id": "string"
  }
}
04

terms

2 operations under /id/v1/terms.

GET/id/v1/accounts/terms/get

Whether you have terms to accept

Scope
id:accounts:terms:get Admin-issued keys only.

Response 200Status

Response of getTermsStatus

  • datarequired
    Type
    TermsStatus
    Description
  • staterequired
    Type
    string
    Description
    current: nothing to accept. pending: a revision is scheduled and not yet accepted. required: the revision in force is not accepted.one of "current", "pending", "required"
  • revisionrequired
    Type
    TermsRevision
    Description

Example

curl
curl "https://api.rsx.group/id/v1/accounts/terms/get" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "state": "current",
    "revision": {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "effectiveAt": "2026-10-20T00:00:00.000Z",
      "url": "https://legal.rsx.group/",
      "summary": "The Content Policy gains an appeals timeline."
    }
  }
}
POST/id/v1/accounts/terms/accept

Accept a terms revision

Records the time you accepted it. Accepting a revision also accepts every earlier one. Idempotent.

Scope
id:accounts:terms:accept Admin-issued keys only.

Request bodyapplication/json

Request body of acceptTerms

  • revisionIdrequired
    Type
    string, uuid
    Description

Response 200Accepted

Response of acceptTerms

  • datarequired
    Type
    TermsStatus
    Description
  • staterequired
    Type
    string
    Description
    current: nothing to accept. pending: a revision is scheduled and not yet accepted. required: the revision in force is not accepted.one of "current", "pending", "required"
  • revisionrequired
    Type
    TermsRevision
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/accounts/terms/accept \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "revisionId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "state": "current",
    "revision": {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "effectiveAt": "2026-10-20T00:00:00.000Z",
      "url": "https://legal.rsx.group/",
      "summary": "The Content Policy gains an appeals timeline."
    }
  }
}
05

admin

18 operations under /id/v1/admin.

GET/id/v1/admin/accounts/list

List accounts (admin)

Scope
id:admin:accounts:list Admin-issued keys only.

Query parameters

Query parameters of adminListAccounts

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 50
  • q
    Type
    string
    Description
    Email or handle prefix search.

Response 200Accounts

Response of adminListAccounts

  • datarequired
    Type
    array of 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
  • metarequired
    Type
    object
    Description
  • cursorrequired
    Type
    string, or null
    Description

Example

curl
curl "https://api.rsx.group/id/v1/admin/accounts/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "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"
    }
  ],
  "meta": {
    "cursor": "string"
  }
}
GET/id/v1/admin/accounts/get

Fetch one account (admin)

Scope
id:admin:accounts:get Admin-issued keys only.

Query parameters

Query parameters of adminGetAccount

  • idrequired
    Type
    string, uuid
    Description

Response 200Account

Response of adminGetAccount

  • datarequired
    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

Example

curl
curl "https://api.rsx.group/id/v1/admin/accounts/get?id=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/admin/accounts/suspend

Suspend an account (temporary block)

Scope
id:admin:accounts:suspend Admin-issued keys only.

Request bodyapplication/json

Request body of adminSuspendAccount

  • idrequired
    Type
    string, uuid
    Description
  • reason
    Type
    string
    Description
    up to 500 characters

Response 200Suspended

Response of adminSuspendAccount

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/suspend \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "reason": "Spam reports under review."
}'
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/admin/accounts/reinstate

Reinstate a suspended/terminated account

Scope
id:admin:accounts:reinstate Admin-issued keys only.

Request bodyapplication/json

Request body of adminReinstateAccount

  • idrequired
    Type
    string, uuid
    Description

Response 200Reinstated

Response of adminReinstateAccount

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/reinstate \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/admin/accounts/terminate

Terminate an account (permanent block)

Scope
id:admin:accounts:terminate Admin-issued keys only.

Request bodyapplication/json

Request body of adminTerminateAccount

  • idrequired
    Type
    string, uuid
    Description
  • reason
    Type
    string
    Description
    up to 500 characters

Response 200Terminated

Response of adminTerminateAccount

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/terminate \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "reason": "Repeated ToS violations."
}'
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/admin/accounts/avatar/remove

Remove an account's profile picture (admin)

Moderation (docs/specs/id-avatars.md §6). Clears the picture and removes its CDN object; the person can set another.

Scope
id:admin:accounts:avatar:remove Admin-issued keys only.

Request bodyapplication/json

Request body of adminRemoveAvatar

  • idrequired
    Type
    string, uuid
    Description

Response 200Removed

Response of adminRemoveAvatar

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/avatar/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "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"
  }
}
GET/id/v1/admin/passkeys/list

List an account's passkeys (admin)

Scope
id:admin:passkeys:list Admin-issued keys only.

Query parameters

Query parameters of adminListPasskeys

  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Passkeys

Response of adminListPasskeys

  • datarequired
    Type
    array of Passkey
    Description
  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters
  • deviceTyperequired
    Type
    string
    Description
    multiDevice is a synced passkey (a password manager); singleDevice lives on one authenticator.one of "singleDevice", "multiDevice"
  • backedUprequired
    Type
    boolean
    Description
    True when the passkey is currently synced to a backup.
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time, or null
    Description

Example

curl
curl "https://api.rsx.group/id/v1/admin/passkeys/list?accountId=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "name": "iCloud Keychain",
      "deviceType": "singleDevice",
      "backedUp": true,
      "createdAt": "2026-10-10T12:00:00.000Z",
      "lastUsedAt": "2026-10-10T12:00:00.000Z"
    }
  ]
}
GET/id/v1/admin/terms/list

List terms revisions (admin)

Scope
id:admin:terms:list Admin-issued keys only.

Response 200Revisions, oldest first

Response of adminListTermsRevisions

  • datarequired
    Type
    array of TermsRevisionAdmin
    Description
  • idrequired
    Type
    string, uuid
    Description
  • effectiveAtrequired
    Type
    string, date-time
    Description
  • urlrequired
    Type
    string, uri
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • staterequired
    Type
    string
    Description
    one of "scheduled", "in_force", "superseded", "withdrawn"
  • publishedAtrequired
    Type
    string, date-time
    Description
  • publishedByrequired
    Type
    string
    Description
  • withdrawnAtrequired
    Type
    string, date-time, or null
    Description
  • withdrawnByrequired
    Type
    string, or null
    Description
  • acceptedCountrequired
    Type
    integer
    Description
    at least 0

Example

curl
curl "https://api.rsx.group/id/v1/admin/terms/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "effectiveAt": "2026-10-20T00:00:00.000Z",
      "url": "https://legal.rsx.group/",
      "summary": "The Content Policy gains an appeals timeline.",
      "state": "scheduled",
      "publishedAt": "2026-10-10T12:00:00.000Z",
      "publishedBy": "string",
      "withdrawnAt": "2026-10-10T12:00:00.000Z",
      "withdrawnBy": "string",
      "acceptedCount": 1
    }
  ]
}
POST/id/v1/admin/terms/add

Publish a terms revision (admin)

Notice of a material change to the RSX Terms. The effective date must be at least 30 days away, and only one revision may be scheduled at a time.

Scope
id:admin:terms:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of adminPublishTermsRevision

  • effectiveDaterequired
    Type
    string
    Description
    Takes effect at 00:00 UTC on this date.matches ^\d{4}-\d{2}-\d{2}$
  • urlrequired
    Type
    string, uri
    Description
  • summary
    Type
    string
    Description
    One line on what changed, shown in the notice.1 to 280 characters

Response 200Published

Response of adminPublishTermsRevision

  • datarequired
    Type
    TermsRevisionAdmin
    Description
  • idrequired
    Type
    string, uuid
    Description
  • effectiveAtrequired
    Type
    string, date-time
    Description
  • urlrequired
    Type
    string, uri
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • staterequired
    Type
    string
    Description
    one of "scheduled", "in_force", "superseded", "withdrawn"
  • publishedAtrequired
    Type
    string, date-time
    Description
  • publishedByrequired
    Type
    string
    Description
  • withdrawnAtrequired
    Type
    string, date-time, or null
    Description
  • withdrawnByrequired
    Type
    string, or null
    Description
  • acceptedCountrequired
    Type
    integer
    Description
    at least 0

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/terms/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "effectiveDate": "2026-10-20",
  "url": "https://legal.rsx.group/",
  "summary": "string"
}'
200 response
{
  "data": {
    "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "effectiveAt": "2026-10-20T00:00:00.000Z",
    "url": "https://legal.rsx.group/",
    "summary": "The Content Policy gains an appeals timeline.",
    "state": "scheduled",
    "publishedAt": "2026-10-10T12:00:00.000Z",
    "publishedBy": "string",
    "withdrawnAt": "2026-10-10T12:00:00.000Z",
    "withdrawnBy": "string",
    "acceptedCount": 1
  }
}
POST/id/v1/admin/terms/remove

Withdraw a scheduled terms revision (admin)

Only before its effective date. A revision in force is part of the record and cannot be withdrawn.

Scope
id:admin:terms:remove Admin-issued keys only.

Request bodyapplication/json

Request body of adminWithdrawTermsRevision

  • idrequired
    Type
    string, uuid
    Description

Response 200Withdrawn

Response of adminWithdrawTermsRevision

  • datarequired
    Type
    TermsRevisionAdmin
    Description
  • idrequired
    Type
    string, uuid
    Description
  • effectiveAtrequired
    Type
    string, date-time
    Description
  • urlrequired
    Type
    string, uri
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • staterequired
    Type
    string
    Description
    one of "scheduled", "in_force", "superseded", "withdrawn"
  • publishedAtrequired
    Type
    string, date-time
    Description
  • publishedByrequired
    Type
    string
    Description
  • withdrawnAtrequired
    Type
    string, date-time, or null
    Description
  • withdrawnByrequired
    Type
    string, or null
    Description
  • acceptedCountrequired
    Type
    integer
    Description
    at least 0

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/terms/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "effectiveAt": "2026-10-20T00:00:00.000Z",
    "url": "https://legal.rsx.group/",
    "summary": "The Content Policy gains an appeals timeline.",
    "state": "scheduled",
    "publishedAt": "2026-10-10T12:00:00.000Z",
    "publishedBy": "string",
    "withdrawnAt": "2026-10-10T12:00:00.000Z",
    "withdrawnBy": "string",
    "acceptedCount": 1
  }
}
POST/id/v1/admin/passkeys/remove

Remove a passkey from an account (admin)

For a lost or compromised device when the person cannot sign in to remove it themselves.

Scope
id:admin:passkeys:remove Admin-issued keys only.

Request bodyapplication/json

Request body of adminRemovePasskey

  • idrequired
    Type
    string, uuid
    Description

Response 200Removed

Response of adminRemovePasskey

  • datarequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/passkeys/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "id": "string"
  }
}
POST/id/v1/admin/accounts/update

Edit account details (admin)

Scope
id:admin:accounts:update Admin-issued keys only.

Request bodyapplication/json

Request body of adminUpdateAccount

  • idrequired
    Type
    string, uuid
    Description
  • email
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters
  • username
    Type
    string
    Description
    Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$
  • displayName
    Type
    string, or null
    Description
    1 to 80 characters
  • emailVerified
    Type
    boolean
    Description
  • force
    Type
    boolean
    Description
    Bypass another user's handle reservation when reassigning a handle.

Response 200Updated

Response of adminUpdateAccount

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "email": "ada@example.com",
  "username": "ada_lovelace",
  "displayName": "Ada Lovelace",
  "emailVerified": true,
  "force": true
}'
200 response
{
  "data": {
    "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"
  }
}
POST/id/v1/admin/accounts/reset-password

Issue a password-reset token (admin recovery)

Scope
id:admin:accounts:reset-password Admin-issued keys only.

Request bodyapplication/json

Request body of adminResetPassword

  • idrequired
    Type
    string, uuid
    Description

Response 200Reset token issued

Response of adminResetPassword

  • datarequired
    Type
    AdminResetResult
    Description
  • accountrequired
    Type
    Account
    Description
  • resetTokenrequired
    Type
    string
    Description
    One-time password-reset token. Hand it to the account owner; it is not stored in the clear.
  • expiresAtrequired
    Type
    string, date-time
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/reset-password \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "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"
    },
    "resetToken": "string",
    "expiresAt": "2026-10-10T12:00:00.000Z"
  }
}
POST/id/v1/admin/accounts/create

Create an account (admin)

Scope
id:admin:accounts:create Admin-issued keys only.

Request bodyapplication/json

Request body of adminCreateAccount

  • 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}$
  • displayName
    Type
    string, or null
    Description
    1 to 80 characters
  • emailVerified
    Type
    boolean
    Description
  • type
    Type
    string
    Description
    one of "user", "developer"
  • staffRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopes
    Type
    array of string
    Description

Response 200Account created; the reset token is shown once for out-of-band handoff

Response of adminCreateAccount

  • datarequired
    Type
    AdminResetResult
    Description
  • accountrequired
    Type
    Account
    Description
  • resetTokenrequired
    Type
    string
    Description
    One-time password-reset token. Hand it to the account owner; it is not stored in the clear.
  • expiresAtrequired
    Type
    string, date-time
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/create \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "ada@example.com",
  "username": "ada_lovelace",
  "displayName": "Ada Lovelace",
  "emailVerified": false,
  "type": "user",
  "staffRole": "none",
  "scopes": [
    "id:accounts:manage"
  ]
}'
200 response
{
  "data": {
    "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"
    },
    "resetToken": "string",
    "expiresAt": "2026-10-10T12:00:00.000Z"
  }
}
GET/id/v1/admin/sessions/list

List an account's active sessions (admin)

Scope
id:admin:sessions:list Admin-issued keys only.

Query parameters

Query parameters of adminListSessions

  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Active sessions, most recently used first

Response of adminListSessions

  • datarequired
    Type
    array of SessionInfo
    Description
  • idrequired
    Type
    string, uuid
    Description
  • userAgentrequired
    Type
    string, or null
    Description
  • iprequired
    Type
    string, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time
    Description
  • expiresAtrequired
    Type
    string, date-time
    Description
  • currentrequired
    Type
    boolean
    Description
    True for the session making this request.
  • clientIdrequired
    Type
    string, or null
    Description
    The application this session was created through. Null for a session started at id.rsx.group itself.

Example

curl
curl "https://api.rsx.group/id/v1/admin/sessions/list?accountId=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "userAgent": "Mozilla/5.0 ...",
      "ip": "203.0.113.7",
      "createdAt": "2026-10-10T12:00:00.000Z",
      "lastUsedAt": "2026-10-10T12:00:00.000Z",
      "expiresAt": "2026-10-10T12:00:00.000Z",
      "current": true,
      "clientId": "rsx_client_a1b2c3d4"
    }
  ]
}
POST/id/v1/admin/sessions/revoke

Revoke one session (admin)

Scope
id:admin:sessions:revoke Admin-issued keys only.

Request bodyapplication/json

Request body of adminRevokeSession

  • sessionIdrequired
    Type
    string, uuid
    Description

Response 200Revoked (idempotent)

Response of adminRevokeSession

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/sessions/revoke \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "sessionId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "accepted": true,
  "token": "string"
}
POST/id/v1/admin/accounts/set-role

Assign an account's internal role / scopes (admin)

Scope
id:admin:accounts:set-role Admin-issued keys only.

Request bodyapplication/json

Request body of adminSetRole

  • idrequired
    Type
    string, uuid
    Description
  • staffRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopes
    Type
    array of string
    Description
  • type
    Type
    string
    Description
    one of "user", "developer"

Response 200Role updated

Response of adminSetRole

  • datarequired
    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

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/accounts/set-role \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "staffRole": "none",
  "scopes": [
    "id:accounts:manage"
  ],
  "type": "user"
}'
200 response
{
  "data": {
    "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"
  }
}
GET/id/v1/admin/audit/list

List the account audit trail (admin)

Scope
id:admin:audit:list Admin-issued keys only.

Query parameters

Query parameters of adminListAudit

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 50

Response 200Audit records, newest first

Response of adminListAudit

  • datarequired
    Type
    array of AccountAuditRecord
    Description
  • idrequired
    Type
    string, uuid
    Description
  • actorrequired
    Type
    string
    Description
    Admin email, 'user', or 'system'.
  • actionrequired
    Type
    string
    Description
    one of "register", "email_verified", "handle_changed", "email_changed", "password_changed", "password_reset", "suspended", "reinstated", "terminated", "admin_updated", "developer_enabled", "role_changed", "link_added", "link_removed", "admin_created", "session_revoked", "oidc_client_created", "oidc_client_revoked", "oidc_client_trust_changed", "oidc_client_updated", "oidc_client_secret_rotated", "oidc_client_restored", "oidc_client_policy_changed", "oidc_client_resource_changed", "oidc_client_delegation_changed", "signin_denied", "avatar_changed", "avatar_removed", "passkey_added", "passkey_renamed", "passkey_removed"
  • targetTyperequired
    Type
    string
    Description
    one of "account", "oidc_client"
  • targetIdrequired
    Type
    string
    Description
  • atrequired
    Type
    string, date-time
    Description
  • detailrequired
    Type
    string, or null
    Description
  • metarequired
    Type
    object
    Description
  • cursorrequired
    Type
    string, or null
    Description

Example

curl
curl "https://api.rsx.group/id/v1/admin/audit/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "actor": "admin@rsx.group",
      "action": "register",
      "targetType": "account",
      "targetId": "0198f0c2-1b3a-7c4d-9e5f-6a7b8c9d0e1f",
      "at": "2026-10-10T12:00:00.000Z",
      "detail": "old=ada new=ada_l"
    }
  ],
  "meta": {
    "cursor": "string"
  }
}
06

oidc

7 operations under /id/v1/oidc.

GET/id/v1/admin/oidc/clients

List OIDC clients (admin)

Scope
id:admin:oidc:clients Admin-issued keys only.

Response 200Clients

Response of listOidcClients

  • datarequired
    Type
    array of OidcClient
    Description
  • clientIdrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • redirectUrisrequired
    Type
    array of string, uri
    Description
  • trustedrequired
    Type
    boolean
    Description
    First-party: skips the consent screen and receives internal group/role claims.
  • policyrequired
    Type
    AccessPolicy
    Description
  • formSigninrequired
    Type
    boolean
    Description
    Whether this application may use the embedded sign-in form. First-party only, and the call must arrive over a service binding.
  • publicrequired
    Type
    boolean
    Description
    A public client: it holds no secret and proves itself with PKCE alone, which RSX ID then requires. Command-line and desktop clients, such as an MCP client, cannot keep a secret and are registered this way.
  • resourcerequired
    Type
    string, or null
    Description
    The RSX resource this application's access tokens are for. Null for an ordinary sign-in application, whose tokens carry the platform audience.one of "https://mcp.rsx.group/mcp"
  • delegationrequired
    Type
    array of string
    Description
    RSX resources whose tokens may be exchanged for a short-lived token minted for this application, on behalf of the same person and subject to this application's own access policy. Empty means no agent can act here.
  • createdAtrequired
    Type
    string, date-time
    Description
  • revokedrequired
    Type
    boolean
    Description

Example

curl
curl "https://api.rsx.group/id/v1/admin/oidc/clients" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "clientId": "rsx_client_a1b2c3d4",
      "name": "Cloudflare Access",
      "redirectUris": [
        "https://example.com/"
      ],
      "trusted": true,
      "policy": {
        "requiredRole": "staff",
        "requiredScopes": [
          "ai:access"
        ]
      },
      "formSignin": true,
      "public": true,
      "resource": "https://mcp.rsx.group/mcp",
      "delegation": [
        "https://mcp.rsx.group/mcp"
      ],
      "createdAt": "2026-10-10T12:00:00.000Z",
      "revoked": true
    }
  ]
}
POST/id/v1/admin/oidc/clients

Register an OIDC client (admin)

Scope
id:admin:oidc:clients Admin-issued keys only.

Request bodyapplication/json

Request body of createOidcClient

  • namerequired
    Type
    string
    Description
    1 to 120 characters
  • redirectUris
    Type
    array of string, uri
    Description
    default []
  • trusted
    Type
    boolean
    Description
  • requiredRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • requiredScopes
    Type
    array of string
    Description
  • formSignin
    Type
    boolean
    Description
  • public
    Type
    boolean
    Description
  • resource
    Type
    string
    Description
    one of "https://mcp.rsx.group/mcp"
  • delegation
    Type
    array of string
    Description

Response 200Client created — secret shown once

Response of createOidcClient

  • datarequired
    Type
    CreatedOidcClient
    Description
  • clientIdrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • redirectUrisrequired
    Type
    array of string, uri
    Description
  • trustedrequired
    Type
    boolean
    Description
    First-party: skips the consent screen and receives internal group/role claims.
  • policyrequired
    Type
    AccessPolicy
    Description
  • formSigninrequired
    Type
    boolean
    Description
    Whether this application may use the embedded sign-in form. First-party only, and the call must arrive over a service binding.
  • publicrequired
    Type
    boolean
    Description
    A public client: it holds no secret and proves itself with PKCE alone, which RSX ID then requires. Command-line and desktop clients, such as an MCP client, cannot keep a secret and are registered this way.
  • resourcerequired
    Type
    string, or null
    Description
    The RSX resource this application's access tokens are for. Null for an ordinary sign-in application, whose tokens carry the platform audience.one of "https://mcp.rsx.group/mcp"
  • delegationrequired
    Type
    array of string
    Description
    RSX resources whose tokens may be exchanged for a short-lived token minted for this application, on behalf of the same person and subject to this application's own access policy. Empty means no agent can act here.
  • createdAtrequired
    Type
    string, date-time
    Description
  • revokedrequired
    Type
    boolean
    Description
  • clientSecretrequired
    Type
    string, or null
    Description
    Shown once, at creation, and not retrievable. Null for a public client, which has none.

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/oidc/clients \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "redirectUris": [],
  "trusted": true,
  "requiredRole": "none",
  "requiredScopes": [
    "id:accounts:manage"
  ],
  "formSignin": true,
  "public": true,
  "resource": "https://mcp.rsx.group/mcp",
  "delegation": [
    "https://mcp.rsx.group/mcp"
  ]
}'
200 response
{
  "data": {
    "clientId": "rsx_client_a1b2c3d4",
    "name": "Cloudflare Access",
    "redirectUris": [
      "https://example.com/"
    ],
    "trusted": true,
    "policy": {
      "requiredRole": "staff",
      "requiredScopes": [
        "ai:access"
      ]
    },
    "formSignin": true,
    "public": true,
    "resource": "https://mcp.rsx.group/mcp",
    "delegation": [
      "https://mcp.rsx.group/mcp"
    ],
    "createdAt": "2026-10-10T12:00:00.000Z",
    "revoked": true,
    "clientSecret": "string"
  }
}
POST/id/v1/admin/oidc/clients/revoke

Revoke an OIDC client (admin)

Scope
id:admin:oidc:clients:revoke Admin-issued keys only.

Request bodyapplication/json

Request body of revokeOidcClient

  • clientIdrequired
    Type
    string
    Description

Response 200Revoked

Response of revokeOidcClient

  • datarequired
    Type
    object
    Description
  • revokedrequired
    Type
    boolean
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/oidc/clients/revoke \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "string"
}'
200 response
{
  "data": {
    "revoked": true
  }
}
POST/id/v1/admin/oidc/clients/update

Edit an OIDC client's name, redirect URIs, or trusted flag (admin)

Scope
id:admin:oidc:clients:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateOidcClient

  • clientIdrequired
    Type
    string
    Description
  • trusted
    Type
    boolean
    Description
  • name
    Type
    string
    Description
    1 to 120 characters
  • redirectUris
    Type
    array of string, uri
    Description
    at least 1 item
  • requiredRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • requiredScopes
    Type
    array of string
    Description
  • formSignin
    Type
    boolean
    Description
  • resource
    Type
    string, or null
    Description
    one of "https://mcp.rsx.group/mcp"
  • delegation
    Type
    array of string
    Description

Response 200Updated

Response of updateOidcClient

  • datarequired
    Type
    OidcClient
    Description
  • clientIdrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • redirectUrisrequired
    Type
    array of string, uri
    Description
  • trustedrequired
    Type
    boolean
    Description
    First-party: skips the consent screen and receives internal group/role claims.
  • policyrequired
    Type
    AccessPolicy
    Description
  • formSigninrequired
    Type
    boolean
    Description
    Whether this application may use the embedded sign-in form. First-party only, and the call must arrive over a service binding.
  • publicrequired
    Type
    boolean
    Description
    A public client: it holds no secret and proves itself with PKCE alone, which RSX ID then requires. Command-line and desktop clients, such as an MCP client, cannot keep a secret and are registered this way.
  • resourcerequired
    Type
    string, or null
    Description
    The RSX resource this application's access tokens are for. Null for an ordinary sign-in application, whose tokens carry the platform audience.one of "https://mcp.rsx.group/mcp"
  • delegationrequired
    Type
    array of string
    Description
    RSX resources whose tokens may be exchanged for a short-lived token minted for this application, on behalf of the same person and subject to this application's own access policy. Empty means no agent can act here.
  • createdAtrequired
    Type
    string, date-time
    Description
  • revokedrequired
    Type
    boolean
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/oidc/clients/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "string",
  "trusted": true,
  "name": "string",
  "redirectUris": [
    "https://example.com/"
  ],
  "requiredRole": "none",
  "requiredScopes": [
    "id:accounts:manage"
  ],
  "formSignin": true,
  "resource": "https://mcp.rsx.group/mcp",
  "delegation": [
    "https://mcp.rsx.group/mcp"
  ]
}'
200 response
{
  "data": {
    "clientId": "rsx_client_a1b2c3d4",
    "name": "Cloudflare Access",
    "redirectUris": [
      "https://example.com/"
    ],
    "trusted": true,
    "policy": {
      "requiredRole": "staff",
      "requiredScopes": [
        "ai:access"
      ]
    },
    "formSignin": true,
    "public": true,
    "resource": "https://mcp.rsx.group/mcp",
    "delegation": [
      "https://mcp.rsx.group/mcp"
    ],
    "createdAt": "2026-10-10T12:00:00.000Z",
    "revoked": true
  }
}
POST/id/v1/admin/oidc/clients/rotate-secret

Issue a new client secret (admin)

Scope
id:admin:oidc:clients:rotate-secret Admin-issued keys only.

Request bodyapplication/json

Request body of rotateOidcClientSecret

  • clientIdrequired
    Type
    string
    Description

Response 200New secret — shown exactly once

Response of rotateOidcClientSecret

  • datarequired
    Type
    RotatedOidcSecret
    Description
  • clientIdrequired
    Type
    string
    Description
  • clientSecretrequired
    Type
    string
    Description
    Shown once. The store keeps only a hash.

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/oidc/clients/rotate-secret \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "string"
}'
200 response
{
  "data": {
    "clientId": "string",
    "clientSecret": "string"
  }
}
POST/id/v1/admin/oidc/clients/restore

Un-revoke an OIDC client (admin)

Scope
id:admin:oidc:clients:restore Admin-issued keys only.

Request bodyapplication/json

Request body of restoreOidcClient

  • clientIdrequired
    Type
    string
    Description

Response 200Restored

Response of restoreOidcClient

  • datarequired
    Type
    OidcClient
    Description
  • clientIdrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • redirectUrisrequired
    Type
    array of string, uri
    Description
  • trustedrequired
    Type
    boolean
    Description
    First-party: skips the consent screen and receives internal group/role claims.
  • policyrequired
    Type
    AccessPolicy
    Description
  • formSigninrequired
    Type
    boolean
    Description
    Whether this application may use the embedded sign-in form. First-party only, and the call must arrive over a service binding.
  • publicrequired
    Type
    boolean
    Description
    A public client: it holds no secret and proves itself with PKCE alone, which RSX ID then requires. Command-line and desktop clients, such as an MCP client, cannot keep a secret and are registered this way.
  • resourcerequired
    Type
    string, or null
    Description
    The RSX resource this application's access tokens are for. Null for an ordinary sign-in application, whose tokens carry the platform audience.one of "https://mcp.rsx.group/mcp"
  • delegationrequired
    Type
    array of string
    Description
    RSX resources whose tokens may be exchanged for a short-lived token minted for this application, on behalf of the same person and subject to this application's own access policy. Empty means no agent can act here.
  • createdAtrequired
    Type
    string, date-time
    Description
  • revokedrequired
    Type
    boolean
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/admin/oidc/clients/restore \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "string"
}'
200 response
{
  "data": {
    "clientId": "rsx_client_a1b2c3d4",
    "name": "Cloudflare Access",
    "redirectUris": [
      "https://example.com/"
    ],
    "trusted": true,
    "policy": {
      "requiredRole": "staff",
      "requiredScopes": [
        "ai:access"
      ]
    },
    "formSignin": true,
    "public": true,
    "resource": "https://mcp.rsx.group/mcp",
    "delegation": [
      "https://mcp.rsx.group/mcp"
    ],
    "createdAt": "2026-10-10T12:00:00.000Z",
    "revoked": true
  }
}
POST/id/v1/oidc/authorize

Issue an OIDC authorization code

Scope
id:oidc:authorize Admin-issued keys only.

Request bodyapplication/json

Request body of oidcAuthorize

  • clientIdrequired
    Type
    string
    Description
  • redirectUrirequired
    Type
    string, uri
    Description
  • scoperequired
    Type
    string
    Description
  • claims
    Type
    string
    Description
  • state
    Type
    string
    Description
  • nonce
    Type
    string
    Description
  • codeChallenge
    Type
    string
    Description
  • codeChallengeMethod
    Type
    string
    Description
    one of "S256"
  • responseType
    Type
    string
    Description
  • resource
    Type
    string, uri
    Description
  • consent
    Type
    boolean
    Description

Response 200Redirect target, or consent required

Response of oidcAuthorize

  • redirectTo
    Type
    string
    Description
  • consentRequired
    Type
    boolean
    Description
  • client
    Type
    object
    Description
  • namerequired
    Type
    string
    Description
  • scopesrequired
    Type
    array of string
    Description
  • resource
    Type
    object
    Description
  • urirequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • labels
    Type
    map of string
    Description
  • {key}
    Type
    string
    Description
  • accessDenied
    Type
    boolean
    Description
  • denied
    Type
    object
    Description
  • reasonrequired
    Type
    string
    Description
    one of "insufficient-role", "insufficient-scope"
  • requiredRole
    Type
    string
    Description
  • missingScopes
    Type
    array of string
    Description
  • returnTo
    Type
    string
    Description

Example

curl
curl -X POST https://api.rsx.group/id/v1/oidc/authorize \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "string",
  "redirectUri": "https://example.com/",
  "scope": "openid email profile",
  "claims": "email preferred_username groups",
  "state": "string",
  "nonce": "string",
  "codeChallenge": "string",
  "codeChallengeMethod": "S256",
  "responseType": "string",
  "resource": "https://example.com/",
  "consent": true
}'
200 response
{
  "redirectTo": "string",
  "consentRequired": true,
  "client": {
    "name": "string",
    "scopes": [
      "string"
    ],
    "resource": {
      "uri": "string",
      "name": "string"
    },
    "labels": {
      "key": "string"
    }
  },
  "accessDenied": true,
  "denied": {
    "reason": "insufficient-role",
    "requiredRole": "string",
    "missingScopes": [
      "string"
    ],
    "returnTo": "string"
  }
}
07

identity

6 operations under /id/v1/identity.

GET/id/v1/identity/resolve

Resolve an external identity to an RSX ID account

Requires an API key with the id:identity:resolve scope.

Answers the whole authorization question in one call: who this external identity is on RSX, the link that proves it, and what the account may currently do. Only OAuth-verified providers resolve — a self-asserted handle is not proof of ownership.

A valid identifier that no account has connected is a 404 identity-not-linked, distinct from an unknown account and from a malformed request, so an unlinked user and a broken call never look alike. A linked but suspended or terminated account still resolves (200) with its status and with authorization.active: false — the consumer decides what to do about it.

Cacheable for 15 seconds, privately. Do not hold the result longer: it carries authority.

Scope
id:identity:resolve Admin-issued keys only.

Query parameters

Query parameters of resolveIdentity

  • providerrequired
    Type
    string
    Description
    one of "github", "discord"
  • externalIdrequired
    Type
    string
    Description
    The provider's stable user id.matches ^[A-Za-z0-9._-]{1,64}$

Response 200The identity is linked; account, link, and authorization returned

Response of resolveIdentity

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 401Missing, unrecognised, or revoked API key
  • 403The key is valid but lacks the scope this route requires
  • 404No RSX ID has this external identity linked and verified

Example

curl
curl "https://api.rsx.group/id/v1/identity/resolve?provider=github&externalId=216773161785950208" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "account": {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "username": "ada_lovelace",
      "displayName": "Ada Lovelace",
      "status": "active",
      "type": "user",
      "avatarUrl": "https://rsxcdn.com/K3nZ9qLm2P.webp"
    },
    "link": {
      "provider": "github",
      "externalId": "1024025",
      "externalHandle": "octocat",
      "avatarUrl": "https://avatars.githubusercontent.com/u/1024025",
      "verified": true,
      "createdAt": "2026-10-10T12:00:00.000Z"
    },
    "authorization": {
      "staffRole": "none",
      "scopes": [],
      "active": true,
      "admin": true,
      "staff": true,
      "effectiveScopes": []
    }
  }
}
GET/id/v1/identity/get

Fetch an account's identity by RSX account id

Requires an API key with the id:identity:get scope.

The minimal identity view for an account a consumer already holds the id of. Deliberately smaller than the account-management representation: no email, no verification state, no timestamps. Takes an exact account id only — there is no listing or search on this surface, so it cannot be walked to enumerate accounts.

Cacheable for 60 seconds, privately.

Scope
id:identity:get Admin-issued keys only.

Query parameters

Query parameters of getIdentity

  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Account identity

Response of getIdentity

  • datarequired
    Type
    AccountIdentity
    Description
  • idrequired
    Type
    string, uuid
    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"
  • typerequired
    Type
    string
    Description
    one of "user", "developer"
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
    Profile picture, 512px square WebP on rsxcdn.com. Null when none is set.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 401Missing, unrecognised, or revoked API key
  • 403The key is valid but lacks the scope this route requires
  • 404No account with that id

Example

curl
curl "https://api.rsx.group/id/v1/identity/get?accountId=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "username": "ada_lovelace",
    "displayName": "Ada Lovelace",
    "status": "active",
    "type": "user",
    "avatarUrl": "https://rsxcdn.com/K3nZ9qLm2P.webp"
  }
}
GET/id/v1/identity/list

Fetch the identity of several accounts by id

Internal only: reachable over a service binding, not through the gateway.

The same minimal identity view as getIdentity, for up to 100 accounts at once, so a first-party surface can render the people on a page without one request each. Ids are exact and mandatory, so this cannot be used to enumerate accounts.

An id that matches no account is absent from the response rather than an error: an account can be terminated after it was recorded as the author of something, and a caller rendering history needs the rest of the page more than it needs to fail.

Cacheable for 60 seconds, privately.

Scope
id:identity:list Admin-issued keys only.

Query parameters

Query parameters of listIdentities

  • idsrequired
    Type
    string
    Description
    Between 1 and 100 RSX account ids, comma-separated, no spaces.matches ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}(,[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}){0,99}$

Response 200The identity view for each id that resolved, in the order requested

Response of listIdentities

  • datarequired
    Type
    array of AccountIdentity
    Description
  • idrequired
    Type
    string, uuid
    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"
  • typerequired
    Type
    string
    Description
    one of "user", "developer"
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
    Profile picture, 512px square WebP on rsxcdn.com. Null when none is set.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 404This endpoint is not publicly available

Example

curl
curl "https://api.rsx.group/id/v1/identity/list?ids=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d%2C0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6e" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "username": "ada_lovelace",
      "displayName": "Ada Lovelace",
      "status": "active",
      "type": "user",
      "avatarUrl": "https://rsxcdn.com/K3nZ9qLm2P.webp"
    }
  ]
}
GET/id/v1/authorization/get

Fetch an account's role and scopes

Requires an API key with the id:authorization:get scope.

RSX ID's authoritative answer to what an account may do — the existing staffRole + scopes model, not a consumer-specific one. staffRole and scopes are the raw assignment; active, admin, staff, and effectiveScopes are what is in force right now and all account for suspension and termination, so the simple check is also the safe one.

Cacheable for 15 seconds, privately. Role and scope changes are visible on the next read — there is no invalidation callback, so this window is the staleness bound a consumer inherits.

Scope
id:authorization:get Admin-issued keys only.

Query parameters

Query parameters of getAuthorization

  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Assigned role/scopes plus what is currently in force

Response of getAuthorization

  • datarequired
    Type
    AccountAuthorization
    Description
  • staffRolerequired
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopesrequired
    Type
    array of string
    Description
    Scopes as assigned. Not status-aware; see effectiveScopes.
  • activerequired
    Type
    boolean
    Description
    True only while status is 'active'. False for suspended and terminated.
  • adminrequired
    Type
    boolean
    Description
    Active RSX administrator.
  • staffrequired
    Type
    boolean
    Description
    Active RSX staff. Downward-closed, so an admin is also staff.
  • effectiveScopesrequired
    Type
    array of string
    Description
    Scopes actually in force: ['*'] for an active admin, the assigned scopes for active staff, empty otherwise.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 401Missing, unrecognised, or revoked API key
  • 403The key is valid but lacks the scope this route requires
  • 404No account with that id

Example

curl
curl "https://api.rsx.group/id/v1/authorization/get?accountId=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "staffRole": "none",
    "scopes": [],
    "active": true,
    "admin": true,
    "staff": true,
    "effectiveScopes": []
  }
}
GET/id/v1/links/list

List an account's connected external identities

Requires an API key with the id:links:list scope.

The forward direction: every external identity connected to one RSX ID, read from the same account-link table the account's own settings page reads — there is no second copy of this data for external consumers. Each row carries verified, which is the difference between a provider-proven identity and a cosmetic self-asserted handle; only the former should ever carry weight in an authorization decision.

Cacheable for 60 seconds, privately.

Scope
id:links:list Admin-issued keys only.

Query parameters

Query parameters of listLinksForAccount

  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Connected accounts (empty when the account has none)

Response of listLinksForAccount

  • datarequired
    Type
    array of AccountLink
    Description
  • providerrequired
    Type
    string
    Description
    one of "github", "discord", "roblox"
  • externalIdrequired
    Type
    string
    Description
    The provider's stable user id.
  • externalHandlerequired
    Type
    string, or null
    Description
    Login / username, for display.
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
  • verifiedrequired
    Type
    boolean
    Description
    True when ownership was proven via the provider's OAuth flow.
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 401Missing, unrecognised, or revoked API key
  • 403The key is valid but lacks the scope this route requires
  • 404No account with that id

Example

curl
curl "https://api.rsx.group/id/v1/links/list?accountId=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "provider": "github",
      "externalId": "1024025",
      "externalHandle": "octocat",
      "avatarUrl": "https://avatars.githubusercontent.com/u/1024025",
      "verified": true,
      "createdAt": "2026-10-10T12:00:00.000Z"
    }
  ]
}
08

tokens

1 operation under /id/v1/tokens.

POST/id/v1/tokens/exchange

Mint a token for an application on behalf of a resource token's subject

Internal only: reachable over a service binding and nowhere else.

An RSX resource server (RSX MCP) holds a person's token for itself and needs to call another RSX application as that person. It must not forward its own token, which that application was never meant to accept, so it trades it here for an ordinary access token minted for the application. Everything is checked against the account as it is now rather than as the token remembers it: the subject token's session must still be live, the account active, the application must list the subject's resource in its delegation, and the account must satisfy that application's own access policy. The token returned never outlives the subject token.

Scope
id:tokens:exchange Admin-issued keys only.

Request bodyapplication/json

Request body of exchangeToken

  • subjectTokenrequired
    Type
    string
    Description
    An access token RSX ID minted for one of its resources, still unexpired, whose session is still live.at least 1 character
  • audiencerequired
    Type
    string
    Description
    The client id of the application to mint for. It must list the subject token's resource in its delegation, and the person must satisfy its access policy.at least 1 character

Response 200The minted token

Response of exchangeToken

  • datarequired
    Type
    ExchangedToken
    Description
  • accessTokenrequired
    Type
    string
    Description
    An ordinary RSX ID access token for the audience application: aud is the platform audience, azp is that application, and act names the resource that asked for it.
  • tokenTyperequired
    Type
    string
    Description
    one of "Bearer"
  • expiresInrequired
    Type
    integer
    Description
    more than 0
  • audiencerequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401The subject token is invalid, or the session behind it has ended
  • 403The application does not accept delegation from this resource, or the account may not use it
  • 404This endpoint is not publicly available

Example

curl
curl -X POST https://api.rsx.group/id/v1/tokens/exchange \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "subjectToken": "string",
  "audience": "rsx_client_a1b2c3d4"
}'
200 response
{
  "data": {
    "accessToken": "string",
    "tokenType": "Bearer",
    "expiresIn": 900,
    "audience": "rsx_client_a1b2c3d4"
  }
}
09

Schemas

Every named shape in this reference, as the operations above refer to it.

Account

Account

  • 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

Credentials

Credentials

  • 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

Registered

Registered

  • 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).

Register

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

PasswordLogin

PasswordLogin

  • identifierrequired
    Type
    string
    Description
    Email or @handle (with or without @).at least 1 character
  • passwordrequired
    Type
    string
    Description
    at least 1 character
  • clientId
    Type
    string
    Description

PasskeyAssertion

PasskeyAssertion

  • idrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • rawIdrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • typerequired
    Type
    string
    Description
    one of "public-key"
  • responserequired
    Type
    object
    Description
  • clientDataJSONrequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorDatarequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • signaturerequired
    Type
    string
    Description
    up to 2048 characters · matches ^[A-Za-z0-9_-]*$
  • userHandle
    Type
    string
    Description
    up to 512 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorAttachment
    Type
    string
    Description
    one of "platform", "cross-platform"
  • clientExtensionResults
    Type
    map of any
    Description
    default {}
  • {key}
    Type
    any
    Description

PasskeyLogin

PasskeyLogin

  • passkeyrequired
    Type
    PasskeyAssertion
    Description
  • idrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • rawIdrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • typerequired
    Type
    string
    Description
    one of "public-key"
  • responserequired
    Type
    object
    Description
  • clientDataJSONrequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorDatarequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • signaturerequired
    Type
    string
    Description
    up to 2048 characters · matches ^[A-Za-z0-9_-]*$
  • userHandle
    Type
    string
    Description
    up to 512 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorAttachment
    Type
    string
    Description
    one of "platform", "cross-platform"
  • clientExtensionResults
    Type
    map of any
    Description
    default {}
  • {key}
    Type
    any
    Description
  • clientId
    Type
    string
    Description

Login

one of PasswordLogin, PasskeyLogin

PasskeyRequestOptions

PasskeyRequestOptions

  • challengerequired
    Type
    string
    Description
  • timeout
    Type
    integer
    Description
  • rpId
    Type
    string
    Description
  • allowCredentials
    Type
    array of object
    Description
  • idrequired
    Type
    string
    Description
  • typerequired
    Type
    string
    Description
  • transports
    Type
    array of string
    Description
  • userVerification
    Type
    string
    Description
    one of "required", "preferred", "discouraged"

PasskeyChallenge

PasskeyChallenge

  • clientId
    Type
    string
    Description

Refresh

Refresh

  • refreshTokenrequired
    Type
    string
    Description
    at least 1 character

ExchangeSession

ExchangeSession

  • idTokenrequired
    Type
    string
    Description
    The id_token from the token exchange.at least 1 character
  • clientIdrequired
    Type
    string
    Description

Accepted

Accepted

  • acceptedrequired
    Type
    boolean
    Description
    one of true
  • token
    Type
    string
    Description
    Dev-only (DEV_RETURN_TOKENS=1).

RevokeSession

RevokeSession

  • refreshTokenrequired
    Type
    string
    Description
    at least 1 character

VerifyEmail

VerifyEmail

  • tokenrequired
    Type
    string
    Description
    at least 1 character

RequestVerification

RequestVerification

  • emailrequired
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters

RequestPasswordReset

RequestPasswordReset

  • emailrequired
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters

ResetPassword

ResetPassword

  • tokenrequired
    Type
    string
    Description
    at least 1 character
  • passwordrequired
    Type
    string
    Description
    Never stored or returned.10 to 256 characters

UpdateAccount

UpdateAccount

  • displayName
    Type
    string, or null
    Description
    1 to 80 characters
  • username
    Type
    string
    Description
    Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$
  • email
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters

ChangePassword

ChangePassword

  • currentPasswordrequired
    Type
    string
    Description
    at least 1 character
  • newPasswordrequired
    Type
    string
    Description
    Never stored or returned.10 to 256 characters

BecomeDeveloper

BecomeDeveloper

  • acceptTermsrequired
    Type
    boolean
    Description
    Must be true: explicit consent to the RSX Developer Terms.one of true

Passkey

Passkey

  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters
  • deviceTyperequired
    Type
    string
    Description
    multiDevice is a synced passkey (a password manager); singleDevice lives on one authenticator.one of "singleDevice", "multiDevice"
  • backedUprequired
    Type
    boolean
    Description
    True when the passkey is currently synced to a backup.
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time, or null
    Description

PasskeyCreationOptions

PasskeyCreationOptions

  • challengerequired
    Type
    string
    Description
  • rprequired
    Type
    object
    Description
  • namerequired
    Type
    string
    Description
  • id
    Type
    string
    Description
  • userrequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • displayNamerequired
    Type
    string
    Description
  • pubKeyCredParamsrequired
    Type
    array of object
    Description
  • algrequired
    Type
    integer
    Description
  • typerequired
    Type
    string
    Description
  • timeout
    Type
    integer
    Description
  • excludeCredentials
    Type
    array of object
    Description
  • idrequired
    Type
    string
    Description
  • typerequired
    Type
    string
    Description
  • transports
    Type
    array of string
    Description

StartPasskey

StartPasskey

  • passwordrequired
    Type
    string
    Description
    at least 1 character

PasskeyAttestation

PasskeyAttestation

  • idrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • rawIdrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • typerequired
    Type
    string
    Description
    one of "public-key"
  • responserequired
    Type
    object
    Description
  • clientDataJSONrequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • attestationObjectrequired
    Type
    string
    Description
    up to 16384 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorData
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • transports
    Type
    array of string
    Description
    up to 8 items
  • publicKeyAlgorithm
    Type
    integer
    Description
  • publicKey
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorAttachment
    Type
    string
    Description
    one of "platform", "cross-platform"
  • clientExtensionResults
    Type
    map of any
    Description
    default {}
  • {key}
    Type
    any
    Description

AddPasskey

AddPasskey

  • responserequired
    Type
    PasskeyAttestation
    Description
  • idrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • rawIdrequired
    Type
    string
    Description
    up to 1024 characters · matches ^[A-Za-z0-9_-]*$
  • typerequired
    Type
    string
    Description
    one of "public-key"
  • responserequired
    Type
    object
    Description
  • clientDataJSONrequired
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • attestationObjectrequired
    Type
    string
    Description
    up to 16384 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorData
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • transports
    Type
    array of string
    Description
    up to 8 items
  • publicKeyAlgorithm
    Type
    integer
    Description
  • publicKey
    Type
    string
    Description
    up to 4096 characters · matches ^[A-Za-z0-9_-]*$
  • authenticatorAttachment
    Type
    string
    Description
    one of "platform", "cross-platform"
  • clientExtensionResults
    Type
    map of any
    Description
    default {}
  • {key}
    Type
    any
    Description
  • name
    Type
    string
    Description
    1 to 64 characters

UpdatePasskey

UpdatePasskey

  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 64 characters

RemovePasskey

RemovePasskey

  • idrequired
    Type
    string, uuid
    Description

TermsRevision

TermsRevision

  • idrequired
    Type
    string, uuid
    Description
  • effectiveAtrequired
    Type
    string, date-time
    Description
  • urlrequired
    Type
    string, uri
    Description
  • summaryrequired
    Type
    string, or null
    Description

TermsStatus

TermsStatus

  • staterequired
    Type
    string
    Description
    current: nothing to accept. pending: a revision is scheduled and not yet accepted. required: the revision in force is not accepted.one of "current", "pending", "required"
  • revisionrequired
    Type
    TermsRevision
    Description
  • idrequired
    Type
    string, uuid
    Description
  • effectiveAtrequired
    Type
    string, date-time
    Description
  • urlrequired
    Type
    string, uri
    Description
  • summaryrequired
    Type
    string, or null
    Description

AcceptTerms

AcceptTerms

  • revisionIdrequired
    Type
    string, uuid
    Description

SessionInfo

SessionInfo

  • idrequired
    Type
    string, uuid
    Description
  • userAgentrequired
    Type
    string, or null
    Description
  • iprequired
    Type
    string, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • lastUsedAtrequired
    Type
    string, date-time
    Description
  • expiresAtrequired
    Type
    string, date-time
    Description
  • currentrequired
    Type
    boolean
    Description
    True for the session making this request.
  • clientIdrequired
    Type
    string, or null
    Description
    The application this session was created through. Null for a session started at id.rsx.group itself.

SuspendAccount

SuspendAccount

  • idrequired
    Type
    string, uuid
    Description
  • reason
    Type
    string
    Description
    up to 500 characters

ReinstateAccount

ReinstateAccount

  • idrequired
    Type
    string, uuid
    Description

TerminateAccount

TerminateAccount

  • idrequired
    Type
    string, uuid
    Description
  • reason
    Type
    string
    Description
    up to 500 characters

AdminRemoveAvatar

AdminRemoveAvatar

  • idrequired
    Type
    string, uuid
    Description

TermsRevisionAdmin

TermsRevisionAdmin

  • idrequired
    Type
    string, uuid
    Description
  • effectiveAtrequired
    Type
    string, date-time
    Description
  • urlrequired
    Type
    string, uri
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • staterequired
    Type
    string
    Description
    one of "scheduled", "in_force", "superseded", "withdrawn"
  • publishedAtrequired
    Type
    string, date-time
    Description
  • publishedByrequired
    Type
    string
    Description
  • withdrawnAtrequired
    Type
    string, date-time, or null
    Description
  • withdrawnByrequired
    Type
    string, or null
    Description
  • acceptedCountrequired
    Type
    integer
    Description
    at least 0

CreateTermsRevision

CreateTermsRevision

  • effectiveDaterequired
    Type
    string
    Description
    Takes effect at 00:00 UTC on this date.matches ^\d{4}-\d{2}-\d{2}$
  • urlrequired
    Type
    string, uri
    Description
  • summary
    Type
    string
    Description
    One line on what changed, shown in the notice.1 to 280 characters

WithdrawTermsRevision

WithdrawTermsRevision

  • idrequired
    Type
    string, uuid
    Description

AdminUpdateAccount

AdminUpdateAccount

  • idrequired
    Type
    string, uuid
    Description
  • email
    Type
    string, email
    Description
    Login email. Stored lowercased.up to 254 characters
  • username
    Type
    string
    Description
    Public @handle. Case-insensitive.matches ^[a-zA-Z][a-zA-Z0-9_]{2,29}$
  • displayName
    Type
    string, or null
    Description
    1 to 80 characters
  • emailVerified
    Type
    boolean
    Description
  • force
    Type
    boolean
    Description
    Bypass another user's handle reservation when reassigning a handle.

AdminResetResult

AdminResetResult

  • 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
  • resetTokenrequired
    Type
    string
    Description
    One-time password-reset token. Hand it to the account owner; it is not stored in the clear.
  • expiresAtrequired
    Type
    string, date-time
    Description

AdminResetPassword

AdminResetPassword

  • idrequired
    Type
    string, uuid
    Description

AdminCreateAccount

AdminCreateAccount

  • 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}$
  • displayName
    Type
    string, or null
    Description
    1 to 80 characters
  • emailVerified
    Type
    boolean
    Description
  • type
    Type
    string
    Description
    one of "user", "developer"
  • staffRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopes
    Type
    array of string
    Description

AdminRevokeSession

AdminRevokeSession

  • sessionIdrequired
    Type
    string, uuid
    Description

SetRole

SetRole

  • idrequired
    Type
    string, uuid
    Description
  • staffRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopes
    Type
    array of string
    Description
  • type
    Type
    string
    Description
    one of "user", "developer"

AccountAuditRecord

AccountAuditRecord

  • idrequired
    Type
    string, uuid
    Description
  • actorrequired
    Type
    string
    Description
    Admin email, 'user', or 'system'.
  • actionrequired
    Type
    string
    Description
    one of "register", "email_verified", "handle_changed", "email_changed", "password_changed", "password_reset", "suspended", "reinstated", "terminated", "admin_updated", "developer_enabled", "role_changed", "link_added", "link_removed", "admin_created", "session_revoked", "oidc_client_created", "oidc_client_revoked", "oidc_client_trust_changed", "oidc_client_updated", "oidc_client_secret_rotated", "oidc_client_restored", "oidc_client_policy_changed", "oidc_client_resource_changed", "oidc_client_delegation_changed", "signin_denied", "avatar_changed", "avatar_removed", "passkey_added", "passkey_renamed", "passkey_removed"
  • targetTyperequired
    Type
    string
    Description
    one of "account", "oidc_client"
  • targetIdrequired
    Type
    string
    Description
  • atrequired
    Type
    string, date-time
    Description
  • detailrequired
    Type
    string, or null
    Description

AccessPolicy

AccessPolicy

  • requiredRolerequired
    Type
    string
    Description
    Minimum internal authority. Downward-closed: an admin satisfies a staff requirement. 'none' admits any active account.one of "none", "staff", "admin"
  • requiredScopesrequired
    Type
    array of string
    Description
    Staff scopes the account must hold, all of them. An admin holds every scope and satisfies any list.

OidcClient

OidcClient

  • clientIdrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • redirectUrisrequired
    Type
    array of string, uri
    Description
  • trustedrequired
    Type
    boolean
    Description
    First-party: skips the consent screen and receives internal group/role claims.
  • policyrequired
    Type
    AccessPolicy
    Description
  • requiredRolerequired
    Type
    string
    Description
    Minimum internal authority. Downward-closed: an admin satisfies a staff requirement. 'none' admits any active account.one of "none", "staff", "admin"
  • requiredScopesrequired
    Type
    array of string
    Description
    Staff scopes the account must hold, all of them. An admin holds every scope and satisfies any list.
  • formSigninrequired
    Type
    boolean
    Description
    Whether this application may use the embedded sign-in form. First-party only, and the call must arrive over a service binding.
  • publicrequired
    Type
    boolean
    Description
    A public client: it holds no secret and proves itself with PKCE alone, which RSX ID then requires. Command-line and desktop clients, such as an MCP client, cannot keep a secret and are registered this way.
  • resourcerequired
    Type
    string, or null
    Description
    The RSX resource this application's access tokens are for. Null for an ordinary sign-in application, whose tokens carry the platform audience.one of "https://mcp.rsx.group/mcp"
  • delegationrequired
    Type
    array of string
    Description
    RSX resources whose tokens may be exchanged for a short-lived token minted for this application, on behalf of the same person and subject to this application's own access policy. Empty means no agent can act here.
  • createdAtrequired
    Type
    string, date-time
    Description
  • revokedrequired
    Type
    boolean
    Description

CreatedOidcClient

CreatedOidcClient

  • clientIdrequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • redirectUrisrequired
    Type
    array of string, uri
    Description
  • trustedrequired
    Type
    boolean
    Description
    First-party: skips the consent screen and receives internal group/role claims.
  • policyrequired
    Type
    AccessPolicy
    Description
  • requiredRolerequired
    Type
    string
    Description
    Minimum internal authority. Downward-closed: an admin satisfies a staff requirement. 'none' admits any active account.one of "none", "staff", "admin"
  • requiredScopesrequired
    Type
    array of string
    Description
    Staff scopes the account must hold, all of them. An admin holds every scope and satisfies any list.
  • formSigninrequired
    Type
    boolean
    Description
    Whether this application may use the embedded sign-in form. First-party only, and the call must arrive over a service binding.
  • publicrequired
    Type
    boolean
    Description
    A public client: it holds no secret and proves itself with PKCE alone, which RSX ID then requires. Command-line and desktop clients, such as an MCP client, cannot keep a secret and are registered this way.
  • resourcerequired
    Type
    string, or null
    Description
    The RSX resource this application's access tokens are for. Null for an ordinary sign-in application, whose tokens carry the platform audience.one of "https://mcp.rsx.group/mcp"
  • delegationrequired
    Type
    array of string
    Description
    RSX resources whose tokens may be exchanged for a short-lived token minted for this application, on behalf of the same person and subject to this application's own access policy. Empty means no agent can act here.
  • createdAtrequired
    Type
    string, date-time
    Description
  • revokedrequired
    Type
    boolean
    Description
  • clientSecretrequired
    Type
    string, or null
    Description
    Shown once, at creation, and not retrievable. Null for a public client, which has none.

CreateOidcClient

CreateOidcClient

  • namerequired
    Type
    string
    Description
    1 to 120 characters
  • redirectUris
    Type
    array of string, uri
    Description
    default []
  • trusted
    Type
    boolean
    Description
  • requiredRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • requiredScopes
    Type
    array of string
    Description
  • formSignin
    Type
    boolean
    Description
  • public
    Type
    boolean
    Description
  • resource
    Type
    string
    Description
    one of "https://mcp.rsx.group/mcp"
  • delegation
    Type
    array of string
    Description

RevokeOidcClient

RevokeOidcClient

  • clientIdrequired
    Type
    string
    Description

UpdateOidcClient

UpdateOidcClient

  • clientIdrequired
    Type
    string
    Description
  • trusted
    Type
    boolean
    Description
  • name
    Type
    string
    Description
    1 to 120 characters
  • redirectUris
    Type
    array of string, uri
    Description
    at least 1 item
  • requiredRole
    Type
    string
    Description
    one of "none", "staff", "admin"
  • requiredScopes
    Type
    array of string
    Description
  • formSignin
    Type
    boolean
    Description
  • resource
    Type
    string, or null
    Description
    one of "https://mcp.rsx.group/mcp"
  • delegation
    Type
    array of string
    Description

RotatedOidcSecret

RotatedOidcSecret

  • clientIdrequired
    Type
    string
    Description
  • clientSecretrequired
    Type
    string
    Description
    Shown once. The store keeps only a hash.

RotateOidcSecret

RotateOidcSecret

  • clientIdrequired
    Type
    string
    Description

RestoreOidcClient

RestoreOidcClient

  • clientIdrequired
    Type
    string
    Description

OidcAuthorizeResult

OidcAuthorizeResult

  • redirectTo
    Type
    string
    Description
  • consentRequired
    Type
    boolean
    Description
  • client
    Type
    object
    Description
  • namerequired
    Type
    string
    Description
  • scopesrequired
    Type
    array of string
    Description
  • resource
    Type
    object
    Description
  • urirequired
    Type
    string
    Description
  • namerequired
    Type
    string
    Description
  • labels
    Type
    map of string
    Description
  • {key}
    Type
    string
    Description
  • accessDenied
    Type
    boolean
    Description
  • denied
    Type
    object
    Description
  • reasonrequired
    Type
    string
    Description
    one of "insufficient-role", "insufficient-scope"
  • requiredRole
    Type
    string
    Description
  • missingScopes
    Type
    array of string
    Description
  • returnTo
    Type
    string
    Description

OidcAuthorizeRequest

OidcAuthorizeRequest

  • clientIdrequired
    Type
    string
    Description
  • redirectUrirequired
    Type
    string, uri
    Description
  • scoperequired
    Type
    string
    Description
  • claims
    Type
    string
    Description
  • state
    Type
    string
    Description
  • nonce
    Type
    string
    Description
  • codeChallenge
    Type
    string
    Description
  • codeChallengeMethod
    Type
    string
    Description
    one of "S256"
  • responseType
    Type
    string
    Description
  • resource
    Type
    string, uri
    Description
  • consent
    Type
    boolean
    Description

StartLinkResult

StartLinkResult

  • authorizeUrlrequired
    Type
    string, uri
    Description
    The provider's authorization URL. The browser is redirected here to grant access.

LinkCallback

LinkCallback

  • providerrequired
    Type
    string
    Description
    one of "github", "discord"
  • coderequired
    Type
    string
    Description
    at least 1 character
  • staterequired
    Type
    string
    Description
    at least 1 character

AccountIdentity

AccountIdentity

  • idrequired
    Type
    string, uuid
    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"
  • typerequired
    Type
    string
    Description
    one of "user", "developer"
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
    Profile picture, 512px square WebP on rsxcdn.com. Null when none is set.

AccountAuthorization

AccountAuthorization

  • staffRolerequired
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopesrequired
    Type
    array of string
    Description
    Scopes as assigned. Not status-aware; see effectiveScopes.
  • activerequired
    Type
    boolean
    Description
    True only while status is 'active'. False for suspended and terminated.
  • adminrequired
    Type
    boolean
    Description
    Active RSX administrator.
  • staffrequired
    Type
    boolean
    Description
    Active RSX staff. Downward-closed, so an admin is also staff.
  • effectiveScopesrequired
    Type
    array of string
    Description
    Scopes actually in force: ['*'] for an active admin, the assigned scopes for active staff, empty otherwise.

ResolvedIdentity

ResolvedIdentity

  • accountrequired
    Type
    AccountIdentity
    Description
  • idrequired
    Type
    string, uuid
    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"
  • typerequired
    Type
    string
    Description
    one of "user", "developer"
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
    Profile picture, 512px square WebP on rsxcdn.com. Null when none is set.
  • linkrequired
    Type
    AccountLink
    Description
  • providerrequired
    Type
    string
    Description
    one of "github", "discord", "roblox"
  • externalIdrequired
    Type
    string
    Description
    The provider's stable user id.
  • externalHandlerequired
    Type
    string, or null
    Description
    Login / username, for display.
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
  • verifiedrequired
    Type
    boolean
    Description
    True when ownership was proven via the provider's OAuth flow.
  • createdAtrequired
    Type
    string, date-time
    Description
  • authorizationrequired
    Type
    AccountAuthorization
    Description
  • staffRolerequired
    Type
    string
    Description
    one of "none", "staff", "admin"
  • scopesrequired
    Type
    array of string
    Description
    Scopes as assigned. Not status-aware; see effectiveScopes.
  • activerequired
    Type
    boolean
    Description
    True only while status is 'active'. False for suspended and terminated.
  • adminrequired
    Type
    boolean
    Description
    Active RSX administrator.
  • staffrequired
    Type
    boolean
    Description
    Active RSX staff. Downward-closed, so an admin is also staff.
  • effectiveScopesrequired
    Type
    array of string
    Description
    Scopes actually in force: ['*'] for an active admin, the assigned scopes for active staff, empty otherwise.

Problem

Problem

  • typerequired
    Type
    string
    Description
  • titlerequired
    Type
    string
    Description
  • statusrequired
    Type
    integer
    Description
  • detail
    Type
    string
    Description
  • instance
    Type
    string
    Description
  • requestId
    Type
    string
    Description

LinkOwner

LinkOwner

  • accountIdrequired
    Type
    string, uuid
    Description
  • linkrequired
    Type
    AccountLink
    Description
  • providerrequired
    Type
    string
    Description
    one of "github", "discord", "roblox"
  • externalIdrequired
    Type
    string
    Description
    The provider's stable user id.
  • externalHandlerequired
    Type
    string, or null
    Description
    Login / username, for display.
  • avatarUrlrequired
    Type
    string, uri, or null
    Description
  • verifiedrequired
    Type
    boolean
    Description
    True when ownership was proven via the provider's OAuth flow.
  • createdAtrequired
    Type
    string, date-time
    Description

ExchangedToken

ExchangedToken

  • accessTokenrequired
    Type
    string
    Description
    An ordinary RSX ID access token for the audience application: aud is the platform audience, azp is that application, and act names the resource that asked for it.
  • tokenTyperequired
    Type
    string
    Description
    one of "Bearer"
  • expiresInrequired
    Type
    integer
    Description
    more than 0
  • audiencerequired
    Type
    string
    Description

TokenExchange

TokenExchange

  • subjectTokenrequired
    Type
    string
    Description
    An access token RSX ID minted for one of its resources, still unexpired, whose session is still live.at least 1 character
  • audiencerequired
    Type
    string
    Description
    The client id of the application to mint for. It must list the subject token's resource in its delegation, and the person must satisfy its access policy.at least 1 character

Jwks

Jwks

  • keysrequired
    Type
    array of object
    Description
  • ktyrequired
    Type
    string
    Description
  • crvrequired
    Type
    string
    Description
  • xrequired
    Type
    string
    Description
  • yrequired
    Type
    string
    Description
  • kidrequired
    Type
    string
    Description
  • userequired
    Type
    string
    Description
  • algrequired
    Type
    string
    Description