Skip to content

Featurebase API (2026-01-01.nova)

Welcome to the Featurebase API. This API allows you to programmatically interact with your Featurebase organization.

This documentation reflects API version 2026-01-01.nova.

Download OpenAPI description
Languages
Servers
Mock server
https://docs.featurebase.app/_mock/rest-api/
Production
https://do.featurebase.app/

API Versioning

This API uses date-based versioning. Each version is identified by a release date and slug, e.g., 2026-01-01.nova.

Specifying a Version

Include the version in the request header:

Featurebase-Version: 2026-01-01.nova

Or set a default version for your organization in the dashboard settings.

Version Compatibility

  • Newer versions may add new fields to responses (always backwards-compatible)
  • Breaking changes (removed/renamed fields, changed behavior) only occur in new versions
  • Your integration will continue to work as long as you pin to a specific version

Authentication

All API requests require authentication via API key.

Include in headers:

Authorization: Bearer <api-key>

Create and manage your API keys in the Featurebase dashboard.

Error Handling

The API uses conventional HTTP response codes to indicate success or failure:

  • 2xx - Success
  • 4xx - Client errors (bad request, unauthorized, not found, etc.)
  • 5xx - Server errors (internal error)

Error Response Format

All errors follow a consistent format:

{
  "error": {
    "type": "invalid_request_error",
    "code": "resource_not_found",
    "message": "Post not found",
    "param": "id",
    "status": 404
  }
}

Error Types

TypeDescription
authentication_errorAuthentication failed (401)
authorization_errorPermission denied (403)
invalid_request_errorInvalid request parameters or resource not found (400, 404, 410)
api_errorServer-side error (500)
rate_limit_errorToo many requests (429)

Boards

Boards (post categories) organize feedback into distinct containers with their own settings.

Operations

Posts

User-submitted feedback and feature requests. Posts belong to boards and can be upvoted, commented on, and tracked through statuses.

Operations

Post Statuses

Post statuses define the workflow stages for posts (e.g., In Review, Active, Completed).

Operations

Comments

Threaded discussions on posts and changelogs. Comments support voting, moderation, and privacy controls.

Operations

Custom Fields

Configurable input fields for posts in your Featurebase organization. Custom fields allow you to collect additional structured data when users create posts.

Operations

Changelogs

Release notes and updates published by the organization. Changelogs keep users informed about new features, improvements, and fixes.

Operations

Admins

Team members who manage your Featurebase organization. Admins have roles that define their permissions.

Operations

Teams

Teams are groups within your Featurebase organization. Use this endpoint to list and retrieve team information for conversation assignment and organization management.

Operations

Contacts

Contacts are the customers and leads in your Featurebase organization. Use this endpoint to list and retrieve contact information.

Operations

Companies

Companies represent organizations or businesses that your users belong to. Use this endpoint to list and retrieve company information.

Operations

Surveys

Surveys allow you to collect targeted feedback from your users within your product. Surveys can be targeted to specific user segments or pages and can contain multiple questions with conditional logic.

Operations

Help Centers

Help centers allow organizations to create and manage knowledge bases with articles and collections. Currently, Featurebase supports one help center per organization.

Operations

Conversations

Conversations are messenger/inbox conversations in your Featurebase organization. Use this endpoint to list and retrieve conversation information.

Operations

List conversations

Request

Returns a list of conversations in your organization using cursor-based pagination.

Query Parameters

  • limit - Number of conversations to return (1-100, default 10)
  • cursor - Cursor from previous response for pagination

Response Format

Returns a list object with:

  • object - Always "list"
  • data - Array of conversation objects
  • nextCursor - Cursor for the next page, or null if no more results

Conversation Object

Each conversation includes:

  • 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
  • createdAt - Creation timestamp
  • updatedAt - Last update timestamp

Example

{
  "object": "list",
  "data": [
    {
      "object": "conversation",
      "id": "12345",
      "title": "Question about pricing",
      "state": "open",
      "priority": false,
      "adminAssigneeId": null,
      "participants": [
        { "type": "customer", "id": "676f0f6765bdaa7d7d760f88" }
      ],
      ...
    }
  ],
  "nextCursor": "eyJpZCI6IjEyMzQ1In0="
}

Version Availability

This endpoint is only available in API version 2026-01-01.nova and newer.

Security
bearerAuth
Query
limitinteger[ 1 .. 100 ]

A limit on the number of objects to be returned, between 1 and 100.

Default 10
Example: limit=10
cursorstring<= 512 characters

An opaque cursor for pagination. Use the nextCursor value from a previous response to fetch the next page of results.

Example: cursor=eyJpZCI6IjEyMzQ1In0=
Headers
Featurebase-Versionstring(FeaturebaseVersion)

API version for this request. Defaults to your organization's configured API version if not specified.

Example: 2026-01-01.nova
curl -i -X GET \
  'https://docs.featurebase.app/_mock/rest-api/v2/conversations?limit=10&cursor=eyJpZCI6IjEyMzQ1In0%3D' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Featurebase-Version: 2026-01-01.nova'

Responses

Success

Bodyapplication/json
objectstringrequired

Object type identifier

Value"list"
Example: "list"
dataArray of objects(Conversation)required

Array of conversations

data[].​objectstringrequired

Object type identifier

Value"conversation"
Example: "conversation"
data[].​idstringrequired

Unique conversation identifier

Example: "12345"
data[].​titlestring

Conversation title

Example: "Question about pricing"
data[].​statestringrequired

Current state of the conversation

Enum"open""closed""snoozed"
Example: "open"
data[].​isBlockedbooleanrequired

Whether the user is blocked

Example: false
data[].​prioritybooleanrequired

Whether this conversation is marked as priority

Example: false
data[].​prioritySetAtstring or nullrequired

ISO timestamp when priority was set

Example: "2025-01-15T10:30:00.000Z"
data[].​adminAssigneeIdstring or nullrequired

ID of the assigned admin

Example: "507f1f77bcf86cd799439011"
data[].​teamAssigneeIdstring or nullrequired

ID of the assigned team

Example: "507f1f77bcf86cd799439012"
data[].​userPreferredLanguagestringrequired

User's preferred language

Example: "en"
data[].​sourceobject(MessageSource)
data[].​participantsArray of objects(ConversationParticipant)required

Participants in this conversation

data[].​participants[].​typestringrequired

Type of participant

Enum"customer""lead""admin""bot""guest""integration"
Example: "customer"
data[].​participants[].​idstringrequired

Participant ID

Example: "676f0f6765bdaa7d7d760f88"
data[].​botConversationStatestring

State of AI agent handling for this conversation

Enum"active""handed_off_to_human""resolved"
Example: "active"
data[].​botConversationStateLastUpdatedAtstring or nullrequired

ISO timestamp when bot state last changed

Example: "2025-01-15T10:30:00.000Z"
data[].​disableCustomerReplyboolean

Whether customer replies are disabled

Example: false
data[].​awaitingCustomerReplyboolean

Whether we are awaiting a customer reply

Example: true
data[].​lastActivityAtstring or nullrequired

ISO timestamp of last activity

Example: "2025-01-15T12:30:00.000Z"
data[].​waitingSincestring or nullrequired

ISO timestamp when conversation started waiting

Example: "2025-01-15T10:30:00.000Z"
data[].​snoozedUntilstring or nullrequired

ISO timestamp until which conversation is snoozed

Example: "2025-01-16T09:00:00.000Z"
data[].​createdAtstringrequired

ISO timestamp when conversation was created

Example: "2025-01-15T10:30:00.000Z"
data[].​updatedAtstringrequired

ISO timestamp when conversation was last updated

Example: "2025-01-15T12:30:00.000Z"
data[].​readReceiptsArray of objects(ReadReceipt)

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.

data[].​conversationPartsArray of User Message (object) or Admin Message (object) or Admin Note (object) or Email Message (object) or Bot Message (object) or Quick Reply Options (object) or Quick Reply Response (object) or Attribute Collection Prompt (object) or Attribute Collection Complete (object) or Assignment (object) or Status Change (object) or Priority Change (object) or Participant Added (object)(ConversationPart)

Array of conversation parts (messages). Only included when fetching a single conversation by ID.

nextCursorstring or nullrequired

Cursor for fetching the next page

Example: "eyJpZCI6IjEyMzQ1In0="
Response
application/json
{ "object": "list", "data": [ {} ], "nextCursor": "eyJpZCI6IjEyMzQ1In0=" }

Create a conversation

Request

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:

FieldTypeRequiredDescription
from.typestringYesMust be "contact"
from.idstringYesThe Featurebase contact ID (24-character ObjectId)
bodyMarkdownstringYesThe initial message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored.
channelstringNoThe channel: "desktop" (default) or "email"
createdAtstringNoISO 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:

FieldTypeRequiredDescription
from.typestringYesMust be "admin"
from.idstringYesThe Featurebase admin ID (24-character ObjectId)
bodyMarkdownstringYesThe initial message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored.
channelstringNoThe channel: "desktop" (default) or "email"
recipientsobjectYesRecipients for the outreach
recipients.toobjectYesPrimary recipients
recipients.to.emailsstring[]No*Email addresses
recipients.to.idsstring[]No*Featurebase contact IDs
recipients.ccobjectNoCC recipients (same structure as "to")
recipients.bccobjectNoBCC recipients (same structure as "to")
subjectstringNo**Email subject line
createdAtstringNoISO 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.

Security
bearerAuth
Headers
Featurebase-Versionstring(FeaturebaseVersion)

API version for this request. Defaults to your organization's configured API version if not specified.

Example: 2026-01-01.nova
Bodyapplication/json
fromany(ConversationFrom)required

The author initiating the conversation. Use type "contact" for customer/lead or "admin" for outreach.

from.​typestringrequired

The type of author. Use "contact" for customer/lead initiated conversations.

Value"contact"
Example: "contact"
Discriminator
from.​idstringrequired

The Featurebase contact ID

Example: "676f0f6765bdaa7d7d760f88"
bodyMarkdownstringnon-emptyrequired

The content of the initial message in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored.

Example: "Hello, I have a question about your product.\n\n![screenshot](https://example.com/image.png)"
channelstring

The channel for the conversation. Defaults to "desktop" (SDK/widget).

Default "desktop"
Enum"desktop""email"
Example: "desktop"
recipientsobject(OutreachRecipients)

Recipients for admin-initiated outreach. Required when from.type is "admin". Specify at least one recipient in the "to" field.

subjectstring<= 500 characters

Subject line for the email. Required when channel is "email" and from.type is "admin".

Example: "Following up on your inquiry"
createdAtstring or null

The 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.

Example: "2025-01-15T10:30:00.000Z"
curl -i -X POST \
  https://docs.featurebase.app/_mock/rest-api/v2/conversations \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'Featurebase-Version: 2026-01-01.nova' \
  -d '{
    "from": {
      "type": "contact",
      "id": "676f0f6765bdaa7d7d760f88"
    },
    "bodyMarkdown": "Hello, I have a question about your product.\n\n![screenshot](https://example.com/image.png)",
    "channel": "desktop",
    "recipients": {
      "to": {
        "emails": [
          "john@example.com"
        ],
        "ids": [
          "676f0f6765bdaa7d7d760f88"
        ]
      },
      "cc": {
        "emails": [
          "john@example.com"
        ],
        "ids": [
          "676f0f6765bdaa7d7d760f88"
        ]
      },
      "bcc": {
        "emails": [
          "john@example.com"
        ],
        "ids": [
          "676f0f6765bdaa7d7d760f88"
        ]
      }
    },
    "subject": "Following up on your inquiry",
    "createdAt": "2025-01-15T10:30:00.000Z"
  }'

Responses

Created

Bodyapplication/json
objectstringrequired

Object type identifier

Value"conversation"
Example: "conversation"
idstringrequired

Unique conversation identifier

Example: "12345"
titlestring

Conversation title

Example: "Question about pricing"
statestringrequired

Current state of the conversation

Enum"open""closed""snoozed"
Example: "open"
isBlockedbooleanrequired

Whether the user is blocked

Example: false
prioritybooleanrequired

Whether this conversation is marked as priority

Example: false
prioritySetAtstring or nullrequired

ISO timestamp when priority was set

Example: "2025-01-15T10:30:00.000Z"
adminAssigneeIdstring or nullrequired

ID of the assigned admin

Example: "507f1f77bcf86cd799439011"
teamAssigneeIdstring or nullrequired

ID of the assigned team

Example: "507f1f77bcf86cd799439012"
userPreferredLanguagestringrequired

User's preferred language

Example: "en"
sourceobject(MessageSource)
participantsArray of objects(ConversationParticipant)required

Participants in this conversation

participants[].​typestringrequired

Type of participant

Enum"customer""lead""admin""bot""guest""integration"
Example: "customer"
participants[].​idstringrequired

Participant ID

Example: "676f0f6765bdaa7d7d760f88"
botConversationStatestring

State of AI agent handling for this conversation

Enum"active""handed_off_to_human""resolved"
Example: "active"
botConversationStateLastUpdatedAtstring or nullrequired

ISO timestamp when bot state last changed

Example: "2025-01-15T10:30:00.000Z"
disableCustomerReplyboolean

Whether customer replies are disabled

Example: false
awaitingCustomerReplyboolean

Whether we are awaiting a customer reply

Example: true
lastActivityAtstring or nullrequired

ISO timestamp of last activity

Example: "2025-01-15T12:30:00.000Z"
waitingSincestring or nullrequired

ISO timestamp when conversation started waiting

Example: "2025-01-15T10:30:00.000Z"
snoozedUntilstring or nullrequired

ISO timestamp until which conversation is snoozed

Example: "2025-01-16T09:00:00.000Z"
createdAtstringrequired

ISO timestamp when conversation was created

Example: "2025-01-15T10:30:00.000Z"
updatedAtstringrequired

ISO timestamp when conversation was last updated

Example: "2025-01-15T12:30:00.000Z"
readReceiptsArray of objects(ReadReceipt)

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.

conversationPartsArray of User Message (object) or Admin Message (object) or Admin Note (object) or Email Message (object) or Bot Message (object) or Quick Reply Options (object) or Quick Reply Response (object) or Attribute Collection Prompt (object) or Attribute Collection Complete (object) or Assignment (object) or Status Change (object) or Priority Change (object) or Participant Added (object)(ConversationPart)

Array of conversation parts (messages). Only included when fetching a single conversation by ID.

Response
application/json
{ "object": "conversation", "id": "12345", "title": "Question about pricing", "state": "open", "isBlocked": false, "priority": false, "prioritySetAt": "2025-01-15T10:30:00.000Z", "adminAssigneeId": "507f1f77bcf86cd799439011", "teamAssigneeId": "507f1f77bcf86cd799439012", "userPreferredLanguage": "en", "source": { "channel": "desktop", "deliveredAs": "customer_initiated", "subject": "Question about pricing", "bodyHtml": "<p>Hi, I have a question about your enterprise plan...</p>", "bodyMarkdown": "Hi, I have a question about your enterprise plan...", "author": {}, "url": "https://example.com/pricing" }, "participants": [ {} ], "botConversationState": "active", "botConversationStateLastUpdatedAt": "2025-01-15T10:30:00.000Z", "disableCustomerReply": false, "awaitingCustomerReply": true, "lastActivityAt": "2025-01-15T12:30:00.000Z", "waitingSince": "2025-01-15T10:30:00.000Z", "snoozedUntil": "2025-01-16T09:00:00.000Z", "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": "2025-01-15T12:30:00.000Z", "readReceipts": [ {} ], "conversationParts": [ {} ] }

Get conversation by ID

Request

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

{
  "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": "<p>Hello, I have a question about your pricing plans.</p>",
      "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": "<p>Hi John! I'd be happy to help you with pricing information.</p>",
      "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.

Security
bearerAuth
Path
idstring[ 1 .. 16 ] characters^[a-zA-Z0-9]+$required

Conversation ID (short ID)

Example: 12345
Headers
Featurebase-Versionstring(FeaturebaseVersion)

API version for this request. Defaults to your organization's configured API version if not specified.

Example: 2026-01-01.nova
curl -i -X GET \
  https://docs.featurebase.app/_mock/rest-api/v2/conversations/12345 \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Featurebase-Version: 2026-01-01.nova'

Responses

Success

Bodyapplication/json
objectstringrequired

Object type identifier

Value"conversation"
Example: "conversation"
idstringrequired

Unique conversation identifier

Example: "12345"
titlestring

Conversation title

Example: "Question about pricing"
statestringrequired

Current state of the conversation

Enum"open""closed""snoozed"
Example: "open"
isBlockedbooleanrequired

Whether the user is blocked

Example: false
prioritybooleanrequired

Whether this conversation is marked as priority

Example: false
prioritySetAtstring or nullrequired

ISO timestamp when priority was set

Example: "2025-01-15T10:30:00.000Z"
adminAssigneeIdstring or nullrequired

ID of the assigned admin

Example: "507f1f77bcf86cd799439011"
teamAssigneeIdstring or nullrequired

ID of the assigned team

Example: "507f1f77bcf86cd799439012"
userPreferredLanguagestringrequired

User's preferred language

Example: "en"
sourceobject(MessageSource)
participantsArray of objects(ConversationParticipant)required

Participants in this conversation

participants[].​typestringrequired

Type of participant

Enum"customer""lead""admin""bot""guest""integration"
Example: "customer"
participants[].​idstringrequired

Participant ID

Example: "676f0f6765bdaa7d7d760f88"
botConversationStatestring

State of AI agent handling for this conversation

Enum"active""handed_off_to_human""resolved"
Example: "active"
botConversationStateLastUpdatedAtstring or nullrequired

ISO timestamp when bot state last changed

Example: "2025-01-15T10:30:00.000Z"
disableCustomerReplyboolean

Whether customer replies are disabled

Example: false
awaitingCustomerReplyboolean

Whether we are awaiting a customer reply

Example: true
lastActivityAtstring or nullrequired

ISO timestamp of last activity

Example: "2025-01-15T12:30:00.000Z"
waitingSincestring or nullrequired

ISO timestamp when conversation started waiting

Example: "2025-01-15T10:30:00.000Z"
snoozedUntilstring or nullrequired

ISO timestamp until which conversation is snoozed

Example: "2025-01-16T09:00:00.000Z"
createdAtstringrequired

ISO timestamp when conversation was created

Example: "2025-01-15T10:30:00.000Z"
updatedAtstringrequired

ISO timestamp when conversation was last updated

Example: "2025-01-15T12:30:00.000Z"
readReceiptsArray of objects(ReadReceipt)

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.

conversationPartsArray of User Message (object) or Admin Message (object) or Admin Note (object) or Email Message (object) or Bot Message (object) or Quick Reply Options (object) or Quick Reply Response (object) or Attribute Collection Prompt (object) or Attribute Collection Complete (object) or Assignment (object) or Status Change (object) or Priority Change (object) or Participant Added (object)(ConversationPart)

Array of conversation parts (messages). Only included when fetching a single conversation by ID.

Response
application/json
{ "object": "conversation", "id": "12345", "title": "Question about pricing", "state": "open", "isBlocked": false, "priority": false, "prioritySetAt": "2025-01-15T10:30:00.000Z", "adminAssigneeId": "507f1f77bcf86cd799439011", "teamAssigneeId": "507f1f77bcf86cd799439012", "userPreferredLanguage": "en", "source": { "channel": "desktop", "deliveredAs": "customer_initiated", "subject": "Question about pricing", "bodyHtml": "<p>Hi, I have a question about your enterprise plan...</p>", "bodyMarkdown": "Hi, I have a question about your enterprise plan...", "author": {}, "url": "https://example.com/pricing" }, "participants": [ {} ], "botConversationState": "active", "botConversationStateLastUpdatedAt": "2025-01-15T10:30:00.000Z", "disableCustomerReply": false, "awaitingCustomerReply": true, "lastActivityAt": "2025-01-15T12:30:00.000Z", "waitingSince": "2025-01-15T10:30:00.000Z", "snoozedUntil": "2025-01-16T09:00:00.000Z", "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": "2025-01-15T12:30:00.000Z", "readReceipts": [ {} ], "conversationParts": [ {} ] }

Webhooks

Webhooks allow you to receive real-time HTTP callbacks when events occur in your Featurebase organization. Configure webhook endpoints to subscribe to specific event types.

Operations