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. Emails are encrypted at rest with AES-256-GCM — never stored in plaintext. Passwords are Argon2-hashed. There is no public endpoint to skip email verification.

POST /register Create a new user account
POST /login Log in with email and password
POST /bot Generate a long-lived bot token (365 days)
POST /verify-email Verify email with a 6-digit code
POST /resend-verification Resend verification email
POST /inbound-email Webhook 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 /me Get your own profile 🔒
PATCH /me Update your profile (display name, avatar, bio, banner) 🔒
GET /me/unreads Get unread message counts across all channels 🔒
POST /me/password Change your password 🔒
POST /me/totp Set up TOTP two-factor authentication 🔒
POST /me/totp/verify Verify a TOTP code 🔒
POST /me/totp/disable Disable TOTP two-factor authentication 🔒
GET /me/channels List all DM and Group DM channels 🔒
POST /me/channels Create a Group DM 🔒
GET /me/settings Get user settings 🔒
PATCH /me/settings Update user settings 🔒
GET /me/guilds List servers you are a member of 🔒
DELETE /me/guilds/:guild_id Leave a server 🔒
DELETE /me/account-data Delete all user data (messages, files, settings) 🔒
GET /me/data-export Export all account data (GDPR) 🔒
PUT /me/presence Update presence status and broadcast 🔒
POST /me/heartbeat Presence heartbeat to maintain online status 🔒
PUT /me/keys Upload E2EE public key 🔒
PUT /me/keys/prekeys Upload E2EE pre-keys 🔒
GET /me/keys/prekey-count Get remaining pre-key count 🔒
GET /me/devices List registered devices 🔒
DELETE /me/devices/:device_id Remove a registered device 🔒
GET /me/premium Get premium subscription status 🔒
POST /me/premium/subscribe Subscribe to premium 🔒
POST /me/premium/cancel Cancel premium subscription 🔒
GET /me/connections List linked connections 🔒
GET /me/applications/:app_id/role-connection Get application role connection 🔒
PUT /me/applications/:app_id/role-connection Update application role connection 🔒
POST /me/avatar Upload avatar image 🔒
POST /me/banner Upload banner image 🔒
GET /search Search users by username or display name 🔒
GET /lookup Lookup user by exact username
POST /batch Batch get multiple users by IDs 🔒
GET /:user_id Get another user's public profile
POST /:user_id/dm Create or get a DM channel with a user 🔒
POST /:user_id/keys/claim Claim 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 /import Import a server from template 🔒
GET /:server_id Get server details
PATCH /:server_id Edit server (name, icon, banner, description, etc.) 🔒
DELETE /:server_id Delete a server (owner only) 🔒
POST /:server_id/channels Create a channel in a server 🔒
GET /:server_id/channels List all channels in a server
PATCH /:server_id/channels Reorder channels 🔒
GET /:server_id/members List all members
GET /:server_id/members/search Search members by name 🔒
GET /:server_id/members/:user_id Get a single member
PATCH /:server_id/members/:user_id Edit a member (nickname, roles, timeout) 🔒
DELETE /:server_id/members/:user_id Kick a member 🔒
PATCH /:server_id/members/@me Modify your own member profile 🔒
PATCH /:server_id/members/@me/nick Change own nickname 🔒
PUT /:server_id/members/:user_id/roles/:role_id Add a role to a member 🔒
DELETE /:server_id/members/:user_id/roles/:role_id Remove a role from a member 🔒
GET /:server_id/prune Get prune count (inactive members) 🔒
POST /:server_id/prune Prune inactive members 🔒
GET /:server_id/online Get online member IDs
POST /:server_id/leave Leave a server 🔒
POST /:server_id/join Join a public server (no invite needed) 🔒
POST /:server_id/invites Create an invite link 🔒
GET /:server_id/invites List all invites 🔒
GET /:server_id/invites/:invite_code/uses Get invite usage history 🔒
POST /join/:invite_code Join a server via invite 🔒
GET /:server_id/boosts List server boosts 🔒
POST /:server_id/boosts Boost a server 🔒
DELETE /:server_id/boosts Remove boost from server 🔒
GET /:server_id/bans List all bans 🔒
GET /:server_id/bans/:user_id Get a single ban 🔒
PUT /:server_id/bans/:user_id Ban a member 🔒
DELETE /:server_id/bans/:user_id Unban a user 🔒
POST /:server_id/bulk-ban Bulk ban multiple members 🔒
GET /:server_id/roles List all roles
POST /:server_id/roles Create a role 🔒
PATCH /:server_id/roles Reorder roles 🔒
PATCH /:server_id/roles/:role_id Edit a role 🔒
DELETE /:server_id/roles/:role_id Delete a role 🔒
GET /:server_id/emojis List custom emojis
POST /:server_id/emojis Upload a custom emoji 🔒
PATCH /:server_id/emojis/:emoji_id Edit a custom emoji 🔒
DELETE /:server_id/emojis/:emoji_id Delete a custom emoji 🔒
GET /:server_id/audit-logs Get audit log entries 🔒
GET /:server_id/scheduled-events List scheduled events
POST /:server_id/scheduled-events Create a scheduled event 🔒
PATCH /:server_id/scheduled-events/:event_id Edit a scheduled event 🔒
DELETE /:server_id/scheduled-events/:event_id Delete a scheduled event 🔒
GET /:server_id/scheduled-events/:event_id/users List event RSVPs
PUT /:server_id/scheduled-events/:event_id/users RSVP to an event 🔒
DELETE /:server_id/scheduled-events/:event_id/users Remove RSVP 🔒
GET /:server_id/auto-moderation/rules List AutoMod rules 🔒
POST /:server_id/auto-moderation/rules Create an AutoMod rule 🔒
PATCH /:server_id/auto-moderation/rules/:rule_id Edit an AutoMod rule 🔒
DELETE /:server_id/auto-moderation/rules/:rule_id Delete an AutoMod rule 🔒
GET /:server_id/stickers List server stickers
POST /:server_id/stickers Create a sticker 🔒
PATCH /:server_id/stickers/:sticker_id Edit a sticker 🔒
DELETE /:server_id/stickers/:sticker_id Delete a sticker 🔒
POST /:server_id/stickers/import Import a messenger app sticker pack 🔒
GET /:server_id/emoji-packs List imported emoji packs 🔒
POST /:server_id/emoji-packs/import Import a messenger app emoji pack 🔒
POST /:server_id/emoji-packs/import-url Import emoji pack from URL 🔒
POST /:server_id/emoji-packs/import-discord Import emojis from Discord server 🔒
GET /:server_id/emoji-packs/:pack_id Get emoji pack items 🔒
DELETE /:server_id/emoji-packs/:pack_id Remove an emoji pack from server 🔒
GET /:server_id/templates List server templates
POST /:server_id/templates Create a template from server 🔒
PATCH /:server_id/templates/:template_code Edit a template 🔒
PUT /:server_id/templates/:template_code Sync template with server 🔒
DELETE /:server_id/templates/:template_code Delete a template 🔒
GET /:server_id/onboarding Get onboarding config
PUT /:server_id/onboarding Update onboarding 🔒
GET /:server_id/soundboard-sounds List soundboard sounds
POST /:server_id/soundboard-sounds Upload a soundboard sound 🔒
PATCH /:server_id/soundboard-sounds/:sound_id Edit a soundboard sound 🔒
DELETE /:server_id/soundboard-sounds/:sound_id Delete a soundboard sound 🔒
GET /:server_id/voice-states Get all voice states
GET /:server_id/vanity-url Get vanity URL 🔒
PATCH /:server_id/vanity-url Set vanity URL 🔒
GET /:server_id/widget.json Get server widget JSON
GET /:server_id/widget Get widget settings 🔒
PATCH /:server_id/widget Update widget settings 🔒
GET /:server_id/welcome-screen Get welcome screen config
PATCH /:server_id/welcome-screen Update welcome screen 🔒
GET /:server_id/member-verification Get verification gate
PUT /:server_id/member-verification Update verification gate 🔒
POST /:server_id/member-verification/accept Accept verification 🔒
GET /:server_id/threads/active List active threads
GET /:server_id/preview Get guild preview
GET /:server_id/webhooks List all server webhooks 🔒
POST /:server_id/mfa Set MFA level requirement 🔒
GET /:server_id/mutes List your channel mutes in this server 🔒
GET /:server_id/personas List all personas in server 🔒
POST /:server_id/personas Create a persona 🔒
GET /:server_id/personas/@me List your own personas in server 🔒
GET /:server_id/personas/:persona_id Get a persona 🔒
PATCH /:server_id/personas/:persona_id Edit a persona 🔒
DELETE /:server_id/personas/:persona_id Delete 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_id Get channel details
PATCH /:channel_id Edit channel (name, topic, NSFW, slowmode, etc.) 🔒
DELETE /:channel_id Delete a channel 🔒
GET /:channel_id/messages Get messages (supports before, after, limit)
GET /:channel_id/messages/:message_id Get a single message
POST /:channel_id/messages Send a message 🔒
PATCH /:channel_id/messages/:message_id Edit a message 🔒
DELETE /:channel_id/messages/:message_id Delete a message 🔒
POST /:channel_id/messages/bulk-delete Bulk delete messages (up to 100) 🔒
GET /:channel_id/messages/search Search messages (full-text) 🔒
POST /:channel_id/messages/:message_id/ack Acknowledge (mark as read) 🔒
POST /:channel_id/messages/translate Batch translate visible messages 🔒
POST /:channel_id/messages/:message_id/transcribe On-demand voice note transcription 🔒
POST /:channel_id/messages/:message_id/forward Forward a message to another channel 🔒
PUT /:channel_id/messages/:message_id/reactions/:emoji Add a reaction 🔒
DELETE /:channel_id/messages/:message_id/reactions/:emoji Remove a reaction 🔒
GET /:channel_id/messages/:message_id/reactions/:emoji Get users who reacted
DELETE /:channel_id/messages/:message_id/reactions Delete all reactions 🔒
DELETE /:channel_id/messages/:message_id/reactions/:emoji/all Delete all reactions for an emoji 🔒
POST /:channel_id/threads Create a thread 🔒
GET /:channel_id/threads/archived/public Get archived public threads
GET /:channel_id/threads/archived/private Get archived private threads 🔒
PUT /:channel_id/thread-members/@me Join a thread 🔒
DELETE /:channel_id/thread-members/@me Leave a thread 🔒
PUT /:channel_id/thread-members/:user_id Add a thread member 🔒
DELETE /:channel_id/thread-members/:user_id Remove a thread member 🔒
GET /:channel_id/thread-members List thread members 🔒
GET /:channel_id/pins Get pinned messages
PUT /:channel_id/pins/:message_id Pin a message 🔒
DELETE /:channel_id/pins/:message_id Unpin a message 🔒
GET /:channel_id/invites List channel invites 🔒
POST /:channel_id/invites Create a channel invite 🔒
DELETE /:channel_id/invites/:invite_code Delete an invite 🔒
GET /:channel_id/webhooks List channel webhooks 🔒
POST /:channel_id/webhooks Create a webhook 🔒
POST /:channel_id/upload Upload a file (multipart) 🔒
POST /:channel_id/voice/connect Get a LiveKit token for voice 🔒
PATCH /:channel_id/voice/state Update voice state (mute, deafen) 🔒
DELETE /:channel_id/voice/disconnect Disconnect from voice channel 🔒
POST /:channel_id/voice/mute-all Server mute all voice participants 🔒
POST /:channel_id/voice/mute-user Server mute a specific user in voice 🔒
PUT /:channel_id/messages/:message_id/poll/vote Vote on a poll 🔒
POST /:channel_id/messages/:message_id/poll/end End a poll 🔒
PATCH /:channel_id/messages/:message_id/poll/extend Extend poll duration 🔒
GET /:channel_id/messages/:message_id/poll/:answer_id/voters Get voters for a poll answer
PUT /:channel_id/messages/:message_id/checklist/toggle Toggle a checklist item 🔒
POST /:channel_id/messages/:message_id/interactions Submit a component interaction 🔒
POST /:channel_id/forum-posts Create a forum post 🔒
GET /:channel_id/forum-posts List forum posts
PUT /:channel_id/tags Update forum tags 🔒
POST /:channel_id/typing Trigger typing indicator 🔒
GET /:channel_id/permissions List permission overwrites 🔒
PUT /:channel_id/permissions/:overwrite_id Set permission overwrite 🔒
DELETE /:channel_id/permissions/:overwrite_id Delete permission overwrite 🔒
PUT /:channel_id/recipients/:user_id Add group DM recipient 🔒
DELETE /:channel_id/recipients/:user_id Remove group DM recipient 🔒
POST /:channel_id/messages/:message_id/crosspost Crosspost an announcement message 🔒
POST /:channel_id/followers Follow an announcement channel 🔒
GET /:channel_id/thread-counts Get thread reply counts 🔒
GET /:channel_id/members List channel members 🔒
POST /:channel_id/roll Roll dice (server-side, tamper-proof) 🔒
POST /:channel_id/coinflip Coin flip (server-side, tamper-proof) 🔒
PUT /:channel_id/mute Mute a channel (self-mute) 🔒
DELETE /:channel_id/mute Unmute 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/:token Execute a webhook (no auth required)
GET /:webhook_id Get webhook details 🔒
PATCH /:webhook_id Edit a webhook (name, avatar, channel) 🔒
DELETE /:webhook_id Delete a webhook 🔒
GET /:webhook_id/:token Get webhook details (token auth)
PATCH /:webhook_id/:token Edit a webhook (token auth)
DELETE /:webhook_id/:token Delete a webhook (token auth)
POST /:webhook_id/:token/messages Create followup message
PATCH /:webhook_id/:token/messages/:message_id Edit followup message
DELETE /:webhook_id/:token/messages/:message_id Delete followup message

Friends

Friend requests, acceptance, removal, and blocking.

Base: /api/friends

⏱ Rate limit: 80 req/10s

GET / List all friendships 🔒
POST /:user_id Send a friend request 🔒
PUT /:user_id/accept Accept a pending friend request 🔒
DELETE /:user_id Remove or reject a friendship 🔒
POST /:user_id/block Block a user 🔒

OAuth2

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

Base: /api/oauth2

⏱ Rate limit: 40 req/10s

POST /applications Register a new OAuth2 application 🔒
GET /applications List your applications 🔒
GET /applications/:app_id Get application details 🔒
PATCH /applications/:app_id Edit an application 🔒
DELETE /applications/:app_id Delete an application 🔒
POST /applications/:app_id/bot Create a bot user for an application 🔒
GET /authorize Show authorization consent screen 🔒
POST /authorize Generate an authorization code 🔒
POST /token Exchange auth code for access token
POST /token/revoke Revoke a token
GET /@me Get 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/commands List global commands 🔒
POST /:app_id/commands Create a global command 🔒
PUT /:app_id/commands Bulk overwrite all global commands 🔒
DELETE /:app_id/commands/:command_id Delete a global command 🔒
GET /:app_id/guilds/:guild_id/commands List guild-scoped commands 🔒
POST /:app_id/guilds/:guild_id/commands Create a guild-scoped command 🔒
GET /:app_id/guilds/:guild_id/commands/:cmd_id/permissions Get command permissions 🔒
PUT /:app_id/guilds/:guild_id/commands/:cmd_id/permissions Set command permissions 🔒
GET /:app_id/role-connections/metadata Get role connection metadata 🔒
PUT /:app_id/role-connections/metadata Update role connection metadata 🔒

Interactions

Interaction callback endpoint for responding to slash commands, buttons, modals, and select menus.

Base: /api/interactions

POST /:interaction_id/:token/callback Submit an interaction response (pong, message, deferred, update)

Stage Instances

Manage Stage channel instances for live audio events.

Base: /api/stage-instances

GET /:channel_id Get stage instance for a channel
POST /:channel_id Create a stage instance 🔒
PATCH /:channel_id Edit a stage instance 🔒
DELETE /:channel_id Delete a stage instance 🔒

Discovery

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

Base: /api/discovery

⏱ Rate limit: 40 req/5s

GET /servers Search/browse listed servers (search, category, sort, limit, offset)
POST /servers List your server for discovery (owner only) 🔒
DELETE /servers/:server_id Unlist your server 🔒
PATCH /servers/:server_id/tags Update listing tags 🔒
GET /categories List available discovery categories
GET /tags List all unique discovery tags

Platform

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

Base: /api/platform

GET /preferences/server_order Get your server sidebar order 🔒
PUT /preferences/server_order Set your server sidebar order 🔒
GET /emojis/search Search emojis across all servers
GET /stickers/search Search stickers across all servers
GET /servers/:server_id/stickers List stickers for a server
GET /servers/:server_id/verification Get server verification status
PUT /servers/:server_id/verification Set server verification (admin) 🔒
GET /servers/:server_id/analytics Get server analytics summary 🔒

Voice Regions

List available voice server regions for optimal voice channel routing.

Base: /api/voice

GET /regions List 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 /:code Resolve invite info (server name, icon, member count)
DELETE /:code Revoke 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 /lookup Lookup an emoji pack by name
GET /browse Browse all available emoji packs
GET /:pack_id Get emoji pack items directly

Files

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

Base: /api/files

GET /:file_id Serve an uploaded file

Integrations

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

Base: /api/guilds

GET /:server_id/integrations List guild integrations 🔒
DELETE /:server_id/integrations/:integration_id Remove an integration 🔒

Entitlements

Manage premium entitlements and SKUs for monetized applications.

Base: /api/applications

GET /:app_id/entitlements List entitlements (filter by user, SKU) 🔒
POST /:app_id/entitlements/:entitlement_id/consume Consume a one-time entitlement 🔒
GET /:app_id/skus List 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 /stats Get system-wide statistics 🔒
GET /users List all users (paginated) 🔒
POST /users/batch-verify Batch verify user emails 🔒
POST /users/clear-broken-avatars Clear broken avatar references 🔒
PATCH /users/:user_id Update user (disable, set role) 🔒
DELETE /users/:user_id Hard-delete a user 🔒
GET /users/:user_id/export Export user data (admin) 🔒
POST /users/:user_id/resend-verification Resend verification email for user 🔒
GET /servers List all servers (paginated) 🔒
GET /servers/duplicate-names Find public servers with duplicate names 🔒
DELETE /servers/:server_id Force-delete a server 🔒
DELETE /servers/listings/:listing_id Remove a public server listing 🔒
GET /reports List content reports (paginated) 🔒
PATCH /reports/:report_id Resolve or dismiss a report 🔒
GET /audit-log Admin audit log 🔒
GET /config Get platform configuration 🔒
PUT /config Update platform configuration 🔒
GET /registration-ips List registration IPs with abuse flagging 🔒
GET /bots List all bot accounts 🔒
DELETE /bots/:user_id/token Revoke a bot token 🔒
GET /emoji-packs List platform emoji packs 🔒
DELETE /emoji-packs Delete all platform emoji packs 🔒
POST /emoji-packs/import Import a platform emoji pack 🔒
DELETE /emoji-packs/:pack_id Delete an emoji pack 🔒
POST /emoji-packs/:pack_id/redownload Re-download emoji pack assets 🔒
POST /emoji-packs/:pack_id/retry-failed Retry failed emoji downloads 🔒
POST /emoji-packs/:pack_id/toggle-platform Toggle pack platform visibility 🔒
GET /sticker-packs List platform sticker packs 🔒
DELETE /sticker-packs Delete all platform sticker packs 🔒
POST /sticker-packs/import Import a platform sticker pack 🔒
DELETE /sticker-packs/:pack_id Delete a sticker pack 🔒
POST /sticker-packs/:pack_id/redownload Re-download sticker pack assets 🔒
POST /sticker-packs/:pack_id/retry-failed Retry failed sticker downloads 🔒
POST /sticker-packs/:pack_id/toggle-platform Toggle sticker pack platform visibility 🔒

GIF & Stickers

Search and browse trending GIFs and stickers via the KLIPY proxy.

Base: /api/gif

GET /trending Get trending GIFs
GET /search Search GIFs by query
GET /stickers/trending Get trending stickers
GET /stickers/search Search 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 /bot Get 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