Complete REST API documentation for HoloBridge. All endpoints require authentication via the X-API-Key header.
Navigation: Home | Getting Started | API Reference | WebSocket | Plugins | Security | Network
All API requests require the X-API-Key header with your configured API key.
curl -H "X-API-Key: your_api_key" http://localhost:3000/api/guilds
All responses follow a consistent format:
// Success
{
"success": true,
"data": { ... }
}
// Error
{
"success": false,
"error": "Error message",
"code": "ERROR_CODE"
}
| Code | Description |
|---|---|
UNAUTHORIZED |
Missing or invalid API key |
FORBIDDEN |
API key lacks required scope |
NOT_FOUND |
Resource not found |
VALIDATION_ERROR |
Invalid request body |
RATE_LIMITED |
Too many requests |
DISCORD_ERROR |
Discord API error |
/api/guildsList all guilds the bot is in.
curl -H "X-API-Key: your_key" http://localhost:3000/api/guilds
/api/guilds/:guildIdGet details of a specific guild.
curl -H "X-API-Key: your_key" http://localhost:3000/api/guilds/123456789
/api/guilds/:guildId/channelsGet all channels in a guild.
/api/guilds/:guildId/rolesGet all roles in a guild.
/api/guilds/:guildId/emojisGet all emojis in a guild.
/api/guilds/:guildId/bansGet all bans in a guild.
/api/guilds/:guildId/invitesGet all invites in a guild.
/api/channels/:channelIdGet a channel by ID.
/api/guilds/:guildId/channelsCreate a new channel in a guild.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Channel name (1-100 chars) |
type |
string | Yes | text, voice, category, announcement, stage, forum |
topic |
string | No | Channel topic (max 1024 chars) |
parentId |
string | No | Category ID |
position |
number | No | Channel position |
nsfw |
boolean | No | NSFW flag |
rateLimitPerUser |
number | No | Slowmode (0-21600 seconds) |
bitrate |
number | No | Voice channel bitrate |
userLimit |
number | No | Voice channel user limit (0-99) |
/api/channels/:channelIdEdit a channel. All fields are optional.
/api/channels/:channelIdDelete a channel.
/api/channels/:channelId/cloneClone a channel. Optionally provide a name in the request body.
/api/channels/:channelId/webhooksGet all webhooks for a channel.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/channels/:channelId/threads |
Create a thread |
| GET | /api/channels/:channelId/threads |
Get all threads |
| POST | /api/channels/:channelId/archive |
Archive a thread |
| DELETE | /api/channels/:channelId/archive |
Unarchive a thread |
| POST | /api/channels/:channelId/lock |
Lock a thread |
| DELETE | /api/channels/:channelId/lock |
Unlock a thread |
/api/channels/:channelId/messagesGet messages from a channel.
| Parameter | Type | Description |
|---|---|---|
limit |
number | Number of messages (1-100, default: 50) |
before |
string | Get messages before this ID |
after |
string | Get messages after this ID |
around |
string | Get messages around this ID |
/api/channels/:channelId/messages/pinnedGet pinned messages in a channel.
/api/channels/:channelId/messages/:messageIdGet a specific message by ID.
/api/channels/:channelId/messagesSend a message to a channel.
| Field | Type | Required | Description |
|---|---|---|---|
content |
string | No* | Message content (max 2000 chars) |
embeds |
array | No* | Array of embed objects |
replyTo |
string | No | Message ID to reply to |
tts |
boolean | No | Text-to-speech |
*Either content or at least one embed is required.
/api/channels/:channelId/messages/:messageIdEdit a message.
/api/channels/:channelId/messages/:messageIdDelete a message.
/api/channels/:channelId/messages/bulk-deleteBulk delete messages. Send messageIds array in body.
/api/channels/:channelId/messages/:messageId/crosspostCrosspost a message (for announcement channels).
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/channels/:channelId/messages/:messageId/reactions/:emoji |
Add reaction |
| DELETE | /api/channels/:channelId/messages/:messageId/reactions/:emoji |
Remove reaction |
| DELETE | /api/channels/:channelId/messages/:messageId/reactions |
Remove all reactions |
| GET | /api/channels/:channelId/messages/:messageId/reactions/:emoji/users |
Get reaction users |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/channels/:channelId/messages/:messageId/pin |
Pin a message |
| DELETE | /api/channels/:channelId/messages/:messageId/pin |
Unpin a message |
/api/guilds/:guildId/membersList all members in a guild.
| Parameter | Type | Description |
|---|---|---|
limit |
number | Max members to return (default: 1000) |
/api/guilds/:guildId/members/searchSearch members by username/nickname.
| Parameter | Type | Required | Description |
|---|---|---|---|
q |
string | Yes | Search query |
limit |
number | No | Max results (default: 20) |
/api/guilds/:guildId/members/:userIdGet a specific member.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/guilds/:guildId/members/:userId/kick |
Kick member |
| POST | /api/guilds/:guildId/members/:userId/ban |
Ban member |
| DELETE | /api/guilds/:guildId/bans/:userId |
Unban user |
| POST | /api/guilds/:guildId/members/:userId/timeout |
Timeout member |
| DELETE | /api/guilds/:guildId/members/:userId/timeout |
Remove timeout |
| Field | Type | Description |
|---|---|---|
reason |
string | Ban reason (max 512 chars) |
deleteMessageSeconds |
number | Seconds of messages to delete (0-604800) |
| Field | Type | Required | Description |
|---|---|---|---|
duration |
number | Yes | Duration in milliseconds |
reason |
string | No | Timeout reason |
| Method | Endpoint | Description |
|---|---|---|
| PATCH | /api/guilds/:guildId/members/:userId/nickname |
Set nickname |
| PATCH | /api/guilds/:guildId/members/:userId/roles |
Modify roles |
| Field | Type | Description |
|---|---|---|
add |
string[] | Role IDs to add |
remove |
string[] | Role IDs to remove |
/api/guilds/:guildId/rolesGet all roles in a guild.
/api/guilds/:guildId/roles/search?name=RoleNameSearch for a role by name.
/api/guilds/:guildId/roles/:roleIdGet a specific role.
/api/guilds/:guildId/rolesCreate a new role.
| Field | Type | Description |
|---|---|---|
name |
string | Role name (max 100 chars) |
color |
number | Color integer (0-16777215) |
hoist |
boolean | Display separately |
mentionable |
boolean | Allow mentions |
permissions |
string | Permission bitfield |
/api/guilds/:guildId/roles/:roleIdEdit a role. Same fields as create, plus position.
/api/guilds/:guildId/roles/:roleIdDelete a role.
/api/guilds/:guildId/roles/:roleId/membersGet all member IDs with a specific role.
/api/guilds/:guildId/roles/:roleId/permissionsSet role permissions. Send permissions (bitfield string) in body.
/api/guilds/:guildId/stickersList all stickers in a guild.
/api/guilds/:guildId/stickers/:stickerIdGet a specific sticker.
/api/guilds/:guildId/stickersCreate a new sticker.
/api/guilds/:guildId/stickers/:stickerIdEdit a sticker.
/api/guilds/:guildId/stickers/:stickerIdDelete a sticker.
/api/guilds/:guildId/scheduled-eventsList all scheduled events.
/api/guilds/:guildId/scheduled-events/:eventIdGet a specific event.
/api/guilds/:guildId/scheduled-eventsCreate a new event.
/api/guilds/:guildId/scheduled-events/:eventIdEdit an event.
/api/guilds/:guildId/scheduled-events/:eventIdDelete an event.
/api/guilds/:guildId/auto-moderation/rulesList all auto-moderation rules.
/api/guilds/:guildId/auto-moderation/rules/:ruleIdGet a specific rule.
/api/guilds/:guildId/auto-moderation/rulesCreate a new rule.
/api/guilds/:guildId/auto-moderation/rules/:ruleIdEdit a rule.
/api/guilds/:guildId/auto-moderation/rules/:ruleIdDelete a rule.
Endpoints: /api/stage-instances (GET, POST, PATCH, DELETE)
Endpoints: /api/invites/:code (GET, DELETE)
Endpoints: /api/webhooks/:webhookId (GET, PATCH, DELETE)
Endpoints: /api/guilds/:guildId/emojis (GET, POST, PATCH, DELETE)
Manage Discord Application Commands (Slash Commands) for your bot. Commands can be global (available in all guilds) or guild-specific.
/api/commandsList all global application commands.
curl -H "X-API-Key: your_key" http://localhost:3000/api/commands
/api/commands/:commandIdGet a specific global command by ID.
/api/commandsCreate a new global application command.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Command name (1-32 chars, lowercase) |
description |
string | Yes | Command description (1-100 chars) |
type |
number | No | 1=CHAT_INPUT (default), 2=USER, 3=MESSAGE |
options |
array | No | Command options (max 25) |
default_member_permissions |
string | No | Permission bitfield |
dm_permission |
boolean | No | Allow in DMs |
nsfw |
boolean | No | Age-restricted command |
curl -X POST -H "X-API-Key: your_key" -H "Content-Type: application/json" \
-d '{"name": "hello", "description": "Says hello"}' \
http://localhost:3000/api/commands
/api/commands/:commandIdEdit a global application command. All fields optional.
/api/commands/:commandIdDelete a global application command.
Guild commands are only available in the specified guild. They update instantly (unlike global commands which can take up to an hour).
/api/guilds/:guildId/commandsList all commands for a specific guild.
/api/guilds/:guildId/commands/:commandIdGet a specific guild command.
/api/guilds/:guildId/commandsCreate a guild-specific command. Same request body as global commands.
/api/guilds/:guildId/commands/:commandIdEdit a guild-specific command.
/api/guilds/:guildId/commands/:commandIdDelete a guild-specific command.