# Get conversation by ID Retrieves a single conversation by its ID, including conversation parts (messages). ### Path Parameters - id - The conversation ID (short ID) ### Hard Limit of 500 Parts The maximum number of conversation parts that can be returned via the API is 500. If a conversation has more than 500 parts, only the 500 most recent conversation parts will be returned. ### Response Format Returns a single conversation object with: - object - Always "conversation" - id - Unique conversation identifier (short ID) - title - Conversation title - state - Current state ("open", "closed", or "snoozed") - priority - Whether the conversation is marked as priority - adminAssigneeId - ID of assigned admin (if any) - teamAssigneeId - ID of assigned team (if any) - participants - Array of participants - source - Information about the first message - conversationParts - Array of conversation parts (messages, max 500) - createdAt - Creation timestamp - updatedAt - Last update timestamp ### Conversation Parts Each conversation part includes: - object - Always "conversation_part" - id - Unique part identifier - partType - Type of part (e.g., "user_msg", "admin_msg", "bot_msg") - body - Message body (HTML content) - author - Author information with name, email, and profile picture - channel - Channel through which the message was sent - createdAt - Creation timestamp - updatedAt - Last update timestamp ### Example json { "object": "conversation", "id": "12345", "title": "Question about pricing", "state": "open", "priority": false, "adminAssigneeId": "507f1f77bcf86cd799439011", "participants": [ { "type": "customer", "id": "676f0f6765bdaa7d7d760f88" } ], "conversationParts": [ { "object": "conversation_part", "id": "1", "partType": "user_msg", "bodyHtml": "Hello, I have a question about your pricing plans.", "bodyMarkdown": "Hello, I have a question about your pricing plans.", "author": { "type": "customer", "id": "676f0f6765bdaa7d7d760f88", "name": "John Doe", "email": "john@example.com" }, "channel": "desktop", "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": "2025-01-15T10:30:00.000Z" }, { "object": "conversation_part", "id": "2", "partType": "admin_msg", "bodyHtml": "Hi John! I'd be happy to help you with pricing information.", "bodyMarkdown": "Hi John! I'd be happy to help you with pricing information.", "author": { "type": "admin", "id": "507f1f77bcf86cd799439011", "name": "Support Agent" }, "channel": "desktop", "createdAt": "2025-01-15T10:35:00.000Z", "updatedAt": "2025-01-15T10:35:00.000Z" } ], "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": "2025-01-15T10:35:00.000Z" } ### Version Availability This endpoint is only available in API version 2026-01-01.nova and newer. Endpoint: GET /v2/conversations/{id} 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" ## Path parameters: - `id` (string, required) Conversation ID (short ID) Example: "12345" ## 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 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" - `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