# Redact a conversation part Redacts a conversation part (message) from a conversation. Redaction permanently removes the message content while preserving the conversation structure. Only human message types can be redacted: - user_msg - Messages from customers/leads - admin_msg - Messages from admins - email_msg - Email messages - bot_msg - Bot messages System-generated conversation parts (assignments, status changes, etc.) cannot be redacted. ### Request Body | Field | Type | Required | Description | |-------|------|----------|-------------| | type | string | Yes | The type of item to redact. Currently only "conversation_part" is supported. | | conversationId | string | Yes | The conversation short ID containing the part to redact | | conversationPartId | string | Yes | The conversation part short ID to redact | | actingAdminId | string | No | Admin ID performing the action (for attribution) | ### Response Returns the updated conversation object. ### Example Request json { "type": "conversation_part", "conversationId": "12345", "conversationPartId": "67890", "actingAdminId": "507f1f77bcf86cd799439011" } ### Example Response json { "object": "conversation", "id": "12345", "conversationParts": [ { "object": "conversation_part", "id": "67890", "partType": "user_msg", "bodyHtml": "", "bodyMarkdown": "", "redacted": true, ... } ], ... } ### Error Cases - 400 Bad Request - Only human messages can be redacted - 404 Not Found - Conversation or conversation part not found ### Version Availability This endpoint is only available in API version 2026-01-01.nova and newer. Endpoint: POST /v2/conversations/redact Version: 2026-01-01.nova Security: bearerAuth ## Header parameters: - `Featurebase-Version` (string) API version for this request. Defaults to your organization's configured API version if not specified. Example: "2026-01-01.nova" ## Request fields (application/json): - `type` (string, required) The type of item to redact. Currently only "conversation_part" is supported. Enum: "conversation_part" - `conversationId` (string, required) The conversation short ID that contains the part to redact Example: "12345" - `conversationPartId` (string, required) The conversation part short ID to redact Example: "67890" - `actingAdminId` (string) The admin ID performing this action. If not provided, changes are attributed to the system bot user. Example: "507f1f77bcf86cd799439011" ## Response 200 fields (application/json): - `object` (string, required) Object type identifier Enum: "conversation" - `id` (string, required) Unique conversation identifier Example: "12345" - `title` (string) Conversation title Example: "Question about pricing" - `state` (string, required) Current state of the conversation Enum: "open", "closed", "snoozed" - `isBlocked` (boolean, required) Whether the user is blocked - `priority` (boolean, required) Whether this conversation is marked as priority - `prioritySetAt` (string,null, required) ISO timestamp when priority was set Example: "2025-01-15T10:30:00.000Z" - `adminAssigneeId` (string,null, required) ID of the assigned admin Example: "507f1f77bcf86cd799439011" - `teamAssigneeId` (string,null, required) ID of the assigned team Example: "507f1f77bcf86cd799439012" - `userPreferredLanguage` (string, required) User's preferred language Example: "en" - `source` (object) - `source.channel` (string, required) Channel through which the conversation was initiated Enum: "unknown", "desktop", "android", "ios", "email" - `source.deliveredAs` (string) How the conversation was initiated Enum: "customer_initiated", "admin_initiated" - `source.subject` (string) Subject line for email conversations Example: "Question about pricing" - `source.bodyHtml` (string, required) Body of the initial message as HTML with signed image URLs Example: "

Hi, I have a question about your enterprise plan...

" - `source.bodyMarkdown` (string, required) Body of the initial message as markdown Example: "Hi, I have a question about your enterprise plan..." - `source.author` (object) - `source.author.type` (string, required) Type of participant Enum: "customer", "lead", "admin", "bot", "guest", "integration" - `source.author.id` (string, required) Participant ID Example: "676f0f6765bdaa7d7d760f88" - `source.url` (string) URL where the conversation was initiated Example: "https://example.com/pricing" - `participants` (array, required) Participants in this conversation - `botConversationState` (string) State of AI agent handling for this conversation Enum: "active", "handed_off_to_human", "resolved" - `botConversationStateLastUpdatedAt` (string,null, required) ISO timestamp when bot state last changed Example: "2025-01-15T10:30:00.000Z" - `disableCustomerReply` (boolean) Whether customer replies are disabled - `awaitingCustomerReply` (boolean) Whether we are awaiting a customer reply Example: true - `lastActivityAt` (string,null, required) ISO timestamp of last activity Example: "2025-01-15T12:30:00.000Z" - `waitingSince` (string,null, required) ISO timestamp when conversation started waiting Example: "2025-01-15T10:30:00.000Z" - `snoozedUntil` (string,null, required) ISO timestamp until which conversation is snoozed Example: "2025-01-16T09:00:00.000Z" - `createdAt` (string, required) ISO timestamp when conversation was created Example: "2025-01-15T10:30:00.000Z" - `updatedAt` (string, required) ISO timestamp when conversation was last updated Example: "2025-01-15T12:30:00.000Z" - `readReceipts` (array) Read 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. - `readReceipts.id` (string, required) The internal ID of the user Example: "507f1f77bcf86cd799439011" - `readReceipts.userType` (string, required) Type of user who has read the conversation Enum: "admin", "customer", "lead" - `readReceipts.lastReadPartId` (string, required) The ID of the last conversation part this user has read. Note: This reflects the system-tracked read position and may reference a part the user cannot directly access (e.g., internal notes for contacts). The read state is advanced to the latest part in the conversation regardless of part visibility. Example: "8" - `conversationParts` (array) Array of conversation parts (messages). Only included when fetching a single conversation by ID. ## Response 400 fields (application/json): - `error` (object, required) - `error.type` (string, required) The type of error returned Enum: "invalid_request_error" - `error.code` (string, required) Machine-readable error code Enum: "invalid_request" - `error.message` (string, required) Human-readable error message Example: "An error occurred" - `error.param` (string) The parameter that caused the error (if applicable) Example: "id" - `error.status` (number, required) HTTP status code Enum: 400 ## Response 403 fields (application/json): - `error` (object, required) - `error.type` (string, required) The type of error returned Enum: "authorization_error" - `error.code` (string, required) Machine-readable error code Enum: "forbidden" - `error.message` (string, required) Human-readable error message Example: "An error occurred" - `error.param` (string) The parameter that caused the error (if applicable) Example: "id" - `error.status` (number, required) HTTP status code Enum: 403 ## Response 404 fields (application/json): - `error` (object, required) - `error.type` (string, required) The type of error returned Enum: "invalid_request_error" - `error.code` (string, required) Machine-readable error code Enum: "conversation_not_found", "conversation_part_not_found" - `error.message` (string, required) Human-readable error message Example: "An error occurred" - `error.param` (string) The parameter that caused the error (if applicable) Example: "id" - `error.status` (number, required) HTTP status code Enum: 404