# chiefOfStaff.channels.update

Set rules for one Discord channel and its threads: how the Chief of Staff replies there (or that it stays out), its profile, tools turned on or off, and instructions. Pass reset to clear the channel's rules. Pass the channel's revision as expectedRevision (0 the first time). Only the platform owner's workspace has a Chief of Staff. Administrator access required.

`POST /api/v1/accounting/chiefOfStaff.channels.update`

Permissions: `accounting:read`, `accounting:write`, `accounting:admin` · Roles: admin · Idempotency key required · Send `expectedRevision`

MCP tool: `accounting_chief_of_staff_channels_update`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `guildId` | string | Yes | Matches ^\d{17,20}$. |
| `channelId` | string | Yes | Matches ^\d{17,20}$. |
| `channelName` | string or null |  |  |
| `mode` | enum |  | inherit follows the server; conversation, mentions or off replace it here and in the channel's threads. One of: `inherit`, `conversation`, `mentions`, `off`. |
| `profileId` | enum or null |  | The profile for this channel. Null keeps the one its name picks. One of: `general`, `hackathon`, `organizer`, `news`. |
| `allowTools` | array of enum values |  | Tools turned on here on top of the profile's. One of: `getCurrentEventsFromLuma`, `getEventStatsFromLuma`, `getEventDetailsFromLuma`, `getEventGuestsFromLuma`, `getCommunityContacts`, `webSearch`, `scrapeUrl`, `github`, `weather`. at most 9 items. |
| `blockTools` | array of enum values |  | Tools turned off here. One of: `getCurrentEventsFromLuma`, `getEventStatsFromLuma`, `getEventDetailsFromLuma`, `getEventGuestsFromLuma`, `getCommunityContacts`, `webSearch`, `scrapeUrl`, `github`, `weather`. at most 9 items. |
| `instructions` | string |  | Extra instructions the Chief of Staff follows there, in plain words. Empty clears them. at most 2000 characters. |
| `reset` | boolean |  | Clear every setting for this channel so it follows the server again. |
| `expectedRevision` | integer |  | The revision you last read: 0 for something never saved. A different revision means someone else changed it first. 0 to 9007199254740990. |
| `idempotencyKey` | string | Yes | Any unique text you generate once per intended change, so a retried request only happens once. Send it as the Idempotency-Key header instead if you prefer; if you send both they must match. 8–200 characters. |

## Example request

```bash
curl https://app.getoatmilk.com/api/v1/accounting/chiefOfStaff.channels.update \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "guildId": "11111111111111111",
  "channelId": "11111111111111111"
}'
```

Reference page: https://app.getoatmilk.com/docs/api/chiefOfStaff.channels.update
