Skip to content

API Endpoints

All versioned endpoints are prefixed with /v0. Authentication is session-based via the session_id cookie.

Health

MethodPathAuthDescription
GET/health-checkNoHealth check

Auth

MethodPathAuthDescription
POST/v0/auth/loginNoEmail/password login
POST/v0/auth/logoutYesDestroy session
POST/v0/auth/verify-emailNoVerify email token
POST/v0/auth/resend-verification-emailYesResend verification email
POST/v0/auth/forgot-passwordNoRequest password reset
POST/v0/auth/reset-passwordNoReset password with token
POST/v0/auth/change-passwordYesChange password
POST/v0/auth/change-emailYesRequest email change
POST/v0/auth/confirm-email-changeNoConfirm email change token
POST/v0/auth/complete-signupNoComplete OAuth signup (set handle)

OAuth

MethodPathAuthDescription
GET/v0/auth/oauth/google/authorizeNoGet Google OAuth URL
POST/v0/auth/oauth/google/loginNoExchange Google code for session
POST/v0/auth/oauth/google/linkYesLink Google to existing account
GET/v0/auth/oauth/github/authorizeNoGet GitHub OAuth URL
POST/v0/auth/oauth/github/loginNoExchange GitHub code for session
POST/v0/auth/oauth/github/linkYesLink GitHub to existing account
GET/v0/auth/oauth/connectionsYesList OAuth connections
POST/v0/auth/oauth/connections/unlinkYesUnlink OAuth connection

TOTP 2FA

MethodPathAuthDescription
POST/v0/auth/totp/setupYesGenerate TOTP secret + QR code
POST/v0/auth/totp/enableYesEnable TOTP with verification code
POST/v0/auth/totp/verifyNoVerify TOTP code (login step 2)
GET/v0/auth/totp/statusYesCheck if TOTP is enabled
POST/v0/auth/totp/disableYesDisable TOTP
POST/v0/auth/totp/backup-codes/regenerateYesRegenerate backup codes

Users

MethodPathAuthDescription
POST/v0/usersNoCreate user (register)
GET/v0/users/profileNoGet user profile by handle
GET/v0/users/profile/idNoGet user profile by UUID
GET/v0/users/handle/{handle}/availableNoCheck handle availability
GET/v0/user/meYesGet my profile
PATCH/v0/user/meYesUpdate my profile
POST/v0/user/me/profile-imageYesUpload profile image (4MB max)
DELETE/v0/user/me/profile-imageYesDelete profile image
POST/v0/user/me/banner-imageYesUpload banner image (8MB max)
DELETE/v0/user/me/banner-imageYesDelete banner image

Posts

MethodPathAuthDescription
POST/v0/postsYesCreate post
GET/v0/postsNoList posts (paginated)
GET/v0/posts/{id}NoGet post by ID
PATCH/v0/posts/{id}YesUpdate post (owner only)
DELETE/v0/posts/{id}YesDelete post (owner only)
MethodPathAuthDescription
GET/v0/search/postsNoSearch posts
GET/v0/search/usersNoSearch users

Action Logs

MethodPathAuthDescription
GET/v0/action-logsNoGet recent action logs

EventStream

MethodPathAuthDescription
GET/v0/eventstream/actionsNoSSE stream of action log events

OpenAPI Documentation

PathDescription
/docsSwagger UI (debug builds only)
/swagger.jsonOpenAPI JSON spec (debug builds only)

INFO

Swagger UI and the OpenAPI spec are only available in debug builds. In release builds, these endpoints do not exist.

Error Response Format

All errors return a consistent JSON format:

json
{
  "status": 400,
  "code": "user:not_found",
  "details": "User with ID ... not found"
}
  • status — HTTP status code
  • code — Machine-readable error code (see Error Codes)
  • details — Human-readable message (only in dev mode)

Released under the MIT License.