Ir al contenido principal
Conversations

Put a draft in an admin’s composer

Puts a reply or internal note draft into an admin's composer for a conversation. Nothing is sent: the admin reviews the draft in the dashboard and sends it.

POST
/v2/conversations/{id}/draft

Use this instead of Reply to a conversation when a person asks you to draft, prepare or write a response for them.

Whose composer

adminId is required and names the admin whose composer gets the draft. It must be a member of the organization.

The Featurebase MCP server is the one exception: its draft always goes to the admin who connected it, never to anybody else, so it may leave adminId out. Naming a different admin through MCP is refused with 403.

The draft appears in every browser where that admin has the dashboard open, in real time. A browser that is offline gets it the next time it opens the dashboard.

Behavior

  • A newer draft for the same conversation and messageType replaces the older one.
  • If the admin already typed something in that composer, the draft replaces it and the admin can undo that in the composer.
  • The draft is used up when the admin sends a message of that type in the conversation (from the dashboard or with Reply to a conversation). Its status then becomes sent.
  • Internal tickets (back-office and tracker tickets) take only note drafts.
  • A reply draft needs a full seat, the same as sending a reply.

Limits

A draft can be about 7,000 words (48 KB after formatting) with up to 5 images.

Path Parameters

  • id - The conversation ID (short ID)

Request Body

FieldTypeRequiredDescription
bodyMarkdownstringYesThe draft in markdown, converted to the composer's rich text (paragraphs, lists, links, bold, italic, code, line breaks).
messageTypestringNo"reply" (default) or "note"
adminIdstringYesThe admin whose composer gets the draft.

Example Request

{
  "bodyMarkdown": "Hi Anna,\n\nThanks for the details! The export is fixed now.\n\nLet me know if anything looks off.",
  "messageType": "reply",
  "adminId": "507f1f77bcf86cd799439011"
}

Example Response

{
  "object": "conversation_draft",
  "id": "6720f1c2a9b8c7d6e5f40312",
  "conversationId": "12345",
  "messageType": "reply",
  "status": "pending",
  "bodyHtml": "<p>Hi Anna,</p><p></p><p>Thanks for the details! The export is fixed now.</p><p></p><p>Let me know if anything looks off.</p>",
  "admin": { "id": "507f1f77bcf86cd799439011", "name": "Robi" },
  "dashboardUrl": "https://acme.featurebase.app/dashboard/inbox/all/conversation/12345",
  "createdAt": "2026-10-19T12:30:00.000Z",
  "expiresAt": "2026-11-18T12:30:00.000Z"
}

Version Availability

This endpoint is only available in API version 2026-01-01.nova and newer.

Authorizationstringheaderobligatorio

API key as Bearer token. Use: Authorization: Bearer sk_...

idstringobligatorio

Conversation ID (short ID)

Required string length: 1 - 16
Patrón: ^[a-zA-Z0-9]+$
Ejemplo: 12345
Featurebase-Versionenum<string>header

API version for this request. Defaults to your organization's configured API version if not specified.

Opciones disponibles: 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Ejemplo: 2026-08-19.orbit

Cuerpo

application/json
adminIdstringobligatorio

The admin whose composer gets the draft. Must be a member of the organization.

Ejemplo: 507f1f77bcf86cd799439011
bodyMarkdownstringobligatorio

The draft in markdown, converted to the composer's rich text: paragraphs (a blank line between paragraphs becomes an empty line; lists keep their own spacing), lists, links, bold, italic, code and line breaks. Images referenced by URL or as base64 data URIs are uploaded and stored. At most about 7,000 words (48 KB after formatting) and 5 images.

Minimum string length: 1
Ejemplo: Hi Anna, Thanks for the details! The export is fixed now: 1. Open **Settings → Export** 2. Pick the date range Let me know if anything looks off.
messageTypeenum<string>default:reply

"reply" (default) drafts a customer-facing reply. "note" drafts an internal note that only admins see.

Opciones disponibles: reply, note
Ejemplo: reply

Respuesta

application/json

Created

adminobjectobligatorio

The admin whose composer holds the draft: the owner of the API key or MCP connection that created it.

bodyHtmlstring | nullobligatorio

The draft as the composer shows it. Null once the draft is sent or discarded.

Ejemplo: <p>Hi Anna,</p><p></p><p>Thanks for the details!</p>
conversationIdstringobligatorio

Conversation ID (short ID)

Ejemplo: 12345
createdAtstringobligatorio

ISO timestamp when this draft was created

Ejemplo: 2026-10-19T12:30:00.000Z
dashboardUrlstringobligatorio

Opens the conversation in the dashboard, with the draft in the composer.

Ejemplo: https://acme.featurebase.app/dashboard/inbox/all/conversation/12345
expiresAtstringobligatorio

ISO timestamp after which the server forgets the draft. A device that already shows it keeps it.

Ejemplo: 2026-11-18T12:30:00.000Z
idstringobligatorio

Draft ID. A newer draft for the same conversation and message type replaces this one and gets a new ID.

Ejemplo: 6720f1c2a9b8c7d6e5f40312
messageTypeenum<string>obligatorio

"reply" for a customer-facing reply draft, "note" for an internal note draft

Opciones disponibles: reply, note
Ejemplo: reply
objectenum<string>obligatorio

Object type identifier

Opciones disponibles: conversation_draft
Ejemplo: conversation_draft
statusenum<string>obligatorio

"pending" while the draft waits in the composer. "sent" once the admin sent a message of this type in the conversation, "discarded" once the draft was removed.

Opciones disponibles: pending, sent, discarded
Ejemplo: pending