Create a conversation
Creates a new conversation. Supports both contact-initiated (customer/lead) and admin-initiated (outreach) conversations.
Contact-Initiated Conversation
For conversations started by a customer or lead:
| Field | Type | Required | Description |
|---|---|---|---|
from.type | string | Yes | Must be "contact" |
from.id | string | Yes | The Featurebase contact ID (24-character ObjectId) |
bodyMarkdown | string | Yes | The initial message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored. |
channel | string | No | The channel: "desktop" (default) or "email" |
createdAt | string | No | ISO timestamp for migrations |
Example Contact-Initiated Request
{
"from": {
"type": "contact",
"id": "676f0f6765bdaa7d7d760f88"
},
"bodyMarkdown": "Hello, I have a question about your product.",
"channel": "desktop"
}Admin-Initiated Outreach
For outreach conversations started by an admin:
| Field | Type | Required | Description |
|---|---|---|---|
from.type | string | Yes | Must be "admin" |
from.id | string | Yes | The Featurebase admin ID (24-character ObjectId) |
bodyMarkdown | string | Yes | The initial message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored. |
channel | string | No | The channel: "desktop" (default) or "email" |
recipients | object | Yes | Recipients for the outreach |
recipients.to | object | Yes | Primary recipients |
recipients.to.emails | string[] | No* | Email addresses |
recipients.to.ids | string[] | No* | Featurebase contact IDs |
recipients.cc | object | No | CC recipients (same structure as "to") |
recipients.bcc | object | No | BCC recipients (same structure as "to") |
subject | string | No** | Email subject line |
createdAt | string | No | ISO timestamp for migrations |
*At least one email or ID is required in recipients.to
**Required when channel is "email"
Example Admin Outreach (In-App)
{
"from": {
"type": "admin",
"id": "507f1f77bcf86cd799439011"
},
"bodyMarkdown": "Hi! Just following up on your inquiry.",
"channel": "desktop",
"recipients": {
"to": {
"ids": ["676f0f6765bdaa7d7d760f88"]
}
}
}Example Admin Outreach (Email)
{
"from": {
"type": "admin",
"id": "507f1f77bcf86cd799439011"
},
"bodyMarkdown": "Hi! Just following up on your inquiry.",
"channel": "email",
"subject": "Following up on your inquiry",
"recipients": {
"to": {
"emails": ["john@example.com"]
},
"cc": {
"emails": ["manager@example.com"]
}
}
}Response
Returns the created conversation object with a 201 Created status.
Example Response
{
"object": "conversation",
"id": "12345",
"state": "open",
"priority": false,
"adminAssigneeId": null,
"participants": [
{ "type": "customer", "id": "676f0f6765bdaa7d7d760f88" }
],
"source": {
"channel": "desktop",
"deliveredAs": "customer_initiated",
"bodyHtml": "<p>Hello, I have a question about your product.</p>",
"bodyMarkdown": "Hello, I have a question about your product.",
"author": { "type": "customer", "id": "676f0f6765bdaa7d7d760f88" }
},
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}Version Availability
This endpoint is only available in API version 2026-01-01.nova and newer.
Body
The content of the initial message in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored.
1Hello, I have a question about your product.
The channel for the conversation. Defaults to "desktop" (SDK/widget).
desktop, emaildesktopThe time the conversation was created as an ISO timestamp. If not provided, the current time will be used. This field is recommended for migrating past conversations from another source.
2025-01-15T10:30:00.000ZThe author initiating the conversation. Use type "contact" for customer/lead or "admin" for outreach.
Conversation initiated by a contact
Conversation initiated by an admin (outreach)
Recipients for admin-initiated outreach. Required when from.type is "admin". Specify at least one recipient in the "to" field.
Skip admin notifications (push and activity email) for a conversation started by a contact (default: false). Useful for bulk imports.
falseResponse
Created
State of AI agent handling for this conversation
active, handed_off_to_human, resolvedactiveISO timestamp when bot state last changed
2025-01-15T10:30:00.000ZID of the brand associated with this conversation
507f1f77bcf86cd799439011Array of conversation parts (messages). Only included when fetching a single conversation by ID.
Custom conversation attribute values expanded with definition metadata. Returned only when include=customAttributeDefinitions is provided.
Custom conversation attributes keyed by custom attribute ID. Only org-defined, non-archived conversation attributes are returned; internal workflow metadata is omitted.
Whether an admin has manually overridden the language for this conversation. When true, automatic language detection is disabled.
falseObject type identifier
conversationconversationISO timestamp when priority was set
2025-01-15T10:30:00.000ZRead receipts indicating how far each participant has read in the conversation. Each receipt maps a user to their last-read conversation part. The tracked position reflects the system read state and may reference parts the user cannot directly view (e.g., a contact's read position may point to an internal admin note). Use these receipts to render read indicators and typing awareness, not to infer content access.
ISO timestamp until which conversation is snoozed
2025-01-16T09:00:00.000ZCurrent state of the conversation
open, closed, snoozedopenISO timestamp when conversation was last updated
2025-01-15T12:30:00.000Z