API Reference

The Loqa API is Discord-compatible by design. If you've built with the Discord API, you'll feel right at home. Base URL: https://api.loqa.chat

128 Endpoints
11 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

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)

Users

Manage user profiles, settings, DMs, presence, encryption keys, and guild membership.

Base: /api/users

GET /me Get your own profile 🔒
PATCH /me Update your profile (display name, avatar, bio, banner) 🔒
GET /:user_id Get another user's public profile
GET /me/channels List all DM and Group DM channels 🔒
POST /me/channels Create a Group DM 🔒
POST /:user_id/dm Create or get a DM channel with a user 🔒
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 🔒
PUT /me/presence Update presence status and broadcast 🔒
PUT /me/keys Upload E2EE public key 🔒

Servers

Full server lifecycle — create, edit, delete, manage channels, members, roles, bans, emojis, events, audit logs, and more.

Base: /api/servers

POST / Create a new server 🔒
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
GET /:server_id/members List all members
DELETE /:server_id/members/:user_id Kick a member 🔒
PATCH /:server_id/members/:user_id Edit a member (nickname, roles, timeout) 🔒
POST /:server_id/leave Leave a server 🔒
POST /:server_id/invites Create an invite link 🔒
GET /:server_id/invites List all invites 🔒
POST /join/:invite_code Join a server via invite 🔒
GET /:server_id/bans List all bans 🔒
PUT /:server_id/bans/:user_id Ban a member 🔒
DELETE /:server_id/bans/:user_id Unban a user 🔒
GET /:server_id/roles List all roles
POST /:server_id/roles Create a role 🔒
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 🔒
DELETE /:server_id/emojis/:emoji_id Delete a custom emoji 🔒
POST /:server_id/emojis/import Bulk import emoji pack 🔒
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/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/voice-states Get all voice states for a server
GET /:server_id/welcome-screen Get welcome screen config
PATCH /:server_id/welcome-screen Update welcome screen 🔒
GET /:server_id/verification-gate Get verification gate config
PATCH /:server_id/verification-gate Update verification gate 🔒
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 🔒
DELETE /:server_id/soundboard-sounds/:sound_id Delete a soundboard sound 🔒
GET /:server_id/templates Get server template
POST /:server_id/templates Create template from server 🔒

Channels

Channel operations — messages, reactions, threads, pins, invites, webhooks, voice, file uploads, polls, forum posts, and search.

Base: /api/channels

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)
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) 🔒
PUT /:channel_id/messages/:message_id/reactions/:emoji Add a reaction 🔒
DELETE /:channel_id/messages/:message_id/reactions/:emoji Remove a reaction 🔒
POST /:channel_id/threads Create 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 🔒
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 🔒
GET /:channel_id/messages/search Search messages (full-text) 🔒
PUT /:channel_id/messages/:message_id/ack Acknowledge (mark as read) 🔒
GET /:channel_id/typing Trigger typing indicator 🔒
PUT /:channel_id/messages/:message_id/polls/vote Vote on a poll 🔒
DELETE /:channel_id/messages/:message_id/polls/vote Remove poll vote 🔒
POST /:channel_id/messages/:message_id/interactions Submit a component interaction 🔒
GET /:channel_id/forum/posts List forum posts
POST /:channel_id/forum/posts Create a forum post 🔒
POST /:channel_id/messages/:message_id/crosspost Crosspost an announcement message 🔒
POST /:channel_id/followers Follow an announcement channel 🔒
PUT /:channel_id/permissions/:overwrite_id Edit channel permission overwrite 🔒
DELETE /:channel_id/permissions/:overwrite_id Delete channel permission overwrite 🔒

Webhooks

Execute, manage, and configure incoming webhooks.

Base: /api/webhooks

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 🔒

Friends

Friend requests, acceptance, removal, and blocking.

Base: /api/friends

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

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 /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 for bot applications.

Base: /api/applications

GET /:app_id/commands List all commands for an application 🔒
POST /:app_id/commands Create a new command 🔒
PUT /:app_id/commands Bulk overwrite all commands 🔒
DELETE /:app_id/commands/:command_id Delete a command 🔒

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

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 🔒
GET /categories List available discovery categories

Gateway (WebSocket)

WebSocket connection for real-time events. Supports IDENTIFY, RESUME, heartbeat, intents, and all Discord-compatible opcodes.

Base: /api/gateway

WS / WebSocket upgrade — connect to the real-time event stream 🔒

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

The API enforces rate limits per endpoint. When rate-limited, you'll receive a 429 Too Many Requests response with a Retry-After header indicating how long to wait (in seconds).

Gateway Opcodes

The WebSocket gateway uses Discord-compatible 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