# Reply to a ticket Adds a reply to a ticket's linked conversation. Supports both contact and admin replies. ### Path Parameters - id - The ticket number ### Contact Reply | Field | Type | Required | Description | |-------|------|----------|-------------| | type | string | Yes | Must be "contact" | | contactId | string | No* | Featurebase contact ID | | contactEmail | string | No* | Contact email | | body | string | Yes | Message content (HTML) | | messageType | string | No | Always "comment" for contacts | | attachmentUrls | string[] | No | Attachment URLs (max 10) | | skipNotifications | boolean | No | Skip notifications (default false) | | createdAt | string | No | ISO 8601 timestamp to backdate the reply | *At least one of contactId or contactEmail is required. ### Admin Reply | Field | Type | Required | Description | |-------|------|----------|-------------| | type | string | Yes | Must be "admin" | | adminId | string | Yes | ID of the admin authoring the reply | | body | string | Yes | Message content (HTML) | | messageType | string | No | "comment" (default) or "note" for internal notes | | attachmentUrls | string[] | No | Attachment URLs (max 10) | | skipNotifications | boolean | No | Skip notifications (default false) | | createdAt | string | No | ISO 8601 timestamp to backdate the reply | ### Response Returns a reply confirmation object. Endpoint: POST /v2/tickets/{id}/reply 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` (integer, required) ## Response 200 fields (application/json): - `object` (string, required) Object type identifier Enum: "ticket" - `id` (string, required) Unique identifier (MongoDB ID) Example: "507f1f77bcf86cd799439011" - `ticketNumber` (number, required) Sequential display ID (e.g. TK-42) Example: 42 - `title` (string, required) Ticket title Example: "Cannot login to dashboard" - `content` (string, required) Ticket content/description (HTML) Example: "

I get a 403 error when logging in.

" - `ticketCategoryId` (string, required) Ticket category ID Example: "507f1f77bcf86cd799439011" - `categoryType` (string, required) Ticket category type Enum: "customer", "tracker", "back-office" - `ticketUrl` (string, required) Full URL to view the ticket Example: "https://feedback.example.com/p/cannot-login" - `author` (object,null, required) Contact who created the ticket - `author.id` (string,null, required) Author unique identifier Example: "507f1f77bcf86cd799439011" - `author.name` (string, required) Author display name Example: "John Doe" - `author.email` (string,null, required) Author email Example: "john@example.com" - `author.profilePicture` (string,null, required) Author profile picture URL Example: "https://cdn.example.com/avatars/john.png" - `author.type` (string, required) Type of user Enum: "admin", "customer", "guest", "integration", "bot", "lead" - `status` (object, required) Current ticket status - `status.id` (string, required) Unique identifier Example: "507f1f77bcf86cd799439011" - `status.name` (string, required) Display name Example: "In Progress" - `status.color` (string, required) Color for UI display Example: "Blue" - `status.type` (string, required) The workflow stage this status represents Enum: "reviewing", "unstarted", "active", "completed", "canceled" - `status.isDefault` (boolean, required) Whether this is the default status for new posts - `customFields` (object, required) Custom field values keyed by field ID. File-type fields contain a JSON string of { key, name, url } with a signed download URL (1 hour expiry). For allowMultiple file fields, the value is a JSON string of an array of these objects. Example: {"priority":"high","507f1f77bcf86cd799439099":"{\"key\":\"org/pending/file.pdf\",\"name\":\"document.pdf\",\"url\":\"https://...\"}"} - `companyId` (string,null, required) Associated company ID Example: "507f1f77bcf86cd799439015" - `assigneeId` (string,null, required) Assigned admin ID Example: "507f1f77bcf86cd799439013" - `teamAssigneeId` (string,null, required) Assigned team ID (from linked conversation) Example: "507f1f77bcf86cd799439014" - `open` (boolean, required) Whether the ticket is open Example: true - `snoozedUntil` (string,null, required) ISO 8601 timestamp until snoozed (from linked conversation) Example: "2025-01-16T09:00:00.000Z" - `linkedConversations` (array, required) Linked conversations - `linkedConversations.id` (string, required) Conversation ID Example: "507f1f77bcf86cd799439011" - `linkedConversations.role` (string, required) Link role Enum: "customer", "tracker", "back-office" - `conversationParts` (array) Conversation message history. Only included when fetching a single ticket by ID. - `createdAt` (string, required) ISO 8601 creation timestamp Example: "2025-01-15T10:30:00.000Z" - `updatedAt` (string, required) ISO 8601 last updated timestamp Example: "2025-01-15T12:30:00.000Z" - `integrations` (object, required) Third-party integration links - `integrations.linear` (array, required) - `integrations.linear.issueId` (string, required) Linear issue ID Example: "LIN-123" - `integrations.linear.issueUrl` (string,null, required) URL to the Linear issue Example: "https://linear.app/team/issue/LIN-123" - `integrations.jira` (array, required) - `integrations.jira.issueId` (string, required) Jira issue ID Example: "PROJ-456" - `integrations.jira.issueUrl` (string,null, required) URL to the Jira issue Example: "https://company.atlassian.net/browse/PROJ-456" - `integrations.clickup` (array, required) - `integrations.clickup.id` (string, required) ClickUp task ID Example: "86a1b2c3d" - `integrations.clickup.url` (string, required) URL to the ClickUp task Example: "https://app.clickup.com/t/86a1b2c3d" - `integrations.clickup.title` (string, required) ClickUp task title Example: "Fix login bug" - `integrations.github` (array, required) - `integrations.github.id` (string, required) GitHub issue ID Example: "1234567890" - `integrations.github.number` (string, required) GitHub issue number Example: "42" - `integrations.github.repositoryName` (string, required) Repository name Example: "frontend" - `integrations.github.repositoryFullName` (string, required) Full repository name (owner/repo) Example: "acme/frontend" - `integrations.github.url` (string, required) URL to the GitHub issue Example: "https://github.com/acme/frontend/issues/42" - `integrations.github.title` (string, required) GitHub issue title Example: "Login page returns 403" - `integrations.devops` (array, required) - `integrations.devops.id` (number, required) Azure DevOps work item ID Example: 789 - `integrations.devops.url` (string, required) URL to the work item Example: "https://dev.azure.com/org/project/_workitems/edit/789" - `integrations.devops.projectId` (string, required) Azure DevOps project ID Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890" - `integrations.devops.projectName` (string, required) Azure DevOps project name Example: "My Project" - `integrations.devops.title` (string, required) Work item title Example: "Implement SSO" - `integrations.hubspot` (array, required) - `integrations.hubspot.objectId` (number, required) HubSpot object ID Example: 12345 - `integrations.hubspot.type` (string, required) HubSpot object type Enum: "TICKET", "DEAL", "CONTACT" - `integrations.hubspot.dealAmount` (number,null, required) Deal amount (for DEAL type) Example: 5000 - `integrations.hubspot.dealClosed` (boolean,null, required) Whether the deal is closed (for DEAL type) ## 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", "missing_parameter" - `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 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: "resource_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