Skip to Content

Route Map

All routes are prefixed by the API’s base path. The Next.js proxy strips the /api prefix before forwarding to the Rust service.

/health — No authentication

MethodPathHandlerDescription
GET/health/apiapi_healthReturns { status, version, uptime_seconds }
GET/health/intelligenceintelligence_healthProxies Health.Check gRPC call to Intelligence

/auth — Rate-limited, no session required

MethodPathHandlerRate Limit
GET/auth/oauth/{provider}/authorizeoauth_authorizeStandard
GET/auth/oauth/{provider}/callbackoauth_callbackStandard
POST/auth/signinsigninStandard
POST/auth/signupsignupStandard
POST/auth/signoutsignoutStandard
POST/auth/refreshrefreshStandard
GET/auth/verify-emailverify_getStandard
POST/auth/verify-emailverify_postStandard
POST/auth/forgot-passwordforgot_passwordSensitive
POST/auth/reset-passwordreset_passwordSensitive
POST/auth/resend-verificationresend_verificationSensitive
POST/auth/recover-accountrecover_accountSensitive

Rate limit tiers:

  • Standard: 6 req/s, burst 10 (per IP)
  • Sensitive: ~0.05 req/s (20s interval), burst 3 (per IP)

/contact — Rate-limited (strict), no authentication

MethodPathHandlerDescription
POST/contacthandle_contactSends contact form submission via email to site admin

Request body: { name, email, subject, message } — all fields required, validated as non-empty.

Rate limit: Strict (~3 req/min, burst 3, per IP). Uses strict_rate_limiter().

/user — Session authentication required

MethodPathHandlerDescription
GET/user/memeReturns current user profile
PATCH/user/update-profileupdate_profileUpdates name, username, avatar_url, and supports one-way contributor_opt_in=true
POST/user/change-passwordchange_passwordRequires current_password + new_password
DELETE/user/delete-accountdelete_accountSoft-deletes user (deleted_at = NOW())
GET/user/list-sessionslist_sessionsReturns all active sessions
DELETE/user/revoke-session/{session_id}revoke_sessionInvalidates specific session

/chat — Session authentication required

MethodPathHandlerDescription
POST/chat/conversationscreate_conversationCreates conversation row in DB
GET/chat/conversationslist_conversationsCursor-paginated; sorted by updated_at DESC
GET/chat/conversations/{id}get_conversationReturns conversation + messages from chat_messages
PATCH/chat/conversations/{id}update_conversationUpdates title, metadata
DELETE/chat/conversations/{id}delete_conversationDeletes conversation + cascades to messages
POST/chat/conversations/{id}/generate-titlegenerate_conversation_titlegRPC: Chat.GenerateTitle
POST/chat/conversations/{id}/messagessend_messagegRPC: Chat.SendMessage → JSON response
POST/chat/conversations/{id}/streamstream_chatgRPC: Chat.StreamChat → SSE stream

/admin — Session authentication + admin role required

MethodPathHandlerDescription
GET/admin/userslist_users?search=&limit=&offset=
GET/admin/users/{id}get_userSingle user details
DELETE/admin/users/{id}delete_userHard-deletes user
PATCH/admin/users/{id}/roleupdate_user_role{ role: "user" | "contributor" | "admin" }
GET/admin/statsget_statsPlatform-wide statistics

/resources — Session authentication required (role-gated per route)

MethodPathHandlerAccessDescription
POST/resources/submissionssubmit_resourceContributor or AdminSubmit a knowledge resource for review
GET/resources/submissions/minelist_my_submissionsContributor or AdminList own submissions
GET/resources/submissionslist_queueAdminQueue listing (?status=&limit=&offset=)
POST/resources/submissions/{id}/reviewreview_submissionAdminApprove/reject submission and optionally ingest
POST/resourcesadd_resourceAdminDirect ingestion via gRPC ResourceService.AddResource
GET/resourceslist_resourcesAdminIndexed resources (?resource_type=&status=&limit=&cursor=)
GET/resources/{id}get_resource_statusAdmingRPC ResourceService.GetResourceStatus
DELETE/resources/{id}delete_resourceAdmingRPC ResourceService.DeleteResource
Last updated on