Set a Discord server's channel scope
Replaces the channels this workspace reads from the server. Every id must be a channel of THAT server that the bot can read (channels[].readable; a thread counts as its parent channel), else 400 DISCORD_CHANNEL_INVALID naming the offenders in invalidChannelIds. channelIds: [] restores whole-server scope. Absolute and idempotent. Requires an admin-scoped key; 403 DISCORD_SOURCE_UNAVAILABLE while the Discord source is not enabled for the workspace.
Authorizations
Clerk API key. Create one in Settings → API Keys. Pass as Authorization: Bearer <key>. Keys carry a scope — read, write (implies read) or admin (implies write) — chosen when the key is minted. Each operation's security requirement (and its x-required-scope extension) names the minimum scope it needs; request the least-privileged key that covers the operations you call.
Path Parameters
The connected server's link id (DiscordServer.linkId).
x <= 900719925474099112
Body
Channel ids this workspace reads from the server. Every id must be a channel of the server the bot can read (threads count as their parent channel). [] = the whole server.
500A Discord snowflake id as a decimal string (64-bit — never parse it as a number).
^\d{1,20}$Response
200 response
This workspace's link to the server.
-9007199254740991 <= x <= 9007199254740991A Discord snowflake id as a decimal string (64-bit — never parse it as a number).
^\d{1,20}$"1290000000000000200"
Discord icon hash; null when the server has none.
"https://cdn.discordapp.com/icons/1290000000000000100/a1b2.png"
-9007199254740991 <= x <= 9007199254740991pending_bot: installed, waiting for the bot to come online in the server. active: messages flow. bot_removed: the bot was removed — reconnect it in the app.
pending_bot, active, bot_removed "2026-10-28T12:00:00.000Z"
Channel ids this workspace reads; [] = the whole server.
A Discord snowflake id as a decimal string (64-bit — never parse it as a number).
^\d{1,20}$The server's channels a scope may name (no categories, no threads), readable or not.
-9007199254740991 <= x <= 9007199254740991Average messages per day over the last 7 days; null until the collector reports stats.
"2026-10-28T12:00:00.000Z"
The daily cap a new watch monitor gets by default (plan-tied).
-9007199254740991 <= x <= 9007199254740991100
Mentions a watch monitor with the default cap is expected to create per month (messagesPerDay7d × prefilter pass ratio × 30, capped at defaultDailyCap × 30). null = unknown (no stats yet).
-9007199254740991 <= x <= 9007199254740991"2026-10-28T12:00:00.000Z"
