PLEXICHATNarrative Docs

Authentication

Guides, route-group overviews, and live schema entry points for the Plexichat backend.

REST http://api.plexichat.com/api/v1Gateway ws://api.plexichat.com/gatewayVersion a.1.0-49

Authentication API

Endpoints for user registration, login, session management, and two-factor authentication.

Base URL: http://api.plexichat.com/api/v1

POST /auth/register

Register a new user account.

Request Body

FieldTypeRequiredConstraintsDescription
usernamestringYes3-32 charactersUnique username
emailstringYesValid email formatEmail address
passwordstringYesSee requirementsPassword
ageintegerNo>0Age (required if age gate enabled in boolean mode)
dobstringNoYYYY-MM-DDDate of birth (required if age gate enabled in dob mode)

Password Requirements

Default requirements (configurable):

  • Minimum 12 characters
  • At least one uppercase letter
  • At least one lowercase letter
  • At least one digit
  • At least one special character

Check current requirements via GET /auth/password-requirements.

Example Request


curl -X POST http://api.plexichat.com/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "johndoe",
    "email": "[email protected]",
    "password": "SecurePass123!"
  }'

Response (201 Created)


{
  "status": "success",
  "token": "session_token_here",
      "user": {
        "id": "123456789012345678",
        "username": "johndoe",
        "email": "[email protected]",
        "avatar_url": null,
        "created_at": 1704067200,
        "email_verified": false,
        "totp_enabled": false,
        "age_verified": false,
        "badges": []
      }
  }

Error Responses

StatusMessageDescription
400Invalid inputValidation failed
400Weak passwordPassword doesn't meet requirements
409Already existsUsername or email taken

POST /auth/login

Authenticate a user and obtain a session token.

Request Body

FieldTypeRequiredDescription
usernamestringYesUsername or email
passwordstringYesPassword

Example Request


curl -X POST http://api.plexichat.com/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "johndoe",
    "password": "SecurePass123!"
  }'

Response (200 OK) - Success


{
  "status": "success",
  "token": "session_token_here",
      "user": {
        "id": "123456789012345678",
        "username": "johndoe",
        "email": "[email protected]",
        "avatar_url": null,
        "created_at": 1704067200,
        "email_verified": true,
        "totp_enabled": false,
        "age_verified": true,
        "badges": []
      }
  }

Response (200 OK) - 2FA Required


{
  "status": "two_factor_required",
  "token": null,
  "user": null,
  "challenge_token": "challenge_token_here",
  "methods": ["totp", "backup_code"],
  "expires_in": 300
}

Error Responses

StatusMessageDescription
401Invalid credentialsWrong username/password
403Account lockedToo many failed attempts
403Email not verifiedEmail verification required

POST /auth/2fa

Complete two-factor authentication challenge.

Request Body

FieldTypeRequiredDescription
challenge_tokenstringYesToken from login response
codestringYes6-digit TOTP or backup code

Example Request


{
  "challenge_token": "challenge_token_from_login",
  "code": "123456"
}

Response (200 OK)


{
  "status": "success",
  "token": "session_token_here",
  "user": {
    "id": "123456789012345678",
    "username": "johndoe"
  }
}

Error Responses

StatusMessageDescription
401Invalid codeWrong 2FA code
401Expired tokenChallenge token expired

POST /auth/logout

Logout and revoke the current session.

Example Request


curl -X POST http://api.plexichat.com/api/v1/auth/logout \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN"

Response (200 OK)


{
  "success": true
}

POST /auth/refresh

Refresh the current session token. Extends session lifetime if near expiration.

Example Request


curl -X POST http://api.plexichat.com/api/v1/auth/refresh \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN"

Response (200 OK)

Returns standard LoginResponse.

POST /auth/password-reset/request

Request a password reset email. Always returns success to prevent email enumeration.

Request Body

FieldTypeRequiredDescription
emailstringYesAccount email address

Response (200 OK)


{
  "success": true
}

POST /auth/password-reset/confirm

Complete password reset using token from email.

Request Body

FieldTypeRequiredDescription
tokenstringYesReset token from email
new_passwordstringYesNew password

Response (200 OK)


{
  "success": true
}

GET /auth/sessions

Get all active sessions for the current user.

Example Request


curl -X GET http://api.plexichat.com/api/v1/auth/sessions \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN"

Response (200 OK)


[
  {
    "id": "123456789012345678",
    "device_id": null,
    "ip_address": "192.168.1.1",
    "user_agent": "Mozilla/5.0...",
    "created_at": 1704067200,
    "expires_at": 1704672000,
    "last_activity": 1704153600,
    "current": true
  }
]

DELETE /auth/sessions/{session_id}

Revoke a specific session.

Headers


Authorization: Bearer <token>

Path Parameters

ParameterTypeDescription
session_idstringSession's snowflake ID

Response (200 OK)


{
  "success": true
}

Error Responses

StatusMessageDescription
400Invalid session IDID format invalid
404Session not foundSession doesn't exist

POST /auth/sessions/revoke-all

Revoke all sessions except optionally the current one.

Headers


Authorization: Bearer <token>

Request Body

FieldTypeDefaultDescription
except_currentbooltrueKeep current session active

Response (200 OK)


{
  "success": true,
  "revoked_count": 3
}

GET /auth/2fa/status

Get current 2FA status for the authenticated user.

Headers


Authorization: Bearer <token>

Response (200 OK)


{
  "enabled": false,
  "backup_codes_remaining": 0
}

POST /auth/2fa/enable

Start 2FA setup process. Returns QR code and secret.

Headers


Authorization: Bearer <token>

Request Body

FieldTypeRequiredDescription
passwordstringYesCurrent password for verification

Response (200 OK)


{
  "secret": "JBSWY3DPEHPK3PXP",
  "qr_uri": "otpauth://totp/Plexichat:johndoe?secret=...",
  "backup_codes": ["12345678", "23456789", "..."]
}

Error Responses

StatusMessageDescription
400Password requiredMissing password
401Invalid passwordWrong password
4092FA is already enabledAlready active

POST /auth/2fa/confirm

Confirm 2FA setup with TOTP code from authenticator app.

Headers


Authorization: Bearer <token>

Request Body

FieldTypeRequiredDescription
codestringYes6-digit code from authenticator

Response (200 OK)


{
  "success": true
}

Error Responses

StatusMessageDescription
400Valid 6-digit code requiredInvalid code format
4002FA setup not startedNo pending setup
401Invalid codeWrong code

POST /auth/2fa/disable

Disable 2FA on the account.

Headers


Authorization: Bearer <token>

Request Body

FieldTypeRequiredDescription
passwordstringYesCurrent password
codestringYesCurrent 2FA code

Response (200 OK)


{
  "success": true
}

Error Responses

StatusMessageDescription
400Password requiredMissing password
4002FA code requiredMissing code
4002FA is not enabledNot active
401Invalid password or codeWrong credentials

GET /auth/password-requirements

Get server password policy (no authentication required).

Response (200 OK)


{
  "min_length": 12,
  "max_length": 128,
  "require_uppercase": true,
  "require_lowercase": true,
  "require_digit": true,
  "require_special": true,
  "age_gate_enabled": false,
  "age_verification_type": "boolean",
  "minimum_age": 13
}

Token Types

TypeHeader FormatDescription
User SessionBearer <token>User session token
Bot TokenBot <token>Bot application token

Session Limits

SettingDefault
Max sessions per user10
Session expiration7 days (168 hours)
Extend on activityYes

Account Lockout

SettingDefault
Max failed attempts5
Lockout duration15 minutes

OAuth Sign-In

OAuth allows users to sign in using external providers like Google, GitHub, and Microsoft.

GET /auth/oauth/{provider}/login

Initiate an OAuth login flow.

Path Parameters:

ParameterTypeDescription
providerstringgoogle, github, microsoft, or gitlab

Query Parameters:

ParameterTypeRequiredDescription
redirect_uristringYesThe URI where the provider should redirect after auth

Response (200 OK):


{
  "url": "https://accounts.google.com/o/oauth2/v2/auth?...",
  "state": "random_state_string",
  "code_verifier": "pkce_code_verifier_if_enabled"
}

POST /auth/oauth/{provider}/callback

Handle the callback from the OAuth provider.

Path Parameters:

ParameterTypeDescription
providerstringgoogle, github, microsoft, or gitlab

Request Body:

FieldTypeRequiredDescription
codestringYesAuthorization code from the provider
statestringYesState parameter from the provider
redirect_uristringYesSame redirect URI used in initiation
code_verifierstringNoPKCE verifier returned from the login step when PKCE is enabled

Response (200 OK):

Standard LoginResponse (same as /auth/login).