> ## Documentation Index
> Fetch the complete documentation index at: https://developers.workchats.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Drafts and the "via" label

> How an assistant writes a message for you, waits for your yes, and how the sent message is labelled

An AI assistant never sends a message in one step. It writes a **draft**,
shows it to you, and sends it only after you approve that exact text. A
message that an assistant sends for you carries a small label, for example
"via Claude".

## Draft then send

1. **The assistant drafts.** `draft_message` writes the draft into a
   conversation: a direct message, a group's Main chat or a channel. The
   draft is not sent. The tool returns the draft, its `revision`, a plain
   text `preview`, and instructions to show the draft to you and wait.
2. **You see it in two places.** The assistant shows you the draft. The
   draft also appears in your Workchats message box for that conversation,
   live on every device you are signed in on.
3. **You say yes.** Only then does the assistant call `send_draft` with the
   draft's id and the `revision` you approved.
4. **Workchats sends it as you.** The message goes through the same checks,
   delivery and notifications as a message you type.

Clients such as Claude and ChatGPT ask you before they call `send_draft`,
because it is marked destructive. Still, read the draft before you approve
it.

## If the draft changes

Each change to a draft raises its `revision`:

* the assistant drafts again to the same conversation, which replaces its
  earlier draft there
* you change the draft's text in Workchats

`send_draft` with an older `revision` sends nothing. It returns the
`draft_changed` error with the new text and revision. The assistant must
show you the new text and ask again.

A repeated `send_draft` never sends twice. The second call gets
`draft_not_pending`.

## What you can do with a draft in Workchats

<Info>
  The draft card is in Workchats Web. It is rolling out in the Mobile app.
  Until your app has it, approve drafts in the assistant.
</Info>

In the conversation, the draft shows above your message box, with the
assistant's name. You can:

* **Send it yourself.** It is sent as a normal message from you, with no
  "via" label.
* **Change it.** The assistant must ask you again before it can send.
* **Discard it.** The assistant can no longer send it.

## Rules

* One assistant connection has at most one pending draft in each
  conversation. A new draft there replaces it.
* A draft expires 24 hours after its last change. An expired draft can't be
  sent.
* A draft is visible only to you. Another person never sees it, and another
  assistant connection can't send it.
* The body is 1 to 4,000 characters. To mention someone, write `@` and their
  full name in the body, and give their `usr_` id in `mentions`. A mention
  of a person who is not in the conversation is dropped, and `warnings`
  says so.
* `reply_to_id` must be a message of the same conversation.
* `to` drafts a direct message to a person without a conversation id. It
  opens the direct message if it doesn't exist yet.
* Drafts count toward the limit of 30 drafts and sends an hour. See
  [Limits](/mcp/tools#limits).
* When a draft is sent, discarded or expires, Workchats erases its text. A
  sent draft lives on as its message.

## The label on sent messages

A message that an assistant sent with `send_draft` stores the assistant's
name, for example "Claude", "ChatGPT", "Cursor" or "VS Code", cut to 40
characters. Workchats shows it under the message as "via Claude". A message
you type, and a draft you send yourself from Workchats, never carries it.

Tools return the label too: a message in `read_conversation` or a search
result has `via_client`, null for a message nobody sent through an
assistant.

<Info>
  The label shows in Workchats Web. It is rolling out in the Mobile app. It
  is not yet in push notifications, chat list previews, search results in
  the app, or reply previews.
</Info>

### Who decides

A company admin picks the label policy in the admin console:

| Policy | Effect |
| - | - |
| **Always label** (the default) | Every message an assistant sends is labelled. |
| **Let employees choose** | Each employee decides for their own messages, with **Label my AI-sent messages** in **Settings → Connected AI apps**. |

The choice applies when the assistant sends the message. A message that is
already sent keeps the label it had.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.