Skip to main content

Tickets

All ticket endpoints are under /v1/workspaces/:workspaceId/tickets. Auth: Bearer token + x-workspace-id.

POST /v1/workspaces/:workspaceId/tickets

Create a ticket.

Body:

{
"subject": "Support request",
"body": "Initial message text."
}

Response (201): Created ticket object (id, ticketNumber, subject, status, etc.).

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123" \
-H "Content-Type: application/json" \
-d '{"subject":"Support request","body":"Initial message text."}'

GET /v1/workspaces/:workspaceId/tickets

List tickets. Supports query parameters for filtering and pagination.

Query parameters:

ParamTypeDescription
statusstring or repeatedFilter by status (e.g. open, pending, closed).
assigneestringFilter by assignee user ID.
prioritystringFilter by priority.
searchstringFull-text search.
tagsstring or repeatedFilter by tags.
limitnumber1–500, default 100.
offsetnumberPagination offset.

Response (200): Array of ticket objects (and optionally total count, depending on implementation).

Example:

curl -X GET "https://api.inboxops.app/v1/workspaces/ws-123/tickets?status=open&limit=20&offset=0" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123"

GET /v1/workspaces/:workspaceId/tickets/:ticketId

Get a single ticket with its messages.

Response (200): Ticket object including messages array.

Example:

curl -X GET https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123"

PATCH /v1/workspaces/:workspaceId/tickets/:ticketId

Update ticket fields.

Body (all optional):

{
"assigneeId": "user-uuid-or-null",
"priority": "high",
"tags": ["billing", "urgent"]
}

Response (200): Updated ticket object.

Example:

curl -X PATCH https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123" \
-H "Content-Type: application/json" \
-d '{"assigneeId":"user-uuid","tags":["billing"]}'

POST /v1/workspaces/:workspaceId/tickets/:ticketId/messages

Append a message (reply or internal note).

Body:

{
"body": "Reply or internal note text.",
"bodyHtml": "<p>Optional HTML</p>",
"isInternal": true,
"sendEmail": false,
"toAddresses": [],
"ccAddresses": [],
"attachmentIds": ["attachment-uuid-1"]
}
  • body (required): Plain text.
  • bodyHtml: Optional HTML.
  • isInternal: If true, internal note (not sent to customer).
  • sendEmail: If true and not internal, send as email; toAddresses / ccAddresses may be used.
  • attachmentIds: IDs of attachments previously uploaded for this ticket (see Attachments).

Response (201): Message or ticket with messages.

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID/messages \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123" \
-H "Content-Type: application/json" \
-d '{"body":"Thanks for reaching out.","isInternal":false,"sendEmail":true}'

POST /v1/workspaces/:workspaceId/tickets/:ticketId/status

Transition ticket status (e.g. close, reopen).

Body:

{
"toStatus": "closed",
"reason": "Optional reason (e.g. for reopen)."
}

Response (200): Updated ticket.

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID/status \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123" \
-H "Content-Type: application/json" \
-d '{"toStatus":"closed"}'

POST /v1/workspaces/:workspaceId/tickets/:sourceTicketId/merge

Merge the source ticket into a target ticket. Messages from the source move to the target; source ticket is typically closed or marked merged.

Body: { "targetTicketId": "TARGET_TICKET_UUID" }

Response (200): Result (e.g. target ticket or success).

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets/SOURCE_TICKET_UUID/merge \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123" \
-H "Content-Type: application/json" \
-d '{"targetTicketId":"TARGET_TICKET_UUID"}'

POST /v1/workspaces/:workspaceId/tickets/:ticketId/split

Split selected messages into a new ticket.

Body:

{
"messageIds": ["msg-uuid-1", "msg-uuid-2"],
"newSubject": "Optional subject for the new ticket."
}

Response (201): New ticket and count of moved messages.

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID/split \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123" \
-H "Content-Type: application/json" \
-d '{"messageIds":["msg-uuid-1"],"newSubject":"Split thread"}'

POST /v1/workspaces/:workspaceId/tickets/:ticketId/archive

Archive the ticket. Archived tickets are hidden from the default inbox list but can be restored.

Body: None.

Response (200): Updated ticket (e.g. with archivedAt set).

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID/archive \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123"

POST /v1/workspaces/:workspaceId/tickets/:ticketId/unarchive

Restore an archived ticket so it appears in the inbox again.

Body: None.

Response (200): Updated ticket (e.g. with archivedAt cleared).

Example:

curl -X POST https://api.inboxops.app/v1/workspaces/ws-123/tickets/TICKET_UUID/unarchive \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "x-workspace-id: ws-123"