PolderAPI

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

GET/api/v1/channels

Returns 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

POST/api/v1/messages

Posts 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).