Chat API
Channels and messages
List the channels a token can post in and send a message as the member behind it.
Base URLhttps://chat.polder.work
To post you need a channel id, so first list the channels. Both endpoints only reach workspaces with the AI access feature switched on; see Overview.
List channels
/api/v1/channelsReturns the non-archived channels the member can see (public channels, and private channels and direct messages they are in), ordered by name, at most 50. There is no paging.
Query
| Parameter | Description |
|---|---|
search |
Case-insensitive match on part of the channel name. |
| Field | Type | Description |
|---|---|---|
id |
integer | Use this as channel_id when posting. |
name |
string or null | Channel name. Empty for direct messages. |
label |
string | What the channel is called to this member; for a direct message the other person's name. |
type |
string | public, private or dm. |
topic |
string or null | Channel topic. |
workspace |
string or null | Workspace name. |
canPost |
boolean | Whether posting here would be allowed. Reading a public channel does not mean you have joined it. |
curl "https://chat.polder.work/api/v1/channels?search=general" \
-H "Authorization: Bearer $POLDER_TOKEN"
{
"data": [
{
"id": 12,
"name": "general",
"label": "general",
"type": "public",
"topic": "Everything and nothing",
"workspace": "Acme",
"canPost": true
}
]
}
Send a message
/api/v1/messagesPosts a message in a channel, or as a reply in a thread, as the member behind the token. It goes through the same action as the Chat screens, so it notifies people, shows up in sidebars and updates open clients. Attachments are not supported.
Body
| Field | Type | Required | Description |
|---|---|---|---|
channel_id |
integer | yes | From the channel list. |
body |
string | yes | Up to 4000 characters. Surrounding whitespace is trimmed. |
parent_id |
string (ULID) | no | The id of a top-level message in the same channel, to reply in its thread. Replying to a reply is not possible. |
curl https://chat.polder.work/api/v1/messages \
-H "Authorization: Bearer $POLDER_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"channel_id": 12, "body": "Deploy finished."}'
{
"data": {
"id": "01J9Z3K8M2Q4T6V8X0Y2A4C6E8",
"channelId": 12,
"body": "Deploy finished.",
"parentId": null,
"sentAt": "2026-10-28T09:15:00+00:00"
}
}
Returns 201 with the message.
| Status | Meaning |
|---|---|
403 |
The member may not post in this channel, or (with parent_id) may not reply. A channel restricted to admins still allows replies in threads. |
404 |
No such channel, not one the member can see, or a workspace without AI access. All the same answer on purpose. |
422 |
Validation failed, parent_id is not a top-level message of that channel, or the channel is archived. |
MCP tool: send_message (find the id with find_channels).