Skip to main content
Tickets

Create a ticket

Creates a new ticket.

POST
/v2/tickets

Required Fields

FieldTypeDescription
ticketCategoryIdstringTicket category ID
titlestringTicket title (min 2 characters)
authorobjectAuthor/contact info (id, userId, email, name, profilePicture)

Optional Fields

FieldTypeDescription
contentstringTicket description (HTML)
customFieldsobjectCustom field values
companyIdstringCompany to associate
linkedConversationIdstringConversation to link
assigneeIdstringAdmin to assign
statusIdstringInitial status
createdAtstringISO 8601 timestamp for backdating
skipNotificationsbooleanSkip sending notifications (default false)

File Custom Fields

File-type custom fields can be provided in two ways:

Method 1: Multipart upload — Send the request as multipart/form-data. Put the JSON body in a field named data, and attach files with field names like customFields.<fieldId>. For allowMultiple fields, send multiple files with the same field name.

Method 2: External URL — In the JSON body, set the file custom field value to { "url": "https://..." }. Optionally include "name" to set the filename (e.g. { "url": "https://...", "name": "report.pdf" }); if omitted, the filename is extracted from the download response. For allowMultiple fields, use an array: [{ "url": "..." }, ...]. The server downloads the file (max 10MB, HTTPS only) and stores it.

Both methods produce signed download URLs in the response.

Limits: Max 10 files per request, 400MB total upload size. Executable file types (.exe, .bat, .js, .sh, etc.) are blocked.

Response format: File custom field values in the response are JSON strings containing { "key": "...", "name": "...", "url": "https://signed-url..." }. For allowMultiple fields, an array of these objects. The url is a time-limited signed download URL (expires in 1 hour).

Response

Returns the created ticket object with 201 Created status.

Authorizationstringheaderrequired

API key as Bearer token. Use: Authorization: Bearer sk_...

Featurebase-Versionenum<string>header

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

Available options: 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Example: 2026-08-19.orbit

Body

application/json
assigneeIdstring
Example: 507f1f77bcf86cd799439013
authorobjectrequired

Author to attribute the post to. If not provided, uses the authenticated user — unless source is given, in which case a guest author is synthesised from source.label (or the channel name), because a relayed request belongs to the customer who said it. Supports multiple identification methods: id (Featurebase ID), userId (external SSO ID), or email.

companyIdstring
Example: 507f1f77bcf86cd799439015
contentstringdefault:
Example: <p>I get a 403 error when logging in.</p>
createdAtstring | null
Example: 2025-01-15T10:30:00.000Z
customFieldsobject
linkedConversationIdstring
Example: 507f1f77bcf86cd799439012
skipNotificationsbooleandefault:false
Example: false
statusIdstring
Example: 507f1f77bcf86cd799439016
ticketCategoryIdstringrequired
Example: 507f1f77bcf86cd799439011
titlestringrequired
Minimum string length: 2
Example: Cannot login to dashboard

Response

application/json

Created

assigneeIdstring | nullrequired

Assigned admin ID

Example: 507f1f77bcf86cd799439013
authorobject | nullrequired

Contact who created the ticket

categoryTypeenum<string>required

Ticket category type

Available options: customer, tracker, back-office
Example: customer
companyIdstring | nullrequired

Associated company ID

Example: 507f1f77bcf86cd799439015
contentstringrequired

Ticket content/description (HTML)

Example: <p>I get a 403 error when logging in.</p>
conversationPartsobject[]

Conversation message history. Only included when fetching a single ticket by ID.

createdAtstringrequired

ISO 8601 creation timestamp

Example: 2025-01-15T10:30:00.000Z
customFieldsobjectrequired

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.

idstringrequired

Unique identifier (MongoDB ID)

Example: 507f1f77bcf86cd799439011
integrationsobjectrequired

Third-party integration links

linkedConversationsobject[]required

Linked conversations

objectenum<string>required

Object type identifier

Available options: ticket
Example: ticket
openbooleanrequired

Whether the ticket is open

Example: true
snoozedUntilstring | nullrequired

ISO 8601 timestamp until snoozed (from linked conversation)

Example: 2025-01-16T09:00:00.000Z
statusobjectrequired

Current ticket status

teamAssigneeIdstring | nullrequired

Assigned team ID (from linked conversation)

Example: 507f1f77bcf86cd799439014
ticketCategoryIdstringrequired

Ticket category ID

Example: 507f1f77bcf86cd799439011
ticketNumbernumberrequired

Sequential display ID (e.g. TK-42)

Example: 42
ticketUrlstringrequired

Full URL to view the ticket

Example: https://feedback.example.com/p/cannot-login
titlestringrequired

Ticket title

Example: Cannot login to dashboard
updatedAtstringrequired

ISO 8601 last updated timestamp

Example: 2025-01-15T12:30:00.000Z