{"openapi":"3.1.0","info":{"title":"Discord (BYOK) API","version":"0.1.0","description":"Discord (BYOK) lets an AI assistant read your own Discord data through the Discord API with a key you supply (bot token (the token only, without the word Bot)). Read-only: 12 tools (get_bot_user, list_bot_guilds, get_guild, list_guild_channels, get_channel, list_channel_messages, list_guild_roles, list_guild_members, search_guild_members, list_scheduled_events, list_active_threads,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-discord.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-discord/docs"},"termsOfService":"https://connectorbay.com/byok-discord/terms"},"servers":[{"url":"https://byok-discord.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-discord/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_bot_user":{"post":{"operationId":"get_bot_user","summary":"Show the bot account the token belongs to: id, username, global name, whether it is a bot and its public flags. Use for ","description":"Show the bot account the token belongs to: id, username, global name, whether it is a bot and its public flags. Use for \"Which Discord bot account is this token for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_bot_userArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_bot_guilds":{"post":{"operationId":"list_bot_guilds","summary":"List the servers the bot has joined with name, whether the bot's owner owns it, the bot's permission bitfield and option","description":"List the servers the bot has joined with name, whether the bot's owner owns it, the bot's permission bitfield and optional member counts. Paged by guild id. Use for \"Which Discord servers is my bot in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":200,"description":"How many servers to return (1 to 200).","title":"Limit"},"after":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Return servers after this guild ID (use the last id of the previous page).","title":"After"},"before":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Return servers before this guild ID.","title":"Before"},"with_counts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include approximate member and online counts.","title":"With Counts"}},"title":"list_bot_guildsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_guild":{"post":{"operationId":"get_guild","summary":"Get one server's settings: name, description, owner, verification level, boost tier, locale, vanity code and optional me","description":"Get one server's settings: name, description, owner, verification level, boost tier, locale, vanity code and optional member counts. Use for \"What are the details of my Discord server 81384788765712384\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"},"with_counts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include approximate member and online counts.","title":"With Counts"}},"required":["guild_id"],"title":"get_guildArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_guild_channels":{"post":{"operationId":"list_guild_channels","summary":"List every channel and category of a server with type code, name, parent category, position, topic and NSFW flag. Use fo","description":"List every channel and category of a server with type code, name, parent category, position, topic and NSFW flag. Use for \"What channels does my Discord server have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"}},"required":["guild_id"],"title":"list_guild_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_channel":{"post":{"operationId":"get_channel","summary":"Get one channel: type code, name, topic, parent, slow-mode seconds, NSFW flag and last message id. Use for \"What is the ","description":"Get one channel: type code, name, topic, parent, slow-mode seconds, NSFW flag and last message id. Use for \"What is the topic of Discord channel 41771983423143937\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel_id":{"description":"Discord channel ID: a numeric snowflake such as '41771983423143937' (right-click the channel with Developer Mode on, Copy Channel ID).","maxLength":25,"title":"Channel Id","type":"string"}},"required":["channel_id"],"title":"get_channelArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channel_messages":{"post":{"operationId":"list_channel_messages","summary":"List recent messages of a text channel, newest first, with author, text, time and pinned flag. The bot needs View Channe","description":"List recent messages of a text channel, newest first, with author, text, time and pinned flag. The bot needs View Channel and Read Message History; message text needs the Message Content intent. Use for \"What were the latest messages in Discord channel 41771983423143937\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel_id":{"description":"Discord channel ID: a numeric snowflake such as '41771983423143937' (right-click the channel with Developer Mode on, Copy Channel ID).","maxLength":25,"title":"Channel Id","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many messages to return (1 to 100).","title":"Limit"},"before":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages before this message ID.","title":"Before"},"after":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages after this message ID.","title":"After"},"around":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Messages around this message ID.","title":"Around"}},"required":["channel_id"],"title":"list_channel_messagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_guild_roles":{"post":{"operationId":"list_guild_roles","summary":"List the roles of a server with name, color, position, permission bitfield, hoisted and managed flags. Use for \"What rol","description":"List the roles of a server with name, color, position, permission bitfield, hoisted and managed flags. Use for \"What roles are defined in my Discord server\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"}},"required":["guild_id"],"title":"list_guild_rolesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_guild_members":{"post":{"operationId":"list_guild_members","summary":"List members of a server with username, nickname, role IDs and join date, paged by user id. Needs the privileged Server ","description":"List members of a server with username, nickname, role IDs and join date, paged by user id. Needs the privileged Server Members intent enabled for the bot. Use for \"Who are the members of my Discord server\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many members to return (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Return members after this user ID (use the last user id of the previous page); 0 or empty starts at the beginning.","title":"After"}},"required":["guild_id"],"title":"list_guild_membersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_guild_members":{"post":{"operationId":"search_guild_members","summary":"Search server members whose username or nickname starts with the given text. Use for \"Find the member of my Discord serv","description":"Search server members whose username or nickname starts with the given text. Use for \"Find the member of my Discord server named alex\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"},"query":{"description":"Text the username or nickname must start with.","maxLength":100,"title":"Query","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many members to return (1 to 1000).","title":"Limit"}},"required":["guild_id","query"],"title":"search_guild_membersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_scheduled_events":{"post":{"operationId":"list_scheduled_events","summary":"List a server's scheduled events with name, description, start and end time, status, entity type and interested-user cou","description":"List a server's scheduled events with name, description, start and end time, status, entity type and interested-user count. Use for \"What events are scheduled in my Discord server\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"},"with_user_count":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include how many users are interested in each event.","title":"With User Count"}},"required":["guild_id"],"title":"list_scheduled_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_active_threads":{"post":{"operationId":"list_active_threads","summary":"List the active (not archived) threads of a server with name, parent channel, owner, message count and archive state. Us","description":"List the active (not archived) threads of a server with name, parent channel, owner, message count and archive state. Use for \"Which threads are active in my Discord server\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"}},"required":["guild_id"],"title":"list_active_threadsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_guild_emojis":{"post":{"operationId":"list_guild_emojis","summary":"List a server's custom emojis with name, whether animated and available, and the roles allowed to use them. Use for \"Wha","description":"List a server's custom emojis with name, whether animated and available, and the roles allowed to use them. Use for \"What custom emojis does my Discord server have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"guild_id":{"description":"Discord server (guild) ID: a numeric snowflake such as '81384788765712384' (enable Developer Mode in Discord, right-click the server, Copy Server ID).","maxLength":25,"title":"Guild Id","type":"string"}},"required":["guild_id"],"title":"list_guild_emojisArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}