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

315 Endpoints
24 Sections
Auth: Bearer <JWT>
Format: JSON

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.

POST/registerCreate a new user account
POST/loginLog in with email and password
POST/botGenerate a long-lived bot token (365 days)
POST/verify-emailVerify email with a 6-digit code
POST/resend-verificationResend verification email
POST/inbound-emailWebhook for inbound email verification

Users

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)

GET/meGet your own profile🔒
PATCH/meUpdate your profile (display name, avatar, bio, banner)🔒
GET/me/unreadsGet unread message counts across all channels🔒
POST/me/passwordChange your password🔒
POST/me/totpSet up TOTP two-factor authentication🔒
POST/me/totp/verifyVerify a TOTP code🔒
POST/me/totp/disableDisable TOTP two-factor authentication🔒
GET/me/channelsList all DM and Group DM channels🔒
POST/me/channelsCreate a Group DM🔒
GET/me/settingsGet user settings🔒
PATCH/me/settingsUpdate user settings🔒
GET/me/guildsList servers you are a member of🔒
DELETE/me/guilds/:guild_idLeave a server🔒
DELETE/me/account-dataDelete or anonymize account data, subject to retention policy🔒
GET/me/data-exportRequest an account data export (GDPR)🔒
PUT/me/presenceUpdate presence status and broadcast🔒
POST/me/heartbeatPresence heartbeat to maintain online status🔒
PUT/me/keysUpload E2EE public key🔒
PUT/me/keys/prekeysUpload E2EE pre-keys🔒
GET/me/keys/prekey-countGet remaining pre-key count🔒
GET/me/devicesList registered devices🔒
DELETE/me/devices/:device_idRemove a registered device🔒
GET/me/premiumGet premium subscription status🔒
POST/me/premium/subscribeSubscribe to premium🔒
POST/me/premium/cancelCancel premium subscription🔒
GET/me/connectionsList linked connections🔒
GET/me/applications/:app_id/role-connectionGet application role connection🔒
PUT/me/applications/:app_id/role-connectionUpdate application role connection🔒
POST/me/avatarUpload avatar image🔒
POST/me/bannerUpload banner image🔒
GET/searchSearch users by username or display name🔒
GET/lookupLookup user by exact username
POST/batchBatch get multiple users by IDs🔒
GET/:user_idGet another user's public profile
POST/:user_id/dmCreate or get a DM channel with a user🔒
POST/: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)

POST/Create a new server🔒
POST/importImport a server from template🔒
GET/:server_idGet server details
PATCH/:server_idEdit server (name, icon, banner, description, etc.)🔒
DELETE/:server_idDelete a server (owner only)🔒
POST/:server_id/channelsCreate a channel in a server🔒
GET/:server_id/channelsList all channels in a server
PATCH/:server_id/channelsReorder channels🔒
GET/:server_id/membersList all members
GET/:server_id/members/searchSearch members by name🔒
GET/:server_id/members/:user_idGet a single member
PATCH/:server_id/members/:user_idEdit a member (nickname, roles, timeout)🔒
DELETE/:server_id/members/:user_idKick a member🔒
PATCH/:server_id/members/@meModify your own member profile🔒
PATCH/:server_id/members/@me/nickChange own nickname🔒
PUT/:server_id/members/:user_id/roles/:role_idAdd a role to a member🔒
DELETE/:server_id/members/:user_id/roles/:role_idRemove a role from a member🔒
GET/:server_id/pruneGet prune count (inactive members)🔒
POST/:server_id/prunePrune inactive members🔒
GET/:server_id/onlineGet online member IDs
POST/:server_id/leaveLeave a server🔒
POST/:server_id/joinJoin a public server (no invite needed)🔒
POST/:server_id/invitesCreate an invite link🔒
GET/:server_id/invitesList all invites🔒
GET/:server_id/invites/:invite_code/usesGet invite usage history🔒
POST/join/:invite_codeJoin a server via invite🔒
GET/:server_id/boostsList server boosts🔒
POST/:server_id/boostsBoost a server🔒
DELETE/:server_id/boostsRemove boost from server🔒
GET/:server_id/bansList all bans🔒
GET/:server_id/bans/:user_idGet a single ban🔒
PUT/:server_id/bans/:user_idBan a member🔒
DELETE/:server_id/bans/:user_idUnban a user🔒
POST/:server_id/bulk-banBulk ban multiple members🔒
GET/:server_id/rolesList all roles
POST/:server_id/rolesCreate a role🔒
PATCH/:server_id/rolesReorder roles🔒
PATCH/:server_id/roles/:role_idEdit a role🔒
DELETE/:server_id/roles/:role_idDelete a role🔒
GET/:server_id/emojisList custom emojis
POST/:server_id/emojisUpload a custom emoji🔒
PATCH/:server_id/emojis/:emoji_idEdit a custom emoji🔒
DELETE/:server_id/emojis/:emoji_idDelete a custom emoji🔒
GET/:server_id/audit-logsGet audit log entries🔒
GET/:server_id/scheduled-eventsList scheduled events
POST/:server_id/scheduled-eventsCreate a scheduled event🔒
PATCH/:server_id/scheduled-events/:event_idEdit a scheduled event🔒
DELETE/:server_id/scheduled-events/:event_idDelete a scheduled event🔒
GET/:server_id/scheduled-events/:event_id/usersList event RSVPs
PUT/:server_id/scheduled-events/:event_id/usersRSVP to an event🔒
DELETE/:server_id/scheduled-events/:event_id/usersRemove RSVP🔒
GET/:server_id/auto-moderation/rulesList AutoMod rules🔒
POST/:server_id/auto-moderation/rulesCreate an AutoMod rule🔒
PATCH/:server_id/auto-moderation/rules/:rule_idEdit an AutoMod rule🔒
DELETE/:server_id/auto-moderation/rules/:rule_idDelete an AutoMod rule🔒
GET/:server_id/stickersList server stickers
POST/:server_id/stickersCreate a sticker🔒
PATCH/:server_id/stickers/:sticker_idEdit a sticker🔒
DELETE/:server_id/stickers/:sticker_idDelete a sticker🔒
POST/:server_id/stickers/importImport a messenger app sticker pack🔒
GET/:server_id/emoji-packsList imported emoji packs🔒
POST/:server_id/emoji-packs/importImport a messenger app emoji pack🔒
POST/:server_id/emoji-packs/import-urlImport emoji pack from URL🔒
POST/:server_id/emoji-packs/import-discordImport emojis from Discord server🔒
GET/:server_id/emoji-packs/:pack_idGet emoji pack items🔒
DELETE/:server_id/emoji-packs/:pack_idRemove an emoji pack from server🔒
GET/:server_id/templatesList server templates
POST/:server_id/templatesCreate a template from server🔒
PATCH/:server_id/templates/:template_codeEdit a template🔒
PUT/:server_id/templates/:template_codeSync template with server🔒
DELETE/:server_id/templates/:template_codeDelete a template🔒
GET/:server_id/onboardingGet onboarding config
PUT/:server_id/onboardingUpdate onboarding🔒
GET/:server_id/soundboard-soundsList soundboard sounds
POST/:server_id/soundboard-soundsUpload a soundboard sound🔒
PATCH/:server_id/soundboard-sounds/:sound_idEdit a soundboard sound🔒
DELETE/:server_id/soundboard-sounds/:sound_idDelete a soundboard sound🔒
GET/:server_id/voice-statesGet all voice states
GET/:server_id/vanity-urlGet vanity URL🔒
PATCH/:server_id/vanity-urlSet vanity URL🔒
GET/:server_id/widget.jsonGet server widget JSON
GET/:server_id/widgetGet widget settings🔒
PATCH/:server_id/widgetUpdate widget settings🔒
GET/:server_id/welcome-screenGet welcome screen config
PATCH/:server_id/welcome-screenUpdate welcome screen🔒
GET/:server_id/member-verificationGet verification gate
PUT/:server_id/member-verificationUpdate verification gate🔒
POST/:server_id/member-verification/acceptAccept verification🔒
GET/:server_id/threads/activeList active threads
GET/:server_id/previewGet guild preview
GET/:server_id/webhooksList all server webhooks🔒
POST/:server_id/mfaSet MFA level requirement🔒
GET/:server_id/mutesList your channel mutes in this server🔒
GET/:server_id/personasList all personas in server🔒
POST/:server_id/personasCreate a persona🔒
GET/:server_id/personas/@meList your own personas in server🔒
GET/:server_id/personas/:persona_idGet a persona🔒
PATCH/:server_id/personas/:persona_idEdit a persona🔒
DELETE/: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)

GET/:channel_idGet channel details
PATCH/:channel_idEdit channel (name, topic, NSFW, slowmode, etc.)🔒
DELETE/:channel_idDelete a channel🔒
GET/:channel_id/messagesGet messages (supports before, after, limit)
GET/:channel_id/messages/:message_idGet a single message
POST/:channel_id/messagesSend a message🔒
PATCH/:channel_id/messages/:message_idEdit a message🔒
DELETE/:channel_id/messages/:message_idDelete a message🔒
POST/:channel_id/messages/bulk-deleteBulk delete messages (up to 100)🔒
GET/:channel_id/messages/searchSearch messages (full-text)🔒
POST/:channel_id/messages/:message_id/ackAcknowledge (mark as read)🔒
POST/:channel_id/messages/translateBatch translate visible messages🔒
POST/:channel_id/messages/:message_id/transcribeOn-demand voice note transcription🔒
POST/:channel_id/messages/:message_id/forwardForward a message to another channel🔒
PUT/:channel_id/messages/:message_id/reactions/:emojiAdd a reaction🔒
DELETE/:channel_id/messages/:message_id/reactions/:emojiRemove a reaction🔒
GET/:channel_id/messages/:message_id/reactions/:emojiGet users who reacted
DELETE/:channel_id/messages/:message_id/reactionsDelete all reactions🔒
DELETE/:channel_id/messages/:message_id/reactions/:emoji/allDelete all reactions for an emoji🔒
POST/:channel_id/threadsCreate a thread🔒
GET/:channel_id/threads/archived/publicGet archived public threads
GET/:channel_id/threads/archived/privateGet archived private threads🔒
PUT/:channel_id/thread-members/@meJoin a thread🔒
DELETE/:channel_id/thread-members/@meLeave a thread🔒
PUT/:channel_id/thread-members/:user_idAdd a thread member🔒
DELETE/:channel_id/thread-members/:user_idRemove a thread member🔒
GET/:channel_id/thread-membersList thread members🔒
GET/:channel_id/pinsGet pinned messages
PUT/:channel_id/pins/:message_idPin a message🔒
DELETE/:channel_id/pins/:message_idUnpin a message🔒
GET/:channel_id/invitesList channel invites🔒
POST/:channel_id/invitesCreate a channel invite🔒
DELETE/:channel_id/invites/:invite_codeDelete an invite🔒
GET/:channel_id/webhooksList channel webhooks🔒
POST/:channel_id/webhooksCreate a webhook🔒
POST/:channel_id/uploadUpload a file (multipart)🔒
POST/:channel_id/voice/connectGet a LiveKit token for voice🔒
PATCH/:channel_id/voice/stateUpdate voice state (mute, deafen)🔒
DELETE/:channel_id/voice/disconnectDisconnect from voice channel🔒
POST/:channel_id/voice/mute-allServer mute all voice participants🔒
POST/:channel_id/voice/mute-userServer mute a specific user in voice🔒
PUT/:channel_id/messages/:message_id/poll/voteVote on a poll🔒
POST/:channel_id/messages/:message_id/poll/endEnd a poll🔒
PATCH/:channel_id/messages/:message_id/poll/extendExtend poll duration🔒
GET/:channel_id/messages/:message_id/poll/:answer_id/votersGet voters for a poll answer
PUT/:channel_id/messages/:message_id/checklist/toggleToggle a checklist item🔒
POST/:channel_id/messages/:message_id/interactionsSubmit a component interaction🔒
POST/:channel_id/forum-postsCreate a forum post🔒
GET/:channel_id/forum-postsList forum posts
PUT/:channel_id/tagsUpdate forum tags🔒
POST/:channel_id/typingTrigger typing indicator🔒
GET/:channel_id/permissionsList permission overwrites🔒
PUT/:channel_id/permissions/:overwrite_idSet permission overwrite🔒
DELETE/:channel_id/permissions/:overwrite_idDelete permission overwrite🔒
PUT/:channel_id/recipients/:user_idAdd group DM recipient🔒
DELETE/:channel_id/recipients/:user_idRemove group DM recipient🔒
POST/:channel_id/messages/:message_id/crosspostCrosspost an announcement message🔒
POST/:channel_id/followersFollow an announcement channel🔒
GET/:channel_id/thread-countsGet thread reply counts🔒
GET/:channel_id/membersList channel members🔒
POST/:channel_id/rollRoll dice (server-side, tamper-proof)🔒
POST/:channel_id/coinflipCoin flip (server-side, tamper-proof)🔒
PUT/:channel_id/muteMute a channel (self-mute)🔒
DELETE/: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

POST/:webhook_id/:tokenExecute a webhook (no auth required)
GET/:webhook_idGet webhook details🔒
PATCH/:webhook_idEdit a webhook (name, avatar, channel)🔒
DELETE/:webhook_idDelete a webhook🔒
GET/:webhook_id/:tokenGet webhook details (token auth)
PATCH/:webhook_id/:tokenEdit a webhook (token auth)
DELETE/:webhook_id/:tokenDelete a webhook (token auth)
POST/:webhook_id/:token/messagesCreate followup message
PATCH/:webhook_id/:token/messages/:message_idEdit followup message
DELETE/:webhook_id/:token/messages/:message_idDelete followup message

Friends

Friend requests, acceptance, removal, and blocking.

Base: /api/friends

⏱ Rate limit: 80 req/10s

GET/List all friendships🔒
POST/:user_idSend a friend request🔒
PUT/:user_id/acceptAccept a pending friend request🔒
DELETE/:user_idRemove or reject a friendship🔒
POST/:user_id/blockBlock a user🔒

OAuth2

Full OAuth2 authorization code flow for third-party app integrations.

Base: /api/oauth2

⏱ Rate limit: 40 req/10s

POST/applicationsRegister a new OAuth2 application🔒
GET/applicationsList your applications🔒
GET/applications/:app_idGet application details🔒
PATCH/applications/:app_idEdit an application🔒
DELETE/applications/:app_idDelete an application🔒
POST/applications/:app_id/botCreate a bot user for an application🔒
GET/authorizeShow authorization consent screen🔒
POST/authorizeGenerate an authorization code🔒
POST/tokenExchange auth code for access token
POST/token/revokeRevoke a token
GET/@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

GET/:app_id/commandsList global commands🔒
POST/:app_id/commandsCreate a global command🔒
PUT/:app_id/commandsBulk overwrite all global commands🔒
DELETE/:app_id/commands/:command_idDelete a global command🔒
GET/:app_id/guilds/:guild_id/commandsList guild-scoped commands🔒
POST/:app_id/guilds/:guild_id/commandsCreate a guild-scoped command🔒
GET/:app_id/guilds/:guild_id/commands/:cmd_id/permissionsGet command permissions🔒
PUT/:app_id/guilds/:guild_id/commands/:cmd_id/permissionsSet command permissions🔒
GET/:app_id/role-connections/metadataGet role connection metadata🔒
PUT/: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

POST/: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

GET/:channel_idGet stage instance for a channel
POST/:channel_idCreate a stage instance🔒
PATCH/:channel_idEdit a stage instance🔒
DELETE/:channel_idDelete a stage instance🔒

Discovery

Browse, search, list, and unlist servers in the public directory.

Base: /api/discovery

⏱ Rate limit: 40 req/5s

GET/serversSearch/browse listed servers (search, category, sort, limit, offset)
POST/serversList your server for discovery (owner only)🔒
DELETE/servers/:server_idUnlist your server🔒
PATCH/servers/:server_id/tagsUpdate listing tags🔒
GET/categoriesList available discovery categories
GET/tagsList all unique discovery tags

Platform

Platform-wide utilities — server ordering, emoji/sticker search, server verification, and server analytics.

Base: /api/platform

GET/preferences/server_orderGet your server sidebar order🔒
PUT/preferences/server_orderSet your server sidebar order🔒
GET/emojis/searchSearch emojis across all servers
GET/stickers/searchSearch stickers across all servers
GET/servers/:server_id/stickersList stickers for a server
GET/servers/:server_id/verificationGet server verification status
PUT/servers/:server_id/verificationSet server verification (admin)🔒
GET/servers/:server_id/analyticsGet server analytics summary🔒

Voice Regions

List available voice server regions for optimal voice channel routing.

Base: /api/voice

GET/regionsList available voice regions

Invites

Resolve and revoke invite links. These top-level routes operate on invite codes directly without needing a server context.

Base: /api/invites

GET/:codeResolve invite info (server name, icon, member count)
DELETE/: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

POST/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

POST/Translate text to a target language🔒

Emoji Packs

Lookup, browse, and discover messenger-app-compatible emoji packs available for import.

Base: /api/emoji-packs

GET/lookupLookup an emoji pack by name
GET/browseBrowse all available emoji packs
GET/:pack_idGet emoji pack items directly

Files

Serve uploaded files (images, voice notes, attachments) by file ID.

Base: /api/files

GET/:file_idServe an uploaded file

Integrations

Manage third-party integrations (bots, Twitch, etc.) for a server.

Base: /api/guilds

GET/:server_id/integrationsList guild integrations🔒
DELETE/:server_id/integrations/:integration_idRemove an integration🔒

Entitlements

Manage premium entitlements and SKUs for monetized applications.

Base: /api/applications

GET/:app_id/entitlementsList entitlements (filter by user, SKU)🔒
POST/:app_id/entitlements/:entitlement_id/consumeConsume a one-time entitlement🔒
GET/:app_id/skusList SKUs for an application🔒

Reports

Submit content or user reports for moderation review.

Base: /api/reports

POST/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

GET/statsGet system-wide statistics🔒
GET/usersList all users (paginated)🔒
POST/users/batch-verifyBatch verify user emails🔒
POST/users/clear-broken-avatarsClear broken avatar references🔒
PATCH/users/:user_idUpdate user (disable, set role)🔒
DELETE/users/:user_idHard-delete a user🔒
GET/users/:user_id/exportExport user data (admin)🔒
POST/users/:user_id/resend-verificationResend verification email for user🔒
GET/serversList all servers (paginated)🔒
GET/servers/duplicate-namesFind public servers with duplicate names🔒
DELETE/servers/:server_idForce-delete a server🔒
DELETE/servers/listings/:listing_idRemove a public server listing🔒
GET/reportsList content reports (paginated)🔒
PATCH/reports/:report_idResolve or dismiss a report🔒
GET/audit-logAdmin audit log🔒
GET/configGet platform configuration🔒
PUT/configUpdate platform configuration🔒
GET/registration-ipsList registration IPs with abuse flagging🔒
GET/botsList all bot accounts🔒
DELETE/bots/:user_id/tokenRevoke a bot token🔒
GET/emoji-packsList platform emoji packs🔒
DELETE/emoji-packsDelete all platform emoji packs🔒
POST/emoji-packs/importImport a platform emoji pack🔒
DELETE/emoji-packs/:pack_idDelete an emoji pack🔒
POST/emoji-packs/:pack_id/redownloadRe-download emoji pack assets🔒
POST/emoji-packs/:pack_id/retry-failedRetry failed emoji downloads🔒
POST/emoji-packs/:pack_id/toggle-platformToggle pack platform visibility🔒
GET/sticker-packsList platform sticker packs🔒
DELETE/sticker-packsDelete all platform sticker packs🔒
POST/sticker-packs/importImport a platform sticker pack🔒
DELETE/sticker-packs/:pack_idDelete a sticker pack🔒
POST/sticker-packs/:pack_id/redownloadRe-download sticker pack assets🔒
POST/sticker-packs/:pack_id/retry-failedRetry failed sticker downloads🔒
POST/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

GET/trendingGet trending GIFs
GET/searchSearch GIFs by query
GET/stickers/trendingGet trending stickers
GET/stickers/searchSearch stickers by query

Gateway (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)

WS/WebSocket upgrade — connect to the real-time event stream🔒
GET/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

X-RateLimit-LimitMaximum requests per window
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetUnix timestamp when the window resets
X-RateLimit-Reset-AfterSeconds until the window resets
X-RateLimit-BucketStable bucket identifier (SHA-256 hash)
Retry-AfterSeconds to wait before retrying (only on 429)

Per-Route Limits

Route PatternLimitWindow
/api/auth/register360s
/api/auth/*2060s
/api/channels/*/messages2005s
/api/channels/*/messages/bulk-delete23s
/api/channels/*/messages/*/reactions1250ms
/api/channels/*/typing305s
/api/channels/*/pins205s
/api/channels/*12010s
/api/servers/*/members12010s
/api/servers/*/bans4010s
/api/servers/*/roles8010s
/api/servers/*/invites4010s
/api/servers/*/audit-logs4010s
/api/servers/*10010s
/api/webhooks/*605s
/api/users/*/dm405s
/api/users/me/settings4010s
/api/users/me/presence2060s
/api/users/*30010s
/api/oauth2/*4010s
/api/gateway15s
/api/discovery/*405s
/api/friends/*8010s
All other routes2001s

Global Limits

Global4,000 req/s per authenticated user across all routes
IP Flood600 req/60s per IP address (all requests)
IP Auth15 req/60s per IP for auth endpoints specifically

Gateway Opcodes

The WebSocket gateway uses standard opcodes:

0Dispatch — server events (MESSAGE_CREATE, etc.)
1Heartbeat — keep connection alive
2Identify — authenticate with token + intents
3Presence Update — set status / activity
4Voice State Update — join / leave / mute
6Resume — reconnect with session ID
7Reconnect — server requests you reconnect
8Request Guild Members — query member list chunks
10Hello — sent on connect with heartbeat interval
11Heartbeat ACK — server acknowledges heartbeat

Error Responses

All errors return a JSON body with a descriptive message:

{
  "error": "Descriptive error message"
}
400Bad Request — invalid input
401Unauthorized — missing or invalid token
403Forbidden — insufficient permissions
404Not Found — resource doesn't exist
409Conflict — resource already exists
429Too Many Requests — rate limited
500Internal Server Error