<!-- GENERATED by scripts/generate-docs.js — do not edit by hand. Run `npm run docs`. -->

# Discord API catalog

Generated from Discord's official OpenAPI spec (`discord-api-spec`, API v10) plus UberBot's curated overlay (`src/catalog/overlay.js`).

- **182 operations** are available through `discord_api_read` (GET) and `discord_api_write` (everything else).
- **68 operations** are intentionally not exposed; each is listed at the end with the reason.
- Every one of the 250 operations in the spec is accounted for (enforced by `test/catalog.test.js`).

How an agent uses this: `discord_api_search` (find) → `discord_api_describe` (exact parameters) → `discord_api_read` / `discord_api_write` (execute).

Legend — **Safety**: `read` (GET), `write` (changes data), `destructive` (deletes or removes; needs `confirm: true`). **Scope**: how UberBot decides which server an operation touches before authorizing it — `guild` (path `guild_id`), `channel` (resolves the channel’s server), `webhook`, `invite`, or `public` (no server data). **Paging**: cursor parameter and page size for list operations; `discord_api_read` follows it automatically with `max_pages`. **Member access**: what a non-admin caller (admitted by a server’s member-access role) needs — their own Discord permissions, server-wide or in the channel; channels they cannot see are always not_found, and `hidden channels filtered out` means list results omit them. Owners and Administrators can call everything.

## Categories

- [Server](#server) (6)
- [Channels](#channels) (8)
- [Permissions](#permissions) (6)
- [Messages](#messages) (8)
- [Reactions](#reactions) (6)
- [Pins](#pins) (3)
- [Polls](#polls) (2)
- [Threads](#threads) (13)
- [Roles](#roles) (7)
- [Members](#members) (9)
- [Moderation](#moderation) (9)
- [Auto Moderation](#auto-moderation) (5)
- [Audit Log](#audit-log) (1)
- [Invites](#invites) (12)
- [Webhooks](#webhooks) (18)
- [Emojis & Stickers](#emojis--stickers) (13)
- [Soundboard](#soundboard) (7)
- [Scheduled Events](#scheduled-events) (11)
- [Voice & Stage](#voice--stage) (10)
- [Onboarding & Welcome](#onboarding--welcome) (5)
- [Templates](#templates) (6)
- [Integrations & Widget](#integrations--widget) (5)
- [Slash Commands](#slash-commands) (9)
- [Users & Reference](#users--reference) (3)
- [Not exposed](#not-exposed)

## Server

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_guild` | `GET /guilds/{guild_id}` | read | guild |  | any member | Get server (guild) settings: name, icon, owner, verification level, explicit content filter, system/rules/AFK channels, features, boost tier, and roles/emojis. Use with_counts=true for approximate member and online counts. |
| `update_guild` | `PATCH /guilds/{guild_id}` | write | guild |  | ManageGuild (server-wide) | Change server settings: name, icon/banner/splash (base64 data URI), verification_level, default_message_notifications, explicit_content_filter, afk_channel_id/afk_timeout, system_channel_id/flags, rules_channel_id, public_updates_channel_id, preferred_locale, description, features (e.g. COMMUNITY), premium_progress_bar_enabled, safety_alerts_channel_id. **Note:** Enabling COMMUNITY requires rules_channel_id and public_updates_channel_id and verification_level >= 1. |
| `update_my_guild_member` | `PATCH /guilds/{guild_id}/members/@me` | write | guild |  | owner/Administrator only | Change UberBot's own nickname in this server (body: {nick}). |
| `get_guild_preview` | `GET /guilds/{guild_id}/preview` | read | guild |  | any member | Get the public preview of a server: name, description, emojis, stickers, approximate member/presence counts, features. |
| `get_guild_vanity_url` | `GET /guilds/{guild_id}/vanity-url` | read | guild |  | ManageGuild (server-wide) | Get the server vanity invite code (e.g. discord.gg/yourname) and its use count. Requires the VANITY_URL feature. |
| `leave_guild` | `DELETE /users/@me/guilds/{guild_id}` | destructive | guild |  | owner/Administrator only | Make UberBot LEAVE this server. This uninstalls UberBot: all UberBot access to this server ends until it is re-invited. |

## Channels

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_channel` | `GET /channels/{channel_id}` | read | channel |  | ViewChannel in the channel | Get one channel (or thread) by ID with all settings and permission overwrites. |
| `update_channel` | `PATCH /channels/{channel_id}` | write | channel |  | ManageChannels in the channel | Edit a channel or thread: name, topic, position, parent_id (move to category), nsfw, rate_limit_per_user (slowmode, 0-21600 s), bitrate, user_limit, rtc_region, permission_overwrites (replaces ALL overwrites), default_auto_archive_duration, available_tags; for threads: archived, locked, auto_archive_duration, applied_tags. **Note:** RATE LIMIT: changing a channel name or topic is limited to 2 times per 10 minutes per channel. Batch name+topic edits into one call. |
| `delete_channel` | `DELETE /channels/{channel_id}` | destructive | channel |  | ManageChannels in the channel | Permanently delete a channel, category, or thread and all its messages. Deleting a category does NOT delete the channels inside it (they become uncategorized). Cannot be undone. |
| `follow_channel` | `POST /channels/{channel_id}/followers` | write | channel |  | ManageWebhooks in the channel | Follow an announcement channel: cross-post its published messages into another channel (body: {webhook_channel_id}). Creates a webhook in the target channel. |
| `trigger_typing_indicator` | `POST /channels/{channel_id}/typing` | write | channel |  | SendMessages in the channel | Show "UberBot is typing…" in a channel for ~10 seconds. |
| `list_guild_channels` | `GET /guilds/{guild_id}/channels` | read | guild |  | any member; hidden channels filtered out | List all channels and categories in the server (raw objects with type, position, parent_id, permission_overwrites, topic). Threads are NOT included — use get_active_guild_threads. Prefer the discord_list_channels tool for a readable tree. |
| `create_guild_channel` | `POST /guilds/{guild_id}/channels` | write | guild |  | ManageChannels (server-wide) | Create a channel or category. type: GUILD_TEXT=0, GUILD_VOICE=2, GUILD_CATEGORY=4, GUILD_ANNOUNCEMENT=5, GUILD_STAGE_VOICE=13, GUILD_FORUM=15, GUILD_MEDIA=16. Set parent_id to place it in a category, permission_overwrites for private channels, topic, nsfw, rate_limit_per_user (slowmode seconds), bitrate/user_limit for voice, available_tags for forums. **Note:** Max 500 channels per server, 50 per category. |
| `bulk_update_guild_channels` | `PATCH /guilds/{guild_id}/channels` | write | guild |  | owner/Administrator only | Reorder channels / move them between categories in one call: body is an array of {id, position?, parent_id?, lock_permissions?}. |

## Permissions

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_channel_member_permissions` | `GET /channels/{channel_id}/permissions/member/{user_id}` | read | channel |  | ViewChannel in the channel | Get a member's effective permissions in a specific channel (after roles and overwrites), as a bitfield. |
| `get_channel_role_permissions` | `GET /channels/{channel_id}/permissions/role/{role_id}` | read | channel |  | ViewChannel in the channel | Get a role's effective permissions in a specific channel, as a bitfield. |
| `set_channel_permission_overwrite` | `PUT /channels/{channel_id}/permissions/{overwrite_id}` | write | channel |  | ManageRoles in the channel | Create or replace ONE permission overwrite on a channel for a role or member. overwrite_id = role ID or user ID; body: {type: 0 for role \| 1 for member, allow: bitfield string, deny: bitfield string}. The @everyone role ID equals the server ID. Prefer the discord_set_channel_permissions tool which accepts permission names. |
| `delete_channel_permission_overwrite` | `DELETE /channels/{channel_id}/permissions/{overwrite_id}` | destructive | channel |  | ManageRoles in the channel | Remove a role/member permission overwrite from a channel, reverting it to inherited permissions. |
| `get_guild_member_permissions` | `GET /guilds/{guild_id}/permissions/member/{user_id}` | read | guild |  | any member | Get a member's server-wide permissions bitfield (all their roles combined). |
| `get_guild_role_permissions` | `GET /guilds/{guild_id}/permissions/role/{role_id}` | read | guild |  | any member | Get a role's server-wide permissions bitfield. |

## Messages

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_messages` | `GET /channels/{channel_id}/messages` | read | channel | `before` ≤100 | ViewChannel + ReadMessageHistory in the channel | Read messages in a channel or thread, NEWEST FIRST. Use before/after/around a message ID to navigate; limit 1-100. Prefer discord_read_messages, which returns a compact format and pages automatically. |
| `create_message` | `POST /channels/{channel_id}/messages` | write | channel |  | SendMessages in the channel | Send a message as UberBot: content (≤2000 chars), embeds (≤10), allowed_mentions, message_reference (reply), components, sticker_ids, poll, flags (SUPPRESS_EMBEDS=4, SUPPRESS_NOTIFICATIONS=4096). File uploads are not supported through MCP — link to URLs instead. **Note:** Set allowed_mentions explicitly; without it, @everyone/@here and role mentions in content WILL ping. |
| `bulk_delete_messages` | `POST /channels/{channel_id}/messages/bulk-delete` | destructive | channel |  | ManageMessages + ReadMessageHistory in the channel | Delete 2-100 messages in one channel at once (body: {messages: [ids]}). Messages older than 14 days are rejected by Discord — delete those individually. |
| `get_message` | `GET /channels/{channel_id}/messages/{message_id}` | read | channel |  | ViewChannel + ReadMessageHistory in the channel | Get a single message by channel ID and message ID (full content, embeds, attachments, components, reactions). |
| `update_message` | `PATCH /channels/{channel_id}/messages/{message_id}` | write | channel |  | ManageMessages in the channel | Edit a message UberBot sent (content, embeds, components, flags). Other users' messages can only have their flags changed (e.g. suppress embeds). |
| `delete_message` | `DELETE /channels/{channel_id}/messages/{message_id}` | destructive | channel |  | ManageMessages in the channel | Delete one message (any author, needs Manage Messages for others). |
| `crosspost_message` | `POST /channels/{channel_id}/messages/{message_id}/crosspost` | write | channel |  | ManageMessages in the channel | Publish a message in an announcement channel to all following servers. |
| `guild_search` | `GET /guilds/{guild_id}/messages/search` | read | guild | `offset` ≤25 | owner/Administrator only | Search messages across the whole server like the Discord search bar: content, author_id[], mentions[], channel_id[], has[] (link, embed, file, image, video, sound, sticker, poll, snapshot), min_id/max_id (date range via snowflakes), pinned, sort_by/sort_order. limit ≤25, offset ≤9975. May return 202 while Discord indexes; retry after a few seconds. Prefer discord_search_messages. |

## Reactions

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `delete_all_message_reactions` | `DELETE /channels/{channel_id}/messages/{message_id}/reactions` | destructive | channel |  | ManageMessages in the channel | Remove ALL reactions from a message. |
| `list_message_reactions_by_emoji` | `GET /channels/{channel_id}/messages/{message_id}/reactions/{emoji_name}` | read | channel | `after` ≤100 | ViewChannel + ReadMessageHistory in the channel | List users who reacted with a given emoji. emoji_name: unicode emoji (e.g. 👍) or name:id for custom emoji. type: 0 normal, 1 super/burst. |
| `delete_all_message_reactions_by_emoji` | `DELETE /channels/{channel_id}/messages/{message_id}/reactions/{emoji_name}` | destructive | channel |  | ManageMessages in the channel | Remove all reactions of one emoji from a message. |
| `add_my_message_reaction` | `PUT /channels/{channel_id}/messages/{message_id}/reactions/{emoji_name}/@me` | write | channel |  | ReadMessageHistory + AddReactions in the channel | Add a reaction as UberBot. emoji_name: unicode or name:id for custom emoji. **Note:** Reaction adds have a tight per-channel rate limit (~1 per 0.25 s). |
| `delete_my_message_reaction` | `DELETE /channels/{channel_id}/messages/{message_id}/reactions/{emoji_name}/@me` | destructive | channel |  | AddReactions in the channel | Remove UberBot's own reaction. |
| `delete_user_message_reaction` | `DELETE /channels/{channel_id}/messages/{message_id}/reactions/{emoji_name}/{user_id}` | destructive | channel |  | ManageMessages in the channel | Remove another user's reaction. |

## Pins

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_pins` | `GET /channels/{channel_id}/messages/pins` | read | channel | `before` ≤50 | ViewChannel + ReadMessageHistory in the channel | List pinned messages in a channel, newest pin first (items[].message, items[].pinned_at). Page with before=<pinned_at timestamp>; limit ≤50. |
| `create_pin` | `PUT /channels/{channel_id}/messages/pins/{message_id}` | write | channel |  | PinMessages in the channel | Pin a message (max 250 pins per channel). |
| `delete_pin` | `DELETE /channels/{channel_id}/messages/pins/{message_id}` | destructive | channel |  | PinMessages in the channel | Unpin a message. |

## Polls

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_answer_voters` | `GET /channels/{channel_id}/polls/{message_id}/answers/{answer_id}` | read | channel | `after` ≤100 | ViewChannel + ReadMessageHistory in the channel | List users who voted for one answer of a poll (answer_id is 1-based). |
| `poll_expire` | `POST /channels/{channel_id}/polls/{message_id}/expire` | write | channel |  | ManageMessages in the channel | End a poll now (only polls UberBot created). |

## Threads

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `create_thread_from_message` | `POST /channels/{channel_id}/messages/{message_id}/threads` | write | channel |  | CreatePublicThreads + ReadMessageHistory in the channel | Start a public thread attached to an existing message (body: {name, auto_archive_duration?}). |
| `list_thread_members` | `GET /channels/{channel_id}/thread-members` | read | channel | `after` ≤100 | ViewChannel in the channel | List members of a thread. with_member=true includes guild member objects. |
| `join_thread` | `PUT /channels/{channel_id}/thread-members/@me` | write | channel |  | ViewChannel in the channel | Make UberBot join a thread. |
| `leave_thread` | `DELETE /channels/{channel_id}/thread-members/@me` | destructive | channel |  | ViewChannel in the channel | Make UberBot leave a thread. |
| `get_thread_member` | `GET /channels/{channel_id}/thread-members/{user_id}` | read | channel |  | ViewChannel in the channel | Check whether a user is in a thread. |
| `add_thread_member` | `PUT /channels/{channel_id}/thread-members/{user_id}` | write | channel |  | SendMessages in the channel | Add a user to a thread. |
| `delete_thread_member` | `DELETE /channels/{channel_id}/thread-members/{user_id}` | destructive | channel |  | ManageThreads in the channel | Remove a user from a thread. |
| `create_thread` | `POST /channels/{channel_id}/threads` | write | channel |  | CreatePublicThreads in the channel | Start a thread without a message (type 11 public, 12 private) or a forum/media post (body includes message: {content,...} and applied_tags). auto_archive_duration: 60, 1440, 4320, 10080 minutes. |
| `list_private_archived_threads` | `GET /channels/{channel_id}/threads/archived/private` | read | channel | `before` ≤100 | ViewChannel + ReadMessageHistory + ManageThreads in the channel | List archived private threads in a channel (needs Manage Threads). Page with before=<archive_timestamp>. |
| `list_public_archived_threads` | `GET /channels/{channel_id}/threads/archived/public` | read | channel | `before` ≤100 | ViewChannel + ReadMessageHistory in the channel | List archived public threads in a channel, most recently archived first. Page with before=<archive_timestamp>. |
| `thread_search` | `GET /channels/{channel_id}/threads/search` | read | channel | `offset` ≤25 | ViewChannel + ReadMessageHistory in the channel; hidden channels filtered out | Search threads/forum posts in a channel by name, tag, archived state; sort_by last_message_time\|archive_time\|relevance\|creation_time. limit ≤25, offset paging. |
| `list_my_private_archived_threads` | `GET /channels/{channel_id}/users/@me/threads/archived/private` | read | channel | `before` ≤100 | ViewChannel + ReadMessageHistory in the channel; hidden channels filtered out | List archived private threads UberBot has joined in a channel. |
| `get_active_guild_threads` | `GET /guilds/{guild_id}/threads/active` | read | guild |  | any member; hidden channels filtered out | List ALL active (non-archived) threads in the server, plus thread member objects for threads UberBot has joined. |

## Roles

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_roles` | `GET /guilds/{guild_id}/roles` | read | guild |  | any member | List all roles with id, name, color, position (higher = more powerful), permissions bitfield, hoist, mentionable, managed (bot/integration roles cannot be assigned). Prefer discord_list_roles for decoded permission names and member counts. |
| `create_guild_role` | `POST /guilds/{guild_id}/roles` | write | guild |  | ManageRoles (server-wide) | Create a role: name, permissions (bitfield string), color (integer, e.g. 0xFF0000 = 16711680), hoist (show separately), mentionable, icon/unicode_emoji (needs ROLE_ICONS feature). New roles are created at position 1 (just above @everyone). **Note:** Max 250 roles. Role creation is rate limited (250 per 48h). |
| `bulk_update_guild_roles` | `PATCH /guilds/{guild_id}/roles` | write | guild |  | ManageRoles (server-wide) | Reorder roles: body is an array of {id, position}. Higher position = higher in the list = more authority. Prefer discord_reorder_roles (moves by role name). |
| `guild_role_member_counts` | `GET /guilds/{guild_id}/roles/member-counts` | read | guild |  | any member | Get the number of members holding each role: {role_id: count}. |
| `get_guild_role` | `GET /guilds/{guild_id}/roles/{role_id}` | read | guild |  | any member | Get one role by ID. |
| `update_guild_role` | `PATCH /guilds/{guild_id}/roles/{role_id}` | write | guild |  | ManageRoles (server-wide) | Edit a role: name, permissions, color, hoist, mentionable, icon. UberBot can only edit roles BELOW its own highest role. |
| `delete_guild_role` | `DELETE /guilds/{guild_id}/roles/{role_id}` | destructive | guild |  | ManageRoles (server-wide) | Delete a role (removes it from every member). Cannot be undone. |

## Members

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_members` | `GET /guilds/{guild_id}/members` | read | guild | `after` ≤1000 | any member | List members ordered by user ID ascending; page with after=<last user id>, limit ≤1000. Large servers have many pages — prefer search_guild_members or discord_find_members for lookups. |
| `search_guild_members` | `GET /guilds/{guild_id}/members/search` | read | guild |  | any member | Find members whose username or nickname STARTS WITH query (case-insensitive). limit ≤1000. Fastest way to resolve a name to a user ID. |
| `get_guild_member` | `GET /guilds/{guild_id}/members/{user_id}` | read | guild |  | any member | Get one member: user, nick, roles[], joined_at, premium_since, communication_disabled_until (timeout), pending, flags. |
| `add_guild_member` | `PUT /guilds/{guild_id}/members/{user_id}` | write | guild |  | owner/Administrator only | Add a user to the server using THEIR OAuth2 access token with the guilds.join scope. Not usable without that user token. |
| `update_guild_member` | `PATCH /guilds/{guild_id}/members/{user_id}` | write | guild |  | per field: nick→ManageNicknames, roles→ManageRoles, mute→MuteMembers, deaf→DeafenMembers, channel_id→MoveMembers, communication_disabled_until→ModerateMembers, flags→ModerateMembers | Edit a member: nick, roles (REPLACES the whole role list), mute/deaf (voice), channel_id (move between voice channels; null disconnects), communication_disabled_until (TIMEOUT: ISO8601 up to 28 days ahead; null removes), flags. **Note:** Prefer add_guild_member_role / delete_guild_member_role to change one role without clobbering others. |
| `add_guild_member_role` | `PUT /guilds/{guild_id}/members/{user_id}/roles/{role_id}` | write | guild |  | ManageRoles (server-wide) | Give a member one role (role must be below UberBot’s highest role and not managed). |
| `delete_guild_member_role` | `DELETE /guilds/{guild_id}/members/{user_id}/roles/{role_id}` | destructive | guild |  | ManageRoles (server-wide) | Take one role away from a member. |
| `get_guild_join_requests` | `GET /guilds/{guild_id}/requests` | read | guild |  | KickMembers (server-wide) | List pending membership applications (servers using member verification / applications to join). |
| `action_guild_join_request` | `PATCH /guilds/{guild_id}/requests/{request_id}` | write | guild |  | KickMembers (server-wide) | Approve or reject a pending join request (action: APPROVED or REJECTED, optional rejection_reason). |

## Moderation

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_bans` | `GET /guilds/{guild_id}/bans` | read | guild | `after` ≤1000 | BanMembers (server-wide) | List banned users with ban reasons. limit ≤1000, page with after=<last user id>. |
| `get_guild_ban` | `GET /guilds/{guild_id}/bans/{user_id}` | read | guild |  | BanMembers (server-wide) | Check whether a specific user is banned and why (404 = not banned). |
| `ban_user_from_guild` | `PUT /guilds/{guild_id}/bans/{user_id}` | destructive | guild |  | BanMembers (server-wide) | BAN a user (works even if they are not in the server). delete_message_seconds (0-604800) removes their recent messages. |
| `unban_user_from_guild` | `DELETE /guilds/{guild_id}/bans/{user_id}` | destructive | guild |  | BanMembers (server-wide) | Unban (pardon) a user. |
| `bulk_ban_users_from_guild` | `POST /guilds/{guild_id}/bulk-ban` | destructive | guild |  | BanMembers + ManageGuild (server-wide) | Ban up to 200 users at once (body: {user_ids, delete_message_seconds}). Returns banned_users and failed_users. Raid cleanup. |
| `update_guild_incident_actions` | `PUT /guilds/{guild_id}/incident-actions` | write | guild |  | ManageGuild (server-wide) | Pause invites and/or DMs for the server during a raid: set invites_disabled_until and dms_disabled_until (ISO8601, max 24h ahead; null to resume). |
| `delete_guild_member` | `DELETE /guilds/{guild_id}/members/{user_id}` | destructive | guild |  | KickMembers (server-wide) | KICK a member from the server. They can rejoin with an invite. |
| `preview_prune_guild` | `GET /guilds/{guild_id}/prune` | read | guild |  | KickMembers (server-wide) | Count how many members a prune WOULD remove: members inactive for `days` (1-30) with no roles (or only include_roles). Always run this before prune_guild. |
| `prune_guild` | `POST /guilds/{guild_id}/prune` | destructive | guild |  | KickMembers + ManageGuild (server-wide) | PRUNE: kick all members inactive for `days` (1-30) who have no roles (or only include_roles). Set compute_prune_count=false on big servers. Run preview_prune_guild first. |

## Auto Moderation

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_auto_moderation_rules` | `GET /guilds/{guild_id}/auto-moderation/rules` | read | guild |  | ManageGuild (server-wide) | List AutoMod rules (keyword filters, spam, mention spam, member profile rules) with triggers, actions, and exemptions. |
| `create_auto_moderation_rule` | `POST /guilds/{guild_id}/auto-moderation/rules` | write | guild |  | ManageGuild (server-wide) | Create an AutoMod rule: event_type (1 MESSAGE_SEND, 2 MEMBER_UPDATE), trigger_type (1 KEYWORD, 3 SPAM, 4 KEYWORD_PRESET, 5 MENTION_SPAM, 6 MEMBER_PROFILE), trigger_metadata (keyword_filter, regex_patterns, presets, allow_list, mention_total_limit), actions (1 BLOCK_MESSAGE, 2 SEND_ALERT_MESSAGE {channel_id}, 3 TIMEOUT {duration_seconds}, 4 BLOCK_MEMBER_INTERACTION), enabled, exempt_roles, exempt_channels. **Note:** Limits: 6 KEYWORD rules, 1 each of SPAM/KEYWORD_PRESET/MENTION_SPAM per server. |
| `get_auto_moderation_rule` | `GET /guilds/{guild_id}/auto-moderation/rules/{rule_id}` | read | guild |  | ManageGuild (server-wide) | Get one AutoMod rule. |
| `update_auto_moderation_rule` | `PATCH /guilds/{guild_id}/auto-moderation/rules/{rule_id}` | write | guild |  | ManageGuild (server-wide) | Edit an AutoMod rule (trigger_metadata, actions, enabled, exemptions). |
| `delete_auto_moderation_rule` | `DELETE /guilds/{guild_id}/auto-moderation/rules/{rule_id}` | destructive | guild |  | ManageGuild (server-wide) | Delete an AutoMod rule. |

## Audit Log

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_audit_log_entries` | `GET /guilds/{guild_id}/audit-logs` | read | guild | `before` ≤100 | ViewAuditLog (server-wide); hidden channels filtered out | Read the server audit log (who did what): filter by user_id (actor), target_id, action_type (e.g. MEMBER_BAN_ADD=22, MESSAGE_DELETE=72, MEMBER_ROLE_UPDATE=25). Newest first, limit ≤100, page with before=<entry id>. Prefer discord_get_audit_log for decoded names. |

## Invites

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_channel_invites` | `GET /channels/{channel_id}/invites` | read | channel |  | ManageChannels in the channel | List active invites for one channel. |
| `create_channel_invite` | `POST /channels/{channel_id}/invites` | write | channel |  | CreateInstantInvite in the channel | Create an invite to a channel: max_age seconds (0 = never expires, default 86400), max_uses (0 = unlimited), temporary (members kicked when they disconnect unless given a role), unique, target_type/target_user_id (stream/activity invites), role_ids (roles granted on join). |
| `list_guild_invites` | `GET /guilds/{guild_id}/invites` | read | guild |  | ManageGuild (server-wide); hidden channels filtered out | List all active invites in the server with inviter, uses, max_uses, expiry. |
| `invite_resolve` | `GET /invites/{code}` | read | public |  | anyone | Look up an invite code: target server, channel, inviter, approximate counts (with_counts=true), expiry. Works for any public invite. |
| `invite_revoke` | `DELETE /invites/{code}` | destructive | invite |  | ManageChannels in the channel | Delete (revoke) an invite code. |
| `get_invite_target_users` | `GET /invites/{code}/target-users` | read | invite |  | ManageGuild (server-wide) | Get the list of users an invite is restricted to (targeted invites). |
| `update_invite_target_users` | `PUT /invites/{code}/target-users` | write | invite |  | ManageGuild (server-wide) | Replace the set of users an invite is restricted to. |
| `bulk_add_invite_target_users` | `POST /invites/{code}/target-users/bulk-add` | write | invite |  | ManageGuild (server-wide) | Add many users to a targeted invite (async job; check get_invite_target_users_job_status). |
| `bulk_remove_invite_target_users` | `POST /invites/{code}/target-users/bulk-delete` | write | invite |  | ManageGuild (server-wide) | Remove many users from a targeted invite (async job). |
| `get_invite_target_users_job_status` | `GET /invites/{code}/target-users/job-status` | read | invite |  | ManageGuild (server-wide) | Check progress of a bulk targeted-invite job. |
| `add_invite_target_user` | `PUT /invites/{code}/target-users/{user_id}` | write | invite |  | ManageGuild (server-wide) | Allow one user to use a targeted invite. |
| `remove_invite_target_user` | `DELETE /invites/{code}/target-users/{user_id}` | destructive | invite |  | ManageGuild (server-wide) | Remove one user from a targeted invite. |

## Webhooks

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_channel_webhooks` | `GET /channels/{channel_id}/webhooks` | read | channel |  | ManageWebhooks in the channel | List webhooks in a channel. |
| `create_webhook` | `POST /channels/{channel_id}/webhooks` | write | channel |  | ManageWebhooks in the channel | Create an incoming webhook in a channel (name, avatar). Returns its URL token — treat as a secret. **Note:** Max 15 webhooks per channel. |
| `get_guild_webhooks` | `GET /guilds/{guild_id}/webhooks` | read | guild |  | ManageWebhooks (server-wide); hidden channels filtered out | List all webhooks in the server (includes tokens for incoming webhooks — treat as secrets). |
| `get_webhook` | `GET /webhooks/{webhook_id}` | read | webhook |  | ManageWebhooks in the channel | Get a webhook by ID. |
| `update_webhook` | `PATCH /webhooks/{webhook_id}` | write | webhook |  | ManageWebhooks in the channel | Rename a webhook, change its avatar, or move it to another channel (channel_id). |
| `delete_webhook` | `DELETE /webhooks/{webhook_id}` | destructive | webhook |  | ManageWebhooks in the channel | Delete a webhook (its URL stops working). |
| `get_webhook_by_token` | `GET /webhooks/{webhook_id}/{webhook_token}` | read | webhook |  | ManageWebhooks in the channel | Get a webhook using its token. |
| `execute_webhook` | `POST /webhooks/{webhook_id}/{webhook_token}` | write | webhook |  | ManageWebhooks in the channel | Post a message through a webhook with a custom username/avatar_url (content, embeds ≤10, allowed_mentions, thread_id, thread_name for forum posts). wait=true returns the created message. |
| `update_webhook_by_token` | `PATCH /webhooks/{webhook_id}/{webhook_token}` | write | webhook |  | ManageWebhooks in the channel | Edit a webhook using its token (name, avatar). |
| `delete_webhook_by_token` | `DELETE /webhooks/{webhook_id}/{webhook_token}` | destructive | webhook |  | ManageWebhooks in the channel | Delete a webhook using its token. |
| `execute_github_compatible_webhook` | `POST /webhooks/{webhook_id}/{webhook_token}/github` | write | webhook |  | ManageWebhooks in the channel | Post through a webhook using a GitHub event payload. |
| `get_original_webhook_message` | `GET /webhooks/{webhook_id}/{webhook_token}/messages/@original` | read | webhook |  | ManageWebhooks in the channel | Get the original response message of an interaction webhook. |
| `update_original_webhook_message` | `PATCH /webhooks/{webhook_id}/{webhook_token}/messages/@original` | write | webhook |  | ManageWebhooks in the channel | Edit the original response message of an interaction webhook. |
| `delete_original_webhook_message` | `DELETE /webhooks/{webhook_id}/{webhook_token}/messages/@original` | destructive | webhook |  | ManageWebhooks in the channel | Delete the original response message of an interaction webhook. |
| `get_webhook_message` | `GET /webhooks/{webhook_id}/{webhook_token}/messages/{message_id}` | read | webhook |  | ManageWebhooks in the channel | Get a message previously sent by this webhook. |
| `update_webhook_message` | `PATCH /webhooks/{webhook_id}/{webhook_token}/messages/{message_id}` | write | webhook |  | ManageWebhooks in the channel | Edit a message previously sent by this webhook. |
| `delete_webhook_message` | `DELETE /webhooks/{webhook_id}/{webhook_token}/messages/{message_id}` | destructive | webhook |  | ManageWebhooks in the channel | Delete a message previously sent by this webhook. |
| `execute_slack_compatible_webhook` | `POST /webhooks/{webhook_id}/{webhook_token}/slack` | write | webhook |  | ManageWebhooks in the channel | Post through a webhook using a Slack-formatted payload. |

## Emojis & Stickers

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_emojis` | `GET /guilds/{guild_id}/emojis` | read | guild |  | any member | List custom emojis in the server (id, name, animated, roles restricted to). |
| `create_guild_emoji` | `POST /guilds/{guild_id}/emojis` | write | guild |  | CreateGuildExpressions (server-wide) | Upload a custom emoji: name (2-32 chars, alphanumeric/underscore), image (data URI "data:image/png;base64,..." ≤256 KB), roles (optional allow-list). **Note:** Slot count depends on boost tier (50/100/150/250 static + same animated). |
| `get_guild_emoji` | `GET /guilds/{guild_id}/emojis/{emoji_id}` | read | guild |  | any member | Get one custom emoji. |
| `update_guild_emoji` | `PATCH /guilds/{guild_id}/emojis/{emoji_id}` | write | guild |  | ManageGuildExpressions (server-wide) | Rename an emoji or change which roles may use it. |
| `delete_guild_emoji` | `DELETE /guilds/{guild_id}/emojis/{emoji_id}` | destructive | guild |  | ManageGuildExpressions (server-wide) | Delete a custom emoji. |
| `list_guild_stickers` | `GET /guilds/{guild_id}/stickers` | read | guild |  | any member | List custom stickers in the server. |
| `create_guild_sticker` | `POST /guilds/{guild_id}/stickers` | write | guild |  | CreateGuildExpressions (server-wide) | Create a sticker. Requires a file upload (PNG/APNG/GIF/Lottie) which MCP cannot send — do this in the Discord app. |
| `get_guild_sticker` | `GET /guilds/{guild_id}/stickers/{sticker_id}` | read | guild |  | any member | Get one custom sticker. |
| `update_guild_sticker` | `PATCH /guilds/{guild_id}/stickers/{sticker_id}` | write | guild |  | ManageGuildExpressions (server-wide) | Edit a sticker name, description, or tags (related emoji name). |
| `delete_guild_sticker` | `DELETE /guilds/{guild_id}/stickers/{sticker_id}` | destructive | guild |  | ManageGuildExpressions (server-wide) | Delete a custom sticker. |
| `list_sticker_packs` | `GET /sticker-packs` | read | public |  | anyone | List Discord's standard sticker packs. |
| `get_sticker_pack` | `GET /sticker-packs/{pack_id}` | read | public |  | anyone | Get one standard sticker pack. |
| `get_sticker` | `GET /stickers/{sticker_id}` | read | public |  | anyone | Get any sticker by ID (standard or custom). |

## Soundboard

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `send_soundboard_sound` | `POST /channels/{channel_id}/send-soundboard-sound` | write | channel |  | Speak + UseSoundboard in the channel | Play a soundboard sound in a voice channel. Only works if UberBot is connected to that voice channel (it normally is not). |
| `list_guild_soundboard_sounds` | `GET /guilds/{guild_id}/soundboard-sounds` | read | guild |  | any member | List the server’s custom soundboard sounds. |
| `create_guild_soundboard_sound` | `POST /guilds/{guild_id}/soundboard-sounds` | write | guild |  | CreateGuildExpressions (server-wide) | Add a soundboard sound: name, sound (data URI mp3/ogg ≤512 KB, ≤5.2 s), volume (0-1), emoji_id/emoji_name. |
| `get_guild_soundboard_sound` | `GET /guilds/{guild_id}/soundboard-sounds/{sound_id}` | read | guild |  | any member | Get one soundboard sound. |
| `update_guild_soundboard_sound` | `PATCH /guilds/{guild_id}/soundboard-sounds/{sound_id}` | write | guild |  | ManageGuildExpressions (server-wide) | Edit a soundboard sound name, volume, or emoji. |
| `delete_guild_soundboard_sound` | `DELETE /guilds/{guild_id}/soundboard-sounds/{sound_id}` | destructive | guild |  | ManageGuildExpressions (server-wide) | Delete a soundboard sound. |
| `get_soundboard_default_sounds` | `GET /soundboard-default-sounds` | read | public |  | anyone | List Discord's built-in soundboard sounds. |

## Scheduled Events

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_scheduled_events` | `GET /guilds/{guild_id}/scheduled-events` | read | guild |  | any member; hidden channels filtered out | List scheduled events (with_user_count=true adds RSVP counts). |
| `create_guild_scheduled_event` | `POST /guilds/{guild_id}/scheduled-events` | write | guild |  | CreateEvents (server-wide) | Create a scheduled event: name, scheduled_start_time (ISO8601), entity_type (1 STAGE_INSTANCE, 2 VOICE, 3 EXTERNAL), channel_id (stage/voice) OR entity_metadata.location + scheduled_end_time (external), description, privacy_level 2, image, recurrence_rule. |
| `get_guild_scheduled_event` | `GET /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}` | read | guild |  | any member; hidden channels filtered out | Get one scheduled event. |
| `update_guild_scheduled_event` | `PATCH /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}` | write | guild |  | ManageEvents (server-wide) | Edit a scheduled event or change status (2 ACTIVE to start, 3 COMPLETED to end, 4 CANCELED). |
| `delete_guild_scheduled_event` | `DELETE /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}` | destructive | guild |  | ManageEvents (server-wide) | Delete a scheduled event. |
| `create_guild_scheduled_event_exception` | `POST /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}/exceptions` | write | guild |  | ManageEvents (server-wide) | Change or cancel one occurrence of a recurring event. |
| `update_guild_scheduled_event_exception` | `PATCH /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}/exceptions/{exception_id}` | write | guild |  | ManageEvents (server-wide) | Edit an exception to a recurring event. |
| `delete_guild_scheduled_event_exception` | `DELETE /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}/exceptions/{exception_id}` | destructive | guild |  | ManageEvents (server-wide) | Remove an exception from a recurring event (restores the normal occurrence). |
| `list_guild_scheduled_event_users` | `GET /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}/users` | read | guild | `after` ≤100 | any member | List users interested in (RSVP’d to) an event. with_member=true adds member objects. |
| `count_guild_scheduled_event_users` | `GET /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}/users/counts` | read | guild |  | any member | Count interested users for an event (optionally per recurrence exception). |
| `list_guild_scheduled_event_exception_users` | `GET /guilds/{guild_id}/scheduled-events/{guild_scheduled_event_id}/{guild_scheduled_event_exception_id}/users` | read | guild | `after` ≤100 | any member | List users interested in one occurrence of a recurring event. |

## Voice & Stage

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `update_voice_channel_status` | `PUT /channels/{channel_id}/voice-status` | write | channel |  | SetVoiceChannelStatus in the channel | Set the status text shown under a voice channel (body: {status}, max 500 chars). |
| `list_guild_voice_regions` | `GET /guilds/{guild_id}/regions` | read | guild |  | any member | List voice regions available to this server (for a voice channel rtc_region override). |
| `get_self_voice_state` | `GET /guilds/{guild_id}/voice-states/@me` | read | guild |  | any member | Get UberBot's own voice state. |
| `update_self_voice_state` | `PATCH /guilds/{guild_id}/voice-states/@me` | write | guild |  | owner/Administrator only | Update UberBot's voice state in a stage (suppress, request_to_speak_timestamp). |
| `get_voice_state` | `GET /guilds/{guild_id}/voice-states/{user_id}` | read | guild |  | any member; hidden channels filtered out | Get which voice channel a user is in (and mute/deaf/stream state). 404 if not in voice. |
| `update_voice_state` | `PATCH /guilds/{guild_id}/voice-states/{user_id}` | write | guild |  | MuteMembers (server-wide) | Invite a user to speak on stage or move them to the audience (suppress). To move/disconnect from voice use update_guild_member channel_id. |
| `create_stage_instance` | `POST /stage-instances` | write | channel |  | ManageChannels + MuteMembers + MoveMembers in the channel | Start a stage (go live) in a stage channel: channel_id, topic, privacy_level, send_start_notification, guild_scheduled_event_id. |
| `get_stage_instance` | `GET /stage-instances/{channel_id}` | read | channel |  | ViewChannel in the channel | Get the live stage instance in a stage channel. |
| `update_stage_instance` | `PATCH /stage-instances/{channel_id}` | write | channel |  | ManageChannels + MuteMembers + MoveMembers in the channel | Change a live stage’s topic or privacy. |
| `delete_stage_instance` | `DELETE /stage-instances/{channel_id}` | destructive | channel |  | ManageChannels + MuteMembers + MoveMembers in the channel | End a live stage. |

## Onboarding & Welcome

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_guild_new_member_welcome` | `GET /guilds/{guild_id}/new-member-welcome` | read | guild |  | any member | Get the new-member welcome (server guide) configuration. |
| `get_guilds_onboarding` | `GET /guilds/{guild_id}/onboarding` | read | guild |  | any member | Get Community onboarding: prompts (questions with options that grant roles/channels), default_channel_ids, enabled, mode. |
| `put_guilds_onboarding` | `PUT /guilds/{guild_id}/onboarding` | write | guild |  | ManageGuild + ManageRoles (server-wide) | Replace Community onboarding config (prompts, default_channel_ids, enabled, mode). Sends the full config — read it first and modify. **Note:** Requires ≥7 default channels (5 must allow @everyone to send messages) when enabling. |
| `get_guild_welcome_screen` | `GET /guilds/{guild_id}/welcome-screen` | read | guild |  | any member | Get the Community welcome screen (description + up to 5 recommended channels). |
| `update_guild_welcome_screen` | `PATCH /guilds/{guild_id}/welcome-screen` | write | guild |  | ManageGuild (server-wide) | Edit the welcome screen: enabled, description, welcome_channels [{channel_id, description, emoji_name}]. |

## Templates

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_guild_template` | `GET /guilds/templates/{code}` | read | public |  | anyone | Look up any template by code. |
| `list_guild_templates` | `GET /guilds/{guild_id}/templates` | read | guild |  | ManageGuild (server-wide) | List server templates (snapshots of channels/roles/settings that can create new servers). |
| `create_guild_template` | `POST /guilds/{guild_id}/templates` | write | guild |  | ManageGuild (server-wide) | Create a server template from the current server (name, description). |
| `sync_guild_template` | `PUT /guilds/{guild_id}/templates/{code}` | write | guild |  | ManageGuild (server-wide) | Update a template to match the server’s current structure. |
| `update_guild_template` | `PATCH /guilds/{guild_id}/templates/{code}` | write | guild |  | ManageGuild (server-wide) | Rename/re-describe a template. |
| `delete_guild_template` | `DELETE /guilds/{guild_id}/templates/{code}` | destructive | guild |  | ManageGuild (server-wide) | Delete a template. |

## Integrations & Widget

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_integrations` | `GET /guilds/{guild_id}/integrations` | read | guild |  | ManageGuild (server-wide) | List integrations (bots/apps, Twitch, YouTube) installed in the server. |
| `delete_guild_integration` | `DELETE /guilds/{guild_id}/integrations/{integration_id}` | destructive | guild |  | ManageGuild (server-wide) | Remove an integration — for bots this KICKS the bot. |
| `get_guild_widget_settings` | `GET /guilds/{guild_id}/widget` | read | guild |  | ManageGuild (server-wide) | Get server widget settings (enabled, channel_id). |
| `update_guild_widget_settings` | `PATCH /guilds/{guild_id}/widget` | write | guild |  | ManageGuild (server-wide) | Enable/disable the server widget and choose its invite channel. |
| `get_guild_widget` | `GET /guilds/{guild_id}/widget.json` | read | guild |  | any member | Get the public widget JSON (online members list, instant invite). |

## Slash Commands

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `list_guild_application_commands` | `GET /applications/{application_id}/guilds/{guild_id}/commands` | read | guild |  | owner/Administrator only | List UberBot slash commands registered in this server. |
| `create_guild_application_command` | `POST /applications/{application_id}/guilds/{guild_id}/commands` | write | guild |  | owner/Administrator only | Register a slash command for UberBot in this server. NOTE: UberBot does not handle interactions, so commands will show "application did not respond". Mostly useful for cleanup. |
| `bulk_set_guild_application_commands` | `PUT /applications/{application_id}/guilds/{guild_id}/commands` | destructive | guild |  | owner/Administrator only | Replace ALL UberBot guild slash commands in this server (empty array removes all). |
| `list_guild_application_command_permissions` | `GET /applications/{application_id}/guilds/{guild_id}/commands/permissions` | read | guild |  | owner/Administrator only | List per-command permission overrides for UberBot commands in this server. |
| `get_guild_application_command` | `GET /applications/{application_id}/guilds/{guild_id}/commands/{command_id}` | read | guild |  | owner/Administrator only | Get one UberBot guild slash command. |
| `update_guild_application_command` | `PATCH /applications/{application_id}/guilds/{guild_id}/commands/{command_id}` | write | guild |  | owner/Administrator only | Edit an UberBot guild slash command. |
| `delete_guild_application_command` | `DELETE /applications/{application_id}/guilds/{guild_id}/commands/{command_id}` | destructive | guild |  | owner/Administrator only | Delete an UberBot guild slash command. |
| `get_guild_application_command_permissions` | `GET /applications/{application_id}/guilds/{guild_id}/commands/{command_id}/permissions` | read | guild |  | owner/Administrator only | Get permission overrides for one UberBot command. |
| `set_guild_application_command_permissions` | `PUT /applications/{application_id}/guilds/{guild_id}/commands/{command_id}/permissions` | write | guild |  | owner/Administrator only | Set command permission overrides (requires a user Bearer token with applications.commands.permissions.update — not available to the bot). |

## Users & Reference

| Operation | Endpoint | Safety | Scope | Paging | Member access | Description |
|---|---|---|---|---|---|---|
| `get_my_user` | `GET /users/@me` | read | public |  | anyone | Get UberBot’s own user object. |
| `get_user` | `GET /users/{user_id}` | read | public |  | anyone | Get a Discord user’s public profile by ID (username, global_name, avatar, bot flag, public flags). |
| `list_voice_regions` | `GET /voice/regions` | read | public |  | anyone | List all Discord voice regions. |

## Not exposed

| Operation | Endpoint | Reason |
|---|---|---|
| `get_my_application` | `GET /applications/@me` | Application-wide settings are shared by every tenant; operator only. |
| `update_my_application` | `PATCH /applications/@me` | Changing the bot application would affect every server. |
| `get_application` | `GET /applications/{application_id}` | Application-wide; not server-scoped. |
| `update_application` | `PATCH /applications/{application_id}` | Changing the bot application would affect every server. |
| `applications_get_activity_instance` | `GET /applications/{application_id}/activity-instances/{instance_id}` | Embedded activities; not server management. |
| `upload_application_attachment` | `POST /applications/{application_id}/attachment` | Application asset upload; not server management. |
| `list_application_commands` | `GET /applications/{application_id}/commands` | Global commands affect every server. |
| `create_application_command` | `POST /applications/{application_id}/commands` | Global commands affect every server. |
| `bulk_set_application_commands` | `PUT /applications/{application_id}/commands` | Global commands affect every server. |
| `get_application_command` | `GET /applications/{application_id}/commands/{command_id}` | Global commands affect every server. |
| `update_application_command` | `PATCH /applications/{application_id}/commands/{command_id}` | Global commands affect every server. |
| `delete_application_command` | `DELETE /applications/{application_id}/commands/{command_id}` | Global commands affect every server. |
| `list_application_emojis` | `GET /applications/{application_id}/emojis` | Application emojis are shared across tenants. |
| `create_application_emoji` | `POST /applications/{application_id}/emojis` | Application emojis are shared across tenants. |
| `get_application_emoji` | `GET /applications/{application_id}/emojis/{emoji_id}` | Application emojis are shared across tenants. |
| `update_application_emoji` | `PATCH /applications/{application_id}/emojis/{emoji_id}` | Application emojis are shared across tenants. |
| `delete_application_emoji` | `DELETE /applications/{application_id}/emojis/{emoji_id}` | Application emojis are shared across tenants. |
| `get_entitlements` | `GET /applications/{application_id}/entitlements` | Monetization (application-wide). |
| `create_entitlement` | `POST /applications/{application_id}/entitlements` | Monetization (application-wide). |
| `get_entitlement` | `GET /applications/{application_id}/entitlements/{entitlement_id}` | Monetization (application-wide). |
| `delete_entitlement` | `DELETE /applications/{application_id}/entitlements/{entitlement_id}` | Monetization (application-wide). |
| `consume_entitlement` | `POST /applications/{application_id}/entitlements/{entitlement_id}/consume` | Monetization (application-wide). |
| `get_application_role_connections_metadata` | `GET /applications/{application_id}/role-connections/metadata` | Linked-roles metadata is application-wide. |
| `update_application_role_connections_metadata` | `PUT /applications/{application_id}/role-connections/metadata` | Linked-roles metadata is application-wide. |
| `deprecated_list_pins` | `GET /channels/{channel_id}/pins` | Superseded by list_pins. |
| `deprecated_create_pin` | `PUT /channels/{channel_id}/pins/{message_id}` | Superseded by create_pin. |
| `deprecated_delete_pin` | `DELETE /channels/{channel_id}/pins/{message_id}` | Superseded by delete_pin. |
| `add_group_dm_user` | `PUT /channels/{channel_id}/recipients/{user_id}` | Group DMs are not server-scoped. |
| `delete_group_dm_user` | `DELETE /channels/{channel_id}/recipients/{user_id}` | Group DMs are not server-scoped. |
| `get_gateway` | `GET /gateway` | Gateway connection info; not useful to an agent. |
| `get_bot_gateway` | `GET /gateway/bot` | Gateway connection info; not useful to an agent. |
| `get_guild_widget_png` | `GET /guilds/{guild_id}/widget.png` | Binary image response. |
| `create_interaction_response` | `POST /interactions/{interaction_id}/{interaction_token}/callback` | Interaction callbacks need a live interaction token. |
| `create_lobby` | `POST /lobbies` | Social SDK lobbies; not server management. |
| `create_or_join_lobby` | `PUT /lobbies` | Social SDK lobbies; not server management. |
| `get_lobby` | `GET /lobbies/{lobby_id}` | Social SDK lobbies; not server management. |
| `edit_lobby` | `PATCH /lobbies/{lobby_id}` | Social SDK lobbies; not server management. |
| `delete_lobby` | `DELETE /lobbies/{lobby_id}` | Social SDK lobbies; not server management. |
| `edit_lobby_channel_link` | `PATCH /lobbies/{lobby_id}/channel-linking` | Social SDK lobbies; not server management. |
| `leave_lobby` | `DELETE /lobbies/{lobby_id}/members/@me` | Social SDK lobbies; not server management. |
| `create_linked_lobby_guild_invite_for_self` | `POST /lobbies/{lobby_id}/members/@me/invites` | Social SDK lobbies; not server management. |
| `bulk_update_lobby_members` | `POST /lobbies/{lobby_id}/members/bulk` | Social SDK lobbies; not server management. |
| `add_lobby_member` | `PUT /lobbies/{lobby_id}/members/{user_id}` | Social SDK lobbies; not server management. |
| `delete_lobby_member` | `DELETE /lobbies/{lobby_id}/members/{user_id}` | Social SDK lobbies; not server management. |
| `create_linked_lobby_guild_invite_for_user` | `POST /lobbies/{lobby_id}/members/{user_id}/invites` | Social SDK lobbies; not server management. |
| `get_lobby_messages` | `GET /lobbies/{lobby_id}/messages` | Social SDK lobbies; not server management. |
| `create_lobby_message` | `POST /lobbies/{lobby_id}/messages` | Social SDK lobbies; not server management. |
| `update_lobby_message_external_moderation_metadata` | `PUT /lobbies/{lobby_id}/messages/{message_id}/moderation-metadata` | Social SDK lobbies; not server management. |
| `get_my_oauth2_authorization` | `GET /oauth2/@me` | OAuth plumbing. |
| `get_my_oauth2_application` | `GET /oauth2/applications/@me` | Application-wide; not server-scoped. |
| `get_public_keys` | `GET /oauth2/keys` | OAuth plumbing. |
| `get_openid_connect_userinfo` | `GET /oauth2/userinfo` | OAuth plumbing. |
| `update_user_message_external_moderation_metadata` | `PUT /partner-sdk/dms/{user_id_1}/{user_id_2}/messages/{message_id}/moderation-metadata` | Social SDK; not server management. |
| `partner_sdk_unmerge_provisional_account` | `POST /partner-sdk/provisional-accounts/unmerge` | Social SDK; not server management. |
| `bot_partner_sdk_unmerge_provisional_account` | `POST /partner-sdk/provisional-accounts/unmerge/bot` | Social SDK; not server management. |
| `partner_sdk_token` | `POST /partner-sdk/token` | Social SDK; not server management. |
| `bot_partner_sdk_token` | `POST /partner-sdk/token/bot` | Social SDK; not server management. |
| `get_sku_subscriptions` | `GET /skus/{sku_id}/subscriptions` | Monetization (application-wide). |
| `get_sku_subscription` | `GET /skus/{sku_id}/subscriptions/{subscription_id}` | Monetization (application-wide). |
| `update_my_user` | `PATCH /users/@me` | Changing UberBot's global avatar/username would affect every server. Use update_my_guild_member for a per-server nickname. |
| `get_current_user_application_entitlements` | `GET /users/@me/applications/{application_id}/entitlements` | Requires a user OAuth token. |
| `get_application_user_role_connection` | `GET /users/@me/applications/{application_id}/role-connection` | Requires a user OAuth token. |
| `update_application_user_role_connection` | `PUT /users/@me/applications/{application_id}/role-connection` | Requires a user OAuth token. |
| `delete_application_user_role_connection` | `DELETE /users/@me/applications/{application_id}/role-connection` | Requires a user OAuth token. |
| `create_dm` | `POST /users/@me/channels` | Opening arbitrary DMs is not server-scoped. Use discord_send_direct_message, which only DMs members of your server. |
| `list_my_connections` | `GET /users/@me/connections` | OAuth user data; not available to a bot. |
| `list_my_guilds` | `GET /users/@me/guilds` | Would reveal every server UberBot is installed in. Use discord_list_servers (shows only the caller's servers). |
| `get_my_guild_member` | `GET /users/@me/guilds/{guild_id}/member` | Requires a user OAuth token. |
