Update a conversation
PATCH/v2/conversations/{id}
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 |
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": {
"priority_level": "high",
"category": "billing"
}
}
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
actingAdminId: optional string
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.
customAttributes: optional map[unknown]
Custom attributes to set on the conversation. Uses the same validation as v1 API.
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": {
"priority_level": "bar",
"category": "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,
"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"
},
"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,
"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"
}
},
"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",
"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,
"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"
},
"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,
"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"
}
},
"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",
"subject": "Question about pricing",
"url": "https://example.com/pricing"
},
"title": "Question about pricing"
}