API Reference
The Loqa API follows industry-standard conventions. If you've built bots or integrations before, you'll feel right at home. Base URL: https://api.loqa.chat
Authentication
Register accounts, log in, and generate bot tokens. All auth endpoints return a JWT + user object.
Base: /api/auth
⏱ Rate limit: 3 req/60s (register) · 20 req/60s (other auth) · 15 req/60s per IP
🔒 Registration is gated by server-configured modes (open, invite-only, closed, or captcha). Email verification is mandatory when an email provider is configured. The primary account table encrypts email addresses at rest with AES-256-GCM; verification and delivery providers necessarily process them. Passwords are Argon2-hashed. There is no public endpoint to skip email verification.
/registerCreate a new user account/loginLog in with email and password/botGenerate a long-lived bot token (365 days)/verify-emailVerify email with a 6-digit code/resend-verificationResend verification email/inbound-emailWebhook for inbound email verificationUsers
Manage user profiles, settings, DMs, presence, encryption keys, two-factor auth, devices, and guild membership.
Base: /api/users
⏱ Rate limit: 300 req/10s (general) · 40 req/5s (DM create) · 20 req/60s (presence)
/meGet your own profile🔒/meUpdate your profile (display name, avatar, bio, banner)🔒/me/unreadsGet unread message counts across all channels🔒/me/passwordChange your password🔒/me/totpSet up TOTP two-factor authentication🔒/me/totp/verifyVerify a TOTP code🔒/me/totp/disableDisable TOTP two-factor authentication🔒/me/channelsList all DM and Group DM channels🔒/me/channelsCreate a Group DM🔒/me/settingsGet user settings🔒/me/settingsUpdate user settings🔒/me/guildsList servers you are a member of🔒/me/guilds/:guild_idLeave a server🔒/me/account-dataDelete or anonymize account data, subject to retention policy🔒/me/data-exportRequest an account data export (GDPR)🔒/me/presenceUpdate presence status and broadcast🔒/me/heartbeatPresence heartbeat to maintain online status🔒/me/keysUpload E2EE public key🔒/me/keys/prekeysUpload E2EE pre-keys🔒/me/keys/prekey-countGet remaining pre-key count🔒/me/devicesList registered devices🔒/me/devices/:device_idRemove a registered device🔒/me/premiumGet premium subscription status🔒/me/premium/subscribeSubscribe to premium🔒/me/premium/cancelCancel premium subscription🔒/me/connectionsList linked connections🔒/me/applications/:app_id/role-connectionGet application role connection🔒/me/applications/:app_id/role-connectionUpdate application role connection🔒/me/avatarUpload avatar image🔒/me/bannerUpload banner image🔒/searchSearch users by username or display name🔒/lookupLookup user by exact username/batchBatch get multiple users by IDs🔒/:user_idGet another user's public profile/:user_id/dmCreate or get a DM channel with a user🔒/:user_id/keys/claimClaim a user's E2EE pre-keys🔒Servers
Full server lifecycle — create, edit, delete, manage channels, members, roles, bans, emojis, events, audit logs, stickers, templates, soundboard, onboarding, and more.
Base: /api/servers
⏱ Rate limit: 100 req/10s (server) · 120 req/10s (members) · 80 req/10s (roles) · 40 req/10s (bans, invites, audit-logs)
/Create a new server🔒/importImport a server from template🔒/:server_idGet server details/:server_idEdit server (name, icon, banner, description, etc.)🔒/:server_idDelete a server (owner only)🔒/:server_id/channelsCreate a channel in a server🔒/:server_id/channelsList all channels in a server/:server_id/channelsReorder channels🔒/:server_id/membersList all members/:server_id/members/searchSearch members by name🔒/:server_id/members/:user_idGet a single member/:server_id/members/:user_idEdit a member (nickname, roles, timeout)🔒/:server_id/members/:user_idKick a member🔒/:server_id/members/@meModify your own member profile🔒/:server_id/members/@me/nickChange own nickname🔒/:server_id/members/:user_id/roles/:role_idAdd a role to a member🔒/:server_id/members/:user_id/roles/:role_idRemove a role from a member🔒/:server_id/pruneGet prune count (inactive members)🔒/:server_id/prunePrune inactive members🔒/:server_id/onlineGet online member IDs/:server_id/leaveLeave a server🔒/:server_id/joinJoin a public server (no invite needed)🔒/:server_id/invitesCreate an invite link🔒/:server_id/invitesList all invites🔒/:server_id/invites/:invite_code/usesGet invite usage history🔒/join/:invite_codeJoin a server via invite🔒/:server_id/boostsList server boosts🔒/:server_id/boostsBoost a server🔒/:server_id/boostsRemove boost from server🔒/:server_id/bansList all bans🔒/:server_id/bans/:user_idGet a single ban🔒/:server_id/bans/:user_idBan a member🔒/:server_id/bans/:user_idUnban a user🔒/:server_id/bulk-banBulk ban multiple members🔒/:server_id/rolesList all roles/:server_id/rolesCreate a role🔒/:server_id/rolesReorder roles🔒/:server_id/roles/:role_idEdit a role🔒/:server_id/roles/:role_idDelete a role🔒/:server_id/emojisList custom emojis/:server_id/emojisUpload a custom emoji🔒/:server_id/emojis/:emoji_idEdit a custom emoji🔒/:server_id/emojis/:emoji_idDelete a custom emoji🔒/:server_id/audit-logsGet audit log entries🔒/:server_id/scheduled-eventsList scheduled events/:server_id/scheduled-eventsCreate a scheduled event🔒/:server_id/scheduled-events/:event_idEdit a scheduled event🔒/:server_id/scheduled-events/:event_idDelete a scheduled event🔒/:server_id/scheduled-events/:event_id/usersList event RSVPs/:server_id/scheduled-events/:event_id/usersRSVP to an event🔒/:server_id/scheduled-events/:event_id/usersRemove RSVP🔒/:server_id/auto-moderation/rulesList AutoMod rules🔒/:server_id/auto-moderation/rulesCreate an AutoMod rule🔒/:server_id/auto-moderation/rules/:rule_idEdit an AutoMod rule🔒/:server_id/auto-moderation/rules/:rule_idDelete an AutoMod rule🔒/:server_id/stickersList server stickers/:server_id/stickersCreate a sticker🔒/:server_id/stickers/:sticker_idEdit a sticker🔒/:server_id/stickers/:sticker_idDelete a sticker🔒/:server_id/stickers/importImport a messenger app sticker pack🔒/:server_id/emoji-packsList imported emoji packs🔒/:server_id/emoji-packs/importImport a messenger app emoji pack🔒/:server_id/emoji-packs/import-urlImport emoji pack from URL🔒/:server_id/emoji-packs/import-discordImport emojis from Discord server🔒/:server_id/emoji-packs/:pack_idGet emoji pack items🔒/:server_id/emoji-packs/:pack_idRemove an emoji pack from server🔒/:server_id/templatesList server templates/:server_id/templatesCreate a template from server🔒/:server_id/templates/:template_codeEdit a template🔒/:server_id/templates/:template_codeSync template with server🔒/:server_id/templates/:template_codeDelete a template🔒/:server_id/onboardingGet onboarding config/:server_id/onboardingUpdate onboarding🔒/:server_id/soundboard-soundsList soundboard sounds/:server_id/soundboard-soundsUpload a soundboard sound🔒/:server_id/soundboard-sounds/:sound_idEdit a soundboard sound🔒/:server_id/soundboard-sounds/:sound_idDelete a soundboard sound🔒/:server_id/voice-statesGet all voice states/:server_id/vanity-urlGet vanity URL🔒/:server_id/vanity-urlSet vanity URL🔒/:server_id/widget.jsonGet server widget JSON/:server_id/widgetGet widget settings🔒/:server_id/widgetUpdate widget settings🔒/:server_id/welcome-screenGet welcome screen config/:server_id/welcome-screenUpdate welcome screen🔒/:server_id/member-verificationGet verification gate/:server_id/member-verificationUpdate verification gate🔒/:server_id/member-verification/acceptAccept verification🔒/:server_id/threads/activeList active threads/:server_id/previewGet guild preview/:server_id/webhooksList all server webhooks🔒/:server_id/mfaSet MFA level requirement🔒/:server_id/mutesList your channel mutes in this server🔒/:server_id/personasList all personas in server🔒/:server_id/personasCreate a persona🔒/:server_id/personas/@meList your own personas in server🔒/:server_id/personas/:persona_idGet a persona🔒/:server_id/personas/:persona_idEdit a persona🔒/:server_id/personas/:persona_idDelete a persona🔒Channels
Channel operations — messages, reactions, threads, pins, invites, webhooks, voice, file uploads, polls, forum posts, permissions, and search.
Base: /api/channels
⏱ Rate limit: 200 req/5s (messages) · 120 req/10s (channel ops) · 30 req/5s (typing) · 1 req/250ms (reactions)
/:channel_idGet channel details/:channel_idEdit channel (name, topic, NSFW, slowmode, etc.)🔒/:channel_idDelete a channel🔒/:channel_id/messagesGet messages (supports before, after, limit)/:channel_id/messages/:message_idGet a single message/:channel_id/messagesSend a message🔒/:channel_id/messages/:message_idEdit a message🔒/:channel_id/messages/:message_idDelete a message🔒/:channel_id/messages/bulk-deleteBulk delete messages (up to 100)🔒/:channel_id/messages/searchSearch messages (full-text)🔒/:channel_id/messages/:message_id/ackAcknowledge (mark as read)🔒/:channel_id/messages/translateBatch translate visible messages🔒/:channel_id/messages/:message_id/transcribeOn-demand voice note transcription🔒/:channel_id/messages/:message_id/forwardForward a message to another channel🔒/:channel_id/messages/:message_id/reactions/:emojiAdd a reaction🔒/:channel_id/messages/:message_id/reactions/:emojiRemove a reaction🔒/:channel_id/messages/:message_id/reactions/:emojiGet users who reacted/:channel_id/messages/:message_id/reactionsDelete all reactions🔒/:channel_id/messages/:message_id/reactions/:emoji/allDelete all reactions for an emoji🔒/:channel_id/threadsCreate a thread🔒/:channel_id/threads/archived/publicGet archived public threads/:channel_id/threads/archived/privateGet archived private threads🔒/:channel_id/thread-members/@meJoin a thread🔒/:channel_id/thread-members/@meLeave a thread🔒/:channel_id/thread-members/:user_idAdd a thread member🔒/:channel_id/thread-members/:user_idRemove a thread member🔒/:channel_id/thread-membersList thread members🔒/:channel_id/pinsGet pinned messages/:channel_id/pins/:message_idPin a message🔒/:channel_id/pins/:message_idUnpin a message🔒/:channel_id/invitesList channel invites🔒/:channel_id/invitesCreate a channel invite🔒/:channel_id/invites/:invite_codeDelete an invite🔒/:channel_id/webhooksList channel webhooks🔒/:channel_id/webhooksCreate a webhook🔒/:channel_id/uploadUpload a file (multipart)🔒/:channel_id/voice/connectGet a LiveKit token for voice🔒/:channel_id/voice/stateUpdate voice state (mute, deafen)🔒/:channel_id/voice/disconnectDisconnect from voice channel🔒/:channel_id/voice/mute-allServer mute all voice participants🔒/:channel_id/voice/mute-userServer mute a specific user in voice🔒/:channel_id/messages/:message_id/poll/voteVote on a poll🔒/:channel_id/messages/:message_id/poll/endEnd a poll🔒/:channel_id/messages/:message_id/poll/extendExtend poll duration🔒/:channel_id/messages/:message_id/poll/:answer_id/votersGet voters for a poll answer/:channel_id/messages/:message_id/checklist/toggleToggle a checklist item🔒/:channel_id/messages/:message_id/interactionsSubmit a component interaction🔒/:channel_id/forum-postsCreate a forum post🔒/:channel_id/forum-postsList forum posts/:channel_id/tagsUpdate forum tags🔒/:channel_id/typingTrigger typing indicator🔒/:channel_id/permissionsList permission overwrites🔒/:channel_id/permissions/:overwrite_idSet permission overwrite🔒/:channel_id/permissions/:overwrite_idDelete permission overwrite🔒/:channel_id/recipients/:user_idAdd group DM recipient🔒/:channel_id/recipients/:user_idRemove group DM recipient🔒/:channel_id/messages/:message_id/crosspostCrosspost an announcement message🔒/:channel_id/followersFollow an announcement channel🔒/:channel_id/thread-countsGet thread reply counts🔒/:channel_id/membersList channel members🔒/:channel_id/rollRoll dice (server-side, tamper-proof)🔒/:channel_id/coinflipCoin flip (server-side, tamper-proof)🔒/:channel_id/muteMute a channel (self-mute)🔒/:channel_id/muteUnmute a channel🔒Webhooks
Execute, manage, and configure incoming webhooks. Supports both authenticated and token-based access for bot integrations.
Base: /api/webhooks
⏱ Rate limit: 60 req/5s
/:webhook_id/:tokenExecute a webhook (no auth required)/:webhook_idGet webhook details🔒/:webhook_idEdit a webhook (name, avatar, channel)🔒/:webhook_idDelete a webhook🔒/:webhook_id/:tokenGet webhook details (token auth)/:webhook_id/:tokenEdit a webhook (token auth)/:webhook_id/:tokenDelete a webhook (token auth)/:webhook_id/:token/messagesCreate followup message/:webhook_id/:token/messages/:message_idEdit followup message/:webhook_id/:token/messages/:message_idDelete followup messageFriends
Friend requests, acceptance, removal, and blocking.
Base: /api/friends
⏱ Rate limit: 80 req/10s
/List all friendships🔒/:user_idSend a friend request🔒/:user_id/acceptAccept a pending friend request🔒/:user_idRemove or reject a friendship🔒/:user_id/blockBlock a user🔒OAuth2
Full OAuth2 authorization code flow for third-party app integrations.
Base: /api/oauth2
⏱ Rate limit: 40 req/10s
/applicationsRegister a new OAuth2 application🔒/applicationsList your applications🔒/applications/:app_idGet application details🔒/applications/:app_idEdit an application🔒/applications/:app_idDelete an application🔒/applications/:app_id/botCreate a bot user for an application🔒/authorizeShow authorization consent screen🔒/authorizeGenerate an authorization code🔒/tokenExchange auth code for access token/token/revokeRevoke a token/@meGet current application info from Bearer token🔒Application Commands
Register and manage slash commands, guild-scoped commands, permissions, and role connection metadata.
Base: /api/applications
/:app_id/commandsList global commands🔒/:app_id/commandsCreate a global command🔒/:app_id/commandsBulk overwrite all global commands🔒/:app_id/commands/:command_idDelete a global command🔒/:app_id/guilds/:guild_id/commandsList guild-scoped commands🔒/:app_id/guilds/:guild_id/commandsCreate a guild-scoped command🔒/:app_id/guilds/:guild_id/commands/:cmd_id/permissionsGet command permissions🔒/:app_id/guilds/:guild_id/commands/:cmd_id/permissionsSet command permissions🔒/:app_id/role-connections/metadataGet role connection metadata🔒/:app_id/role-connections/metadataUpdate role connection metadata🔒Interactions
Interaction callback endpoint for responding to slash commands, buttons, modals, and select menus.
Base: /api/interactions
/:interaction_id/:token/callbackSubmit an interaction response (pong, message, deferred, update)Stage Instances
Manage Stage channel instances for live audio events.
Base: /api/stage-instances
/:channel_idGet stage instance for a channel/:channel_idCreate a stage instance🔒/:channel_idEdit a stage instance🔒/:channel_idDelete a stage instance🔒Discovery
Browse, search, list, and unlist servers in the public directory.
Base: /api/discovery
⏱ Rate limit: 40 req/5s
/serversSearch/browse listed servers (search, category, sort, limit, offset)/serversList your server for discovery (owner only)🔒/servers/:server_idUnlist your server🔒/servers/:server_id/tagsUpdate listing tags🔒/categoriesList available discovery categories/tagsList all unique discovery tagsPlatform
Platform-wide utilities — server ordering, emoji/sticker search, server verification, and server analytics.
Base: /api/platform
/preferences/server_orderGet your server sidebar order🔒/preferences/server_orderSet your server sidebar order🔒/emojis/searchSearch emojis across all servers/stickers/searchSearch stickers across all servers/servers/:server_id/stickersList stickers for a server/servers/:server_id/verificationGet server verification status/servers/:server_id/verificationSet server verification (admin)🔒/servers/:server_id/analyticsGet server analytics summary🔒Voice Regions
List available voice server regions for optimal voice channel routing.
Base: /api/voice
/regionsList available voice regionsInvites
Resolve and revoke invite links. These top-level routes operate on invite codes directly without needing a server context.
Base: /api/invites
/:codeResolve invite info (server name, icon, member count)/:codeRevoke an invite by code🔒Transcription
Voice note transcription powered by Faster-Whisper (OpenAI-compatible). Accepts audio files and returns transcribed text.
Base: /api/transcribe
/Transcribe an audio file (multipart upload)🔒Translation
Real-time text translation powered by self-hosted TranslateGemma. Supports auto-detection of source language.
Base: /api/translate
/Translate text to a target language🔒Emoji Packs
Lookup, browse, and discover messenger-app-compatible emoji packs available for import.
Base: /api/emoji-packs
/lookupLookup an emoji pack by name/browseBrowse all available emoji packs/:pack_idGet emoji pack items directlyFiles
Serve uploaded files (images, voice notes, attachments) by file ID.
Base: /api/files
/:file_idServe an uploaded fileIntegrations
Manage third-party integrations (bots, Twitch, etc.) for a server.
Base: /api/guilds
/:server_id/integrationsList guild integrations🔒/:server_id/integrations/:integration_idRemove an integration🔒Entitlements
Manage premium entitlements and SKUs for monetized applications.
Base: /api/applications
/:app_id/entitlementsList entitlements (filter by user, SKU)🔒/:app_id/entitlements/:entitlement_id/consumeConsume a one-time entitlement🔒/:app_id/skusList SKUs for an application🔒Reports
Submit content or user reports for moderation review.
Base: /api/reports
/Submit a report (message, user, server, or channel)🔒Admin
Platform administration — system stats, user/server/bot management, report resolution, emoji/sticker pack admin, and platform config. Requires platform_admin role.
Base: /api/admin
/statsGet system-wide statistics🔒/usersList all users (paginated)🔒/users/batch-verifyBatch verify user emails🔒/users/clear-broken-avatarsClear broken avatar references🔒/users/:user_idUpdate user (disable, set role)🔒/users/:user_idHard-delete a user🔒/users/:user_id/exportExport user data (admin)🔒/users/:user_id/resend-verificationResend verification email for user🔒/serversList all servers (paginated)🔒/servers/duplicate-namesFind public servers with duplicate names🔒/servers/:server_idForce-delete a server🔒/servers/listings/:listing_idRemove a public server listing🔒/reportsList content reports (paginated)🔒/reports/:report_idResolve or dismiss a report🔒/audit-logAdmin audit log🔒/configGet platform configuration🔒/configUpdate platform configuration🔒/registration-ipsList registration IPs with abuse flagging🔒/botsList all bot accounts🔒/bots/:user_id/tokenRevoke a bot token🔒/emoji-packsList platform emoji packs🔒/emoji-packsDelete all platform emoji packs🔒/emoji-packs/importImport a platform emoji pack🔒/emoji-packs/:pack_idDelete an emoji pack🔒/emoji-packs/:pack_id/redownloadRe-download emoji pack assets🔒/emoji-packs/:pack_id/retry-failedRetry failed emoji downloads🔒/emoji-packs/:pack_id/toggle-platformToggle pack platform visibility🔒/sticker-packsList platform sticker packs🔒/sticker-packsDelete all platform sticker packs🔒/sticker-packs/importImport a platform sticker pack🔒/sticker-packs/:pack_idDelete a sticker pack🔒/sticker-packs/:pack_id/redownloadRe-download sticker pack assets🔒/sticker-packs/:pack_id/retry-failedRetry failed sticker downloads🔒/sticker-packs/:pack_id/toggle-platformToggle sticker pack platform visibility🔒GIF & Stickers
Search and browse trending GIFs and stickers via the KLIPY proxy.
Base: /api/gif
/trendingGet trending GIFs/searchSearch GIFs by query/stickers/trendingGet trending stickers/stickers/searchSearch stickers by queryGateway (WebSocket)
WebSocket connection for real-time events. Supports IDENTIFY, RESUME, heartbeat, intents, and all standard gateway opcodes.
Base: /api/gateway
⏱ Rate limit: 1 req/5s (connect)
/WebSocket upgrade — connect to the real-time event stream🔒/botGet gateway bot info (recommended shards, session limits)🔒Authentication
Include a JWT token in the Authorization header for all authenticated requests:
Authorization: Bearer <your-jwt-token>Obtain a token via POST /api/auth/register or POST /api/auth/login. Bot tokens last 365 days; user tokens last 7 days.
Rate Limiting
Every endpoint is rate-limited. When you exceed a limit, you get 429 Too Many Requests with a Retry-After header. The API uses a token-bucket algorithm backed by Redis and returns Discord-compatible headers.
Response Headers
Per-Route Limits
| Route Pattern | Limit | Window |
|---|---|---|
/api/auth/register | 3 | 60s |
/api/auth/* | 20 | 60s |
/api/channels/*/messages | 200 | 5s |
/api/channels/*/messages/bulk-delete | 2 | 3s |
/api/channels/*/messages/*/reactions | 1 | 250ms |
/api/channels/*/typing | 30 | 5s |
/api/channels/*/pins | 20 | 5s |
/api/channels/* | 120 | 10s |
/api/servers/*/members | 120 | 10s |
/api/servers/*/bans | 40 | 10s |
/api/servers/*/roles | 80 | 10s |
/api/servers/*/invites | 40 | 10s |
/api/servers/*/audit-logs | 40 | 10s |
/api/servers/* | 100 | 10s |
/api/webhooks/* | 60 | 5s |
/api/users/*/dm | 40 | 5s |
/api/users/me/settings | 40 | 10s |
/api/users/me/presence | 20 | 60s |
/api/users/* | 300 | 10s |
/api/oauth2/* | 40 | 10s |
/api/gateway | 1 | 5s |
/api/discovery/* | 40 | 5s |
/api/friends/* | 80 | 10s |
| All other routes | 200 | 1s |
Global Limits
Gateway Opcodes
The WebSocket gateway uses standard opcodes:
Error Responses
All errors return a JSON body with a descriptive message:
{
"error": "Descriptive error message"
}