Update a conversation
Updates a conversation’s properties. Supports partial updates - only provided fields will be updated.
Path Parameters
id- The conversation ID (short ID)
Request Body
All fields are optional. Only provided fields will be updated.
| Field | Type | Description |
|---|---|---|
actingAdminId | string | Admin ID performing the action (for attribution). If not provided, uses bot service user. Must be a member of the organization. |
state | string | Conversation state: “open”, “closed”, or “snoozed” |
snoozedUntil | string | ISO datetime when to unsnooze (required when state is “snoozed”) |
adminAssigneeId | string/null | Admin ID to assign, or null to unassign |
teamAssigneeId | string/null | Team ID to assign, or null to unassign |
title | string | Conversation title |
customAttributes | object | Custom attributes to set on the conversation, keyed by conversation custom attribute ID |
markAsRead | object | Mark conversation as read for specific users |
markAsRead Object
| Field | Type | Description |
|---|---|---|
allAdmins | boolean | If true, marks all admins with existing readReceipts as read |
adminIds | string[] | Array of specific admin IDs to mark as read |
allContacts | boolean | If true, marks all contacts with existing readReceipts as read |
contactIds | string[] | Array of specific contact IDs to mark as read |
Note: Only users with existing read receipts will be updated. Use allAdmins/allContacts OR adminIds/contactIds - the “all” flags take precedence.
Response
Returns the updated conversation object.
Example: Close a Conversation (with attribution)
{
"actingAdminId": "507f1f77bcf86cd799439011",
"state": "closed"
}
Example: Close a Conversation (bot user)
{
"state": "closed"
}
Example: Snooze a Conversation
{
"state": "snoozed",
"snoozedUntil": "2025-01-20T10:00:00.000Z"
}
Example: Assign to an Admin
{
"adminAssigneeId": "507f1f77bcf86cd799439011"
}
Example: Update Title and Custom Attributes
{
"title": "Billing Issue - Priority",
"customAttributes": {
"507f1f77bcf86cd799439011": 10,
"507f1f77bcf86cd799439012": true
}
}
Example: Mark as Read (All Admins)
{
"markAsRead": {
"allAdmins": true
}
}
Example: Mark as Read (All Contacts)
{
"markAsRead": {
"allContacts": true
}
}
Example: Mark as Read (Specific IDs)
{
"markAsRead": {
"adminIds": ["507f1f77bcf86cd799439011"],
"contactIds": ["676f0f6765bdaa7d7d760f88"]
}
}
Version Availability
This endpoint is only available in API version 2026-01-01.nova and newer.
Body ParametersJSON
The admin ID performing this action. Changes will be attributed to this admin. If not provided, changes are attributed to the system bot user. The admin must be a member of the organization.
Custom attributes to set on the conversation, keyed by conversation custom attribute ID. Use the custom attribute definitions for your organization to map IDs to display names.
Update a conversation
curl https://do.featurebase.app/v2/conversations/$ID \
-X PATCH \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $FEATUREBASE_API_KEY" \
-d '{
"actingAdminId": "507f1f77bcf86cd799439011",
"adminAssigneeId": "507f1f77bcf86cd799439011",
"customAttributes": {
"507f1f77bcf86cd799439011": "bar",
"507f1f77bcf86cd799439012": "bar"
},
"snoozedUntil": "2025-01-20T10:00:00.000Z",
"state": "open",
"teamAssigneeId": "507f1f77bcf86cd799439012",
"title": "Question about pricing"
}'{
"id": "12345",
"adminAssigneeId": "507f1f77bcf86cd799439011",
"botConversationStateLastUpdatedAt": "2025-01-15T10:30:00.000Z",
"brandId": "507f1f77bcf86cd799439011",
"createdAt": "2025-01-15T10:30:00.000Z",
"hasAdminOverriddenLanguage": false,
"isBlocked": false,
"lastActivityAt": "2025-01-15T12:30:00.000Z",
"object": "conversation",
"participants": [
{
"id": "676f0f6765bdaa7d7d760f88",
"type": "customer"
}
],
"priority": false,
"prioritySetAt": "2025-01-15T10:30:00.000Z",
"snoozedUntil": "2025-01-16T09:00:00.000Z",
"state": "open",
"tags": [
{
"id": "67ec1234abcd5678ef901234",
"name": "Churn",
"type": "tag"
}
],
"teamAssigneeId": "507f1f77bcf86cd799439012",
"updatedAt": "2025-01-15T12:30:00.000Z",
"userPreferredLanguage": "en",
"waitingSince": "2025-01-15T10:30:00.000Z",
"awaitingCustomerReply": true,
"botConversationState": "active",
"conversationParts": [
{
"id": "1",
"bodyHtml": "<p>Hello, I have a question about your product.</p>",
"bodyMarkdown": "Hello, I have a question about your product.",
"channel": "desktop",
"createdAt": "2025-01-15T10:30:00.000Z",
"object": "conversation_part",
"partType": "user_msg",
"updatedAt": "2025-01-15T10:30:00.000Z",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"type": "customer",
"email": "john@example.com",
"name": "John Doe",
"profilePicture": "https://cdn.example.com/avatars/user.png"
},
"redacted": false,
"slack": {
"channelId": "C01EFGH",
"messageTs": "1705313410.001200",
"teamId": "T01ABCD",
"threadTs": "1705313400.001100"
},
"tagApplications": [
{
"appliedAt": "2025-01-15T10:30:00.000Z",
"tagId": "67ec1234abcd5678ef901234",
"appliedBy": {
"type": "admin",
"id": "507f1f77bcf86cd799439011",
"name": "John Doe"
},
"removedAt": "2025-01-15T11:00:00.000Z",
"removedBy": {
"type": "admin",
"id": "507f1f77bcf86cd799439011",
"name": "John Doe"
},
"tag": {
"id": "67ec1234abcd5678ef901234",
"name": "Churn",
"type": "tag"
}
}
]
}
],
"csatDebug": {
"requestId": "csat_req_123",
"status": "pending",
"changeLockWindowEndsAt": "2025-01-16T12:30:00.000Z",
"emailDelivery": {
"status": "failed",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "smtp_bounce",
"messageId": "msg_123",
"sentAt": "2025-01-15T10:31:00.000Z"
},
"lateSubmitWindowEndsAt": "2025-01-16T10:30:00.000Z",
"slackDelivery": {
"status": "posted",
"channelId": "C01EFGH",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "missing_slack_thread_metadata",
"messageTs": "1705313400.001100",
"postedAt": "2025-01-15T10:31:00.000Z",
"teamId": "T01ABCD"
}
},
"csatHistory": [
{
"channel": "desktop",
"isLatestEffective": true,
"lastUpdatedAt": "2025-01-15T10:35:00.000Z",
"requestedAt": "2025-01-15T10:30:00.000Z",
"requestId": "csat_req_123",
"requestSource": "workflow",
"status": "pending",
"canceledAt": "2025-01-15T10:32:00.000Z",
"changeLockWindowEndsAt": "2025-01-16T12:30:00.000Z",
"emailDelivery": {
"status": "failed",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "smtp_bounce",
"messageId": "msg_123",
"sentAt": "2025-01-15T10:31:00.000Z"
},
"expiredAt": "2025-01-16T10:30:00.000Z",
"lateSubmitWindowEndsAt": "2025-01-16T10:30:00.000Z",
"ratedAgent": {
"type": "teammate",
"id": "507f1f77bcf86cd799439011"
},
"ratedAt": "2025-01-15T10:35:00.000Z",
"remark": "Thanks for the quick help.",
"score": 4,
"slackDelivery": {
"status": "posted",
"channelId": "C01EFGH",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "missing_slack_thread_metadata",
"messageTs": "1705313400.001100",
"postedAt": "2025-01-15T10:31:00.000Z",
"teamId": "T01ABCD"
},
"workflow": {
"workflowActionId": "action_123",
"workflowId": "507f1f77bcf86cd799439011",
"workflowRunId": "run_123",
"workflowStepId": "step_123"
}
}
],
"csatSummary": {
"lastUpdatedAt": "2025-01-15T10:35:00.000Z",
"status": "pending",
"canceledAt": "2025-01-15T10:35:00.000Z",
"channel": "desktop",
"expiredAt": "2025-01-15T10:35:00.000Z",
"ratedAgent": {
"type": "teammate",
"id": "507f1f77bcf86cd799439011"
},
"ratedAt": "2025-01-15T10:35:00.000Z",
"remark": "Very helpful support.",
"requestedAt": "2025-01-15T10:30:00.000Z",
"requestId": "csat_req_123",
"requestSource": "workflow",
"score": 5,
"workflow": {
"workflowActionId": "action_123",
"workflowId": "507f1f77bcf86cd799439011",
"workflowRunId": "run_123",
"workflowStepId": "step_123"
}
},
"customAttributes": {
"507f1f77bcf86cd799439011": "bar",
"507f1f77bcf86cd799439012": "bar"
},
"customAttributeValues": [
{
"id": "65d26304b2e65b1e1278170c",
"dataType": "number",
"fieldSubType": "number",
"identifier": "conversations.customFields.Minutes_to_Resolve",
"name": "Minutes to Resolve",
"options": [
{
"label": "Enterprise",
"id": "65d26304b2e65b1e1278170d"
}
],
"value": 15
}
],
"disableCustomerReply": false,
"readReceipts": [
{
"id": "507f1f77bcf86cd799439011",
"lastReadPartId": "8",
"userType": "admin"
}
],
"source": {
"bodyHtml": "<p>Hi, I have a question about your enterprise plan...</p>",
"bodyMarkdown": "Hi, I have a question about your enterprise plan...",
"channel": "desktop",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"type": "customer"
},
"deliveredAs": "customer_initiated",
"slack": {
"channelId": "C01EFGH",
"teamId": "T01ABCD",
"threadTs": "1705313400.001100"
},
"subject": "Question about pricing",
"url": "https://example.com/pricing"
},
"title": "Question about pricing"
}Returns Examples
{
"id": "12345",
"adminAssigneeId": "507f1f77bcf86cd799439011",
"botConversationStateLastUpdatedAt": "2025-01-15T10:30:00.000Z",
"brandId": "507f1f77bcf86cd799439011",
"createdAt": "2025-01-15T10:30:00.000Z",
"hasAdminOverriddenLanguage": false,
"isBlocked": false,
"lastActivityAt": "2025-01-15T12:30:00.000Z",
"object": "conversation",
"participants": [
{
"id": "676f0f6765bdaa7d7d760f88",
"type": "customer"
}
],
"priority": false,
"prioritySetAt": "2025-01-15T10:30:00.000Z",
"snoozedUntil": "2025-01-16T09:00:00.000Z",
"state": "open",
"tags": [
{
"id": "67ec1234abcd5678ef901234",
"name": "Churn",
"type": "tag"
}
],
"teamAssigneeId": "507f1f77bcf86cd799439012",
"updatedAt": "2025-01-15T12:30:00.000Z",
"userPreferredLanguage": "en",
"waitingSince": "2025-01-15T10:30:00.000Z",
"awaitingCustomerReply": true,
"botConversationState": "active",
"conversationParts": [
{
"id": "1",
"bodyHtml": "<p>Hello, I have a question about your product.</p>",
"bodyMarkdown": "Hello, I have a question about your product.",
"channel": "desktop",
"createdAt": "2025-01-15T10:30:00.000Z",
"object": "conversation_part",
"partType": "user_msg",
"updatedAt": "2025-01-15T10:30:00.000Z",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"type": "customer",
"email": "john@example.com",
"name": "John Doe",
"profilePicture": "https://cdn.example.com/avatars/user.png"
},
"redacted": false,
"slack": {
"channelId": "C01EFGH",
"messageTs": "1705313410.001200",
"teamId": "T01ABCD",
"threadTs": "1705313400.001100"
},
"tagApplications": [
{
"appliedAt": "2025-01-15T10:30:00.000Z",
"tagId": "67ec1234abcd5678ef901234",
"appliedBy": {
"type": "admin",
"id": "507f1f77bcf86cd799439011",
"name": "John Doe"
},
"removedAt": "2025-01-15T11:00:00.000Z",
"removedBy": {
"type": "admin",
"id": "507f1f77bcf86cd799439011",
"name": "John Doe"
},
"tag": {
"id": "67ec1234abcd5678ef901234",
"name": "Churn",
"type": "tag"
}
}
]
}
],
"csatDebug": {
"requestId": "csat_req_123",
"status": "pending",
"changeLockWindowEndsAt": "2025-01-16T12:30:00.000Z",
"emailDelivery": {
"status": "failed",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "smtp_bounce",
"messageId": "msg_123",
"sentAt": "2025-01-15T10:31:00.000Z"
},
"lateSubmitWindowEndsAt": "2025-01-16T10:30:00.000Z",
"slackDelivery": {
"status": "posted",
"channelId": "C01EFGH",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "missing_slack_thread_metadata",
"messageTs": "1705313400.001100",
"postedAt": "2025-01-15T10:31:00.000Z",
"teamId": "T01ABCD"
}
},
"csatHistory": [
{
"channel": "desktop",
"isLatestEffective": true,
"lastUpdatedAt": "2025-01-15T10:35:00.000Z",
"requestedAt": "2025-01-15T10:30:00.000Z",
"requestId": "csat_req_123",
"requestSource": "workflow",
"status": "pending",
"canceledAt": "2025-01-15T10:32:00.000Z",
"changeLockWindowEndsAt": "2025-01-16T12:30:00.000Z",
"emailDelivery": {
"status": "failed",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "smtp_bounce",
"messageId": "msg_123",
"sentAt": "2025-01-15T10:31:00.000Z"
},
"expiredAt": "2025-01-16T10:30:00.000Z",
"lateSubmitWindowEndsAt": "2025-01-16T10:30:00.000Z",
"ratedAgent": {
"type": "teammate",
"id": "507f1f77bcf86cd799439011"
},
"ratedAt": "2025-01-15T10:35:00.000Z",
"remark": "Thanks for the quick help.",
"score": 4,
"slackDelivery": {
"status": "posted",
"channelId": "C01EFGH",
"failedAt": "2025-01-15T10:31:00.000Z",
"failureReason": "missing_slack_thread_metadata",
"messageTs": "1705313400.001100",
"postedAt": "2025-01-15T10:31:00.000Z",
"teamId": "T01ABCD"
},
"workflow": {
"workflowActionId": "action_123",
"workflowId": "507f1f77bcf86cd799439011",
"workflowRunId": "run_123",
"workflowStepId": "step_123"
}
}
],
"csatSummary": {
"lastUpdatedAt": "2025-01-15T10:35:00.000Z",
"status": "pending",
"canceledAt": "2025-01-15T10:35:00.000Z",
"channel": "desktop",
"expiredAt": "2025-01-15T10:35:00.000Z",
"ratedAgent": {
"type": "teammate",
"id": "507f1f77bcf86cd799439011"
},
"ratedAt": "2025-01-15T10:35:00.000Z",
"remark": "Very helpful support.",
"requestedAt": "2025-01-15T10:30:00.000Z",
"requestId": "csat_req_123",
"requestSource": "workflow",
"score": 5,
"workflow": {
"workflowActionId": "action_123",
"workflowId": "507f1f77bcf86cd799439011",
"workflowRunId": "run_123",
"workflowStepId": "step_123"
}
},
"customAttributes": {
"507f1f77bcf86cd799439011": "bar",
"507f1f77bcf86cd799439012": "bar"
},
"customAttributeValues": [
{
"id": "65d26304b2e65b1e1278170c",
"dataType": "number",
"fieldSubType": "number",
"identifier": "conversations.customFields.Minutes_to_Resolve",
"name": "Minutes to Resolve",
"options": [
{
"label": "Enterprise",
"id": "65d26304b2e65b1e1278170d"
}
],
"value": 15
}
],
"disableCustomerReply": false,
"readReceipts": [
{
"id": "507f1f77bcf86cd799439011",
"lastReadPartId": "8",
"userType": "admin"
}
],
"source": {
"bodyHtml": "<p>Hi, I have a question about your enterprise plan...</p>",
"bodyMarkdown": "Hi, I have a question about your enterprise plan...",
"channel": "desktop",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"type": "customer"
},
"deliveredAs": "customer_initiated",
"slack": {
"channelId": "C01EFGH",
"teamId": "T01ABCD",
"threadTs": "1705313400.001100"
},
"subject": "Question about pricing",
"url": "https://example.com/pricing"
},
"title": "Question about pricing"
}