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:
| Param | Type | Description |
|---|---|---|
| status | string or repeated | Filter by status (e.g. open, pending, closed). |
| assignee | string | Filter by assignee user ID. |
| priority | string | Filter by priority. |
| search | string | Full-text search. |
| tags | string or repeated | Filter by tags. |
| limit | number | 1–500, default 100. |
| offset | number | Pagination 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"