Skip to content

Sign-in and sessions

Password sign-in, token refresh, the second-factor challenge, invites, password reset and your own login sessions.

POST/api/auth/login
POST/api/auth/login-options
POST/api/auth/mfa/verify
POST/api/auth/mfa/send-otp
POST/api/auth/refresh
POST/api/auth/logout
GET/api/auth/me
DELETE/api/auth/identities/:id
POST/api/auth/password/set/send-code
POST/api/auth/password/set
GET/api/auth/sessions
DELETE/api/auth/sessions/:id
POST/api/auth/sessions/revoke-others
GET/api/auth/invite/:token
POST/api/auth/invite/:token/accept
GET/api/auth/password-reset/:token
POST/api/auth/password-reset/:token/reset
POST/api/auth/password-reset
GET/api/auth/registration-status
POST/api/auth/register
POST/api/auth/verify-email/:token

Password login ​

POST/api/auth/login

Existing routes.

Authentication: none.
Rate limit: 10 requests per minute per IP address.

Request body

NameTypeRequiredNotes
emailstringYesAn email address.
passwordstringYesAt least 1 characters.
bash
curl -X POST "https://shellius.example.com/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "…",
    "password": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

Email-first login options ​

POST/api/auth/login-options

Authentication: none.
Rate limit: 10 requests per minute per IP address.

Request body

NameTypeRequiredNotes
emailstringYesAn email address.
bash
curl -X POST "https://shellius.example.com/api/auth/login-options" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

Complete MFA challenge ​

POST/api/auth/mfa/verify

Authentication: none.
Rate limit: 10 requests per minute per IP address.

Request body

NameTypeRequiredNotes
mfaTokenstringYes
methodstringYesOne of totp, email, backup.
codestringYes
bash
curl -X POST "https://shellius.example.com/api/auth/mfa/verify" \
  -H "Content-Type: application/json" \
  -d '{
    "mfaToken": "…",
    "method": "totp",
    "code": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

Email OTP during MFA challenge ​

POST/api/auth/mfa/send-otp

Authentication: none.
Rate limit: 10 requests per minute per IP address.

Request body

NameTypeRequiredNotes
mfaTokenstringYes
bash
curl -X POST "https://shellius.example.com/api/auth/mfa/send-otp" \
  -H "Content-Type: application/json" \
  -d '{
    "mfaToken": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

Rotate refresh token ​

POST/api/auth/refresh

Authentication: none.
Rate limit: 10 requests per minute per IP address.

Request body

NameTypeRequiredNotes
refreshTokenstringYes
bash
curl -X POST "https://shellius.example.com/api/auth/refresh" \
  -H "Content-Type: application/json" \
  -d '{
    "refreshToken": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

Revoke refresh token ​

POST/api/auth/logout

Authentication: bearer token.
Permission: any signed-in user.

Request body

NameTypeRequiredNotes
refreshTokenstringYes
bash
curl -X POST "https://shellius.example.com/api/auth/logout" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "refreshToken": "…"
  }'

204 No Content on success.

Caller profile + SSO identities ​

GET/api/auth/me

Authentication: bearer token.
Permission: any signed-in user.

bash
curl -X GET "https://shellius.example.com/api/auth/me" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN"

200 OK

json
{ "success": true, "data": { … } }

Unlink own SSO identity ​

DELETE/api/auth/identities/:id

Unlink one of the caller's SSO identities.

Authentication: bearer token.
Permission: any signed-in user.

Path parameters

NameTypeNotes
idstring
bash
curl -X DELETE "https://shellius.example.com/api/auth/identities/{id}" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN"

204 No Content on success.

Password set send code ​

POST/api/auth/password/set/send-code

Authentication: bearer token.
Permission: any signed-in user.

bash
curl -X POST "https://shellius.example.com/api/auth/password/set/send-code" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN"

200 OK

json
{ "success": true, "data": { … } }

Password set ​

POST/api/auth/password/set

Authentication: bearer token.
Permission: any signed-in user.

Request body

NameTypeRequiredNotes
newPasswordobjectNo
methodstringYesOne of totp, email, backup.
codestringYes1–64 characters.
bash
curl -X POST "https://shellius.example.com/api/auth/password/set" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "totp",
    "code": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

List own refresh-token families ​

GET/api/auth/sessions

Sessions — self-service listing/revocation of refresh-token families.

Authentication: bearer token.
Permission: any signed-in user.

bash
curl -X GET "https://shellius.example.com/api/auth/sessions" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN"

200 OK

json
{ "success": true, "data": { … } }

Revoke one own session family ​

DELETE/api/auth/sessions/:id

Authentication: bearer token.
Permission: any signed-in user.

Path parameters

NameTypeNotes
idstring
bash
curl -X DELETE "https://shellius.example.com/api/auth/sessions/{id}" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN"

204 No Content on success.

Revoke all other own sessions ​

POST/api/auth/sessions/revoke-others

Authentication: bearer token.
Permission: any signed-in user.

bash
curl -X POST "https://shellius.example.com/api/auth/sessions/revoke-others" \
  -H "Authorization: Bearer $SHELLIUS_TOKEN"

200 OK

json
{ "success": true, "data": { … } }

Peek invite token ​

GET/api/auth/invite/:token

Public; peek at token without consuming.

Authentication: none — the token in the request is the credential.

Path parameters

NameTypeNotes
tokenstring
bash
curl -X GET "https://shellius.example.com/api/auth/invite/{token}"

200 OK

json
{ "success": true, "data": { … } }

Accept invite: set password, status=active, log in ​

POST/api/auth/invite/:token/accept

Public; consume token, set password, log in.

Authentication: none — the token in the request is the credential.
Rate limit: 5 requests per 15 minutes per IP address.

Path parameters

NameTypeNotes
tokenstring

Request body

NameTypeRequiredNotes
passwordobjectNo
bash
curl -X POST "https://shellius.example.com/api/auth/invite/{token}/accept" \
  -H "Content-Type: application/json" \
  -d '{
    "password": {}
  }'

200 OK

json
{ "success": true, "data": { … } }

Peek reset token ​

GET/api/auth/password-reset/:token

Public; peek at token without consuming.

Authentication: none — the token in the request is the credential.

Path parameters

NameTypeNotes
tokenstring
bash
curl -X GET "https://shellius.example.com/api/auth/password-reset/{token}"

200 OK

json
{ "success": true, "data": { … } }

Consume reset token, set password, log in ​

POST/api/auth/password-reset/:token/reset

Public; consume token, set new password.

Authentication: none — the token in the request is the credential.
Rate limit: 5 requests per 15 minutes per IP address.

Path parameters

NameTypeNotes
tokenstring

Request body

NameTypeRequiredNotes
passwordobjectNo
bash
curl -X POST "https://shellius.example.com/api/auth/password-reset/{token}/reset" \
  -H "Content-Type: application/json" \
  -d '{
    "password": {}
  }'

200 OK

json
{ "success": true, "data": { … } }

Self-service reset request ​

POST/api/auth/password-reset

Public self-service; ALWAYS returns 204 (no enum)

Authentication: none.
Rate limit: 5 requests per 15 minutes per IP address.

Request body

NameTypeRequiredNotes
emailstringYesAn email address.
bash
curl -X POST "https://shellius.example.com/api/auth/password-reset" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "…"
  }'

204 No Content on success.

Is self-registration enabled ​

GET/api/auth/registration-status

Public; returns { enabled: bool }.

Authentication: none.

bash
curl -X GET "https://shellius.example.com/api/auth/registration-status"

200 OK

json
{ "success": true, "data": { … } }

Self-service registration ​

POST/api/auth/register

Public self-service registration.

Authentication: none.
Rate limit: 5 requests per 15 minutes per IP address.

Request body

NameTypeRequiredNotes
emailstringYesAn email address.
namestringYes1–120 characters.
passwordobjectNo
bash
curl -X POST "https://shellius.example.com/api/auth/register" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "…",
    "name": "…"
  }'

200 OK

json
{ "success": true, "data": { … } }

Verify email -> status active ​

POST/api/auth/verify-email/:token

Public; consume token, flip status to active.

Authentication: none — the token in the request is the credential.
Rate limit: 5 requests per 15 minutes per IP address.

Path parameters

NameTypeNotes
tokenstring
bash
curl -X POST "https://shellius.example.com/api/auth/verify-email/{token}"

200 OK

json
{ "success": true, "data": { … } }
Was this page helpful?No, tell us why