# Chat delivery

URL: /systems/communications/chat · Id: `capability:chat`

> Chat delivery posts and receives Messages in connected chat workspaces, carries buttons and forms, and links each chat account to a Worker or Contact.

Chat delivery posts and receives [Messages](/business/nouns/message) in connected chat workspaces, carries buttons and forms, and links each chat account to a [Worker](/business/nouns/worker) or [Contact](/business/nouns/contact).

## Contract
A [Startup](/business/nouns/startup), a [Human](/business/nouns/human) or a [Customer](/business/nouns/customer) connects a workspace as an [Integration](/business/nouns/integration) with [`Integration.connect`](/business/nouns/integration/connect). Each connected chat channel is a [Channel](/business/nouns/channel), and its Messages keep one id in [db.sb](/code/platform/db-sb). The copy in the workspace is an alias of that id.

| Guarantee | Detail |
| --- | --- |
| Records | A Message posts through [`Message.create`](/business/nouns/message/create) and lands in its [Thread](/business/nouns/thread) |
| Import | Only what becomes a record imports: Messages addressed to a Worker, mentions, [Approval](/business/nouns/approval) answers and [Conversation](/business/nouns/conversation) turns; no history backfill |
| Training | Nothing read from a workspace trains a model |
| Buttons and forms | A message carries buttons and a form; a press runs as an [Action](/business/nouns/action) `via: chat` |
| Acknowledgement | Every inbound event is acknowledged within 3 seconds and runs as an Action; a retry with the same upstream id runs once |
| Identity | An unlinked chat account can read and reply, but cannot call a [Verb](/business/nouns/verb) or answer through [`Approval.approve`](/business/nouns/approval/approve) |
| Checks | [Guards](/business/nouns/guard), [Consent](/business/nouns/consent) and send-rate [Limits](/business/nouns/limit) run before every post, as for email |
| Posting as an agent | An [Agent](/business/nouns/agent) posts under its own name, labeled as an Agent, and as a Human only under that Human's [Mandate](/business/nouns/mandate) |
| Escalation | A notice unanswered in chat moves to push, then to SMS |
| Failures | A post refused for rate, a revoked token and a removed Channel each return their own error and next step |

The [Chat app](/code/sdk/guides/chat) [Interface](/business/nouns/interface) builds on this capability.

## Verbs
| Verb | Object | Event |
| --- | --- | --- |
| [Message.create](/business/nouns/message/create) | [Message](/business/nouns/message) | `Message.created` |
| [Channel.create](/business/nouns/channel/create) | [Channel](/business/nouns/channel) | `Channel.created` |
| [Thread.create](/business/nouns/thread/create) | [Thread](/business/nouns/thread) | `Thread.created` |

## Interfaces
- [API](/code/api/reference)
- [SDK](/code/sdk/reference)
- [CLI](/code/cli/reference)
- [MCP](/code/mcp/reference)
- Webhooks

## Example
`patentpad.com` connects its team's Slack workspace. A refund over its Limit posts an Approval with two buttons to the finance channel, and a linked Human presses `Approve`. The post updates in place for everyone, and the refund runs.