# Update a ticket Updates a ticket's properties. Only provided fields will be updated. ### Path Parameters - id - The ticket number ### Request Body All fields are optional. | Field | Type | Description | |-------|------|-------------| | title | string | Update title | | content | string | Update description (HTML) | | statusId | string | Set status by ID | | open | boolean | Close (false) or reopen (true) the ticket | | assigneeId | string/null | Assign/unassign admin | | companyId | string/null | Update company association | | customFields | object | Update custom field values | | snoozedUntil | string/null | Snooze until ISO 8601 timestamp (null to unsnooze) | | skipNotifications | boolean | Skip notifications (default false) | ### Closing a Ticket Set open: false to close the ticket. Closing a ticket will also unsnooze it. The status is not changed automatically — use statusId to change the status explicitly. ### File Custom Fields File-type custom fields support the same two upload methods as ticket creation: multipart upload (customFields. file parts with JSON in the data field) and external URLs ({ "url": "https://..." } with optional "name" in the custom field value). Same limits apply (10 files, 400MB total, executable types blocked). ### Response Returns the updated ticket object. Endpoint: PATCH /v2/tickets/{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` (integer, required) ## Request fields (application/json): - `title` (string) Example: "Updated ticket title" - `content` (string) Example: "

Updated description.

" - `statusId` (string) Example: "507f1f77bcf86cd799439016" - `open` (boolean) - `assigneeId` (string,null) Example: "507f1f77bcf86cd799439013" - `companyId` (string,null) Example: "507f1f77bcf86cd799439015" - `customFields` (object) - `snoozedUntil` (string,null) Example: "2025-01-16T09:00:00.000Z" - `skipNotifications` (boolean) ## 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" - `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