Tickets
Returns a paginated list of support tickets (conversations) for the project tied to your API key, with a meta object holding live counts by assignee bucket and a payload array of ticket objects. Use the query parameters to scope the list by assignee relationship, lifecycle status, and a free-text search term, and to walk through pages. This is the quickest way to discover ticket id values needed by every other ticket endpoint. For more advanced server-side filtering, use the POST /ticket/filter endpoint instead.
curl --request GET \
--url 'https://api.nabrah.ai/api/ext/omni_v2/ticket' \
--header 'X-API-Key: <your-api-key>'{
"meta": {
"all_count": 0,
"mine_count": 0,
"unassigned_count": 0,
"assigned_count": 0
},
"payload": [
{
"account_id": 0,
"additional_attributes": {},
"agent_last_seen_at": 0,
"assignee_last_seen_at": 0,
"can_reply": false,
"contact_last_seen_at": 0,
"created_at": 0,
"custom_attributes": {},
"first_reply_created_at": 0,
"id": 0,
"inbox_id": 0,
"labels": [
"string"
],
"last_activity_at": 0,
"last_non_activity_message": {
"account_id": 0,
"additional_attributes": {},
"content": "string",
"content_attributes": {},
"content_type": "string",
"conversation": null,
"conversation_id": 0,
"created_at": 0,
"external_source_ids": {},
"id": 0,
"inbox_id": 0,
"message_type": 0,
"private": false,
"processed_message_content": "string",
"sender": null,
"sender_id": 0,
"sender_type": "string",
"sentiment": {},
"source_id": "string",
"status": "string",
"updated_at": "string"
},
"messages": [
{
"account_id": null,
"additional_attributes": null,
"content": null,
"content_attributes": null,
"content_type": null,
"conversation": null,
"conversation_id": null,
"created_at": null,
"external_source_ids": null,
"id": null,
"inbox_id": null,
"message_type": null,
"private": null,
"processed_message_content": null,
"sender": null,
"sender_id": null,
"sender_type": null,
"sentiment": null,
"source_id": null,
"status": null,
"updated_at": null
}
],
"meta": {
"channel": "string",
"hmac_verified": false,
"sender": null,
"assignee": null
},
"muted": false,
"priority": "string",
"sla_policy_id": 0,
"snoozed_until": 0,
"status": "string",
"timestamp": 0,
"unread_count": 0,
"updated_at": 0
}
]
}All Omni v2 ticket endpoints are scoped to a single project by your Web API key.
Send your Web key (prefix nb_) in the X-API-Key header. The key is created in the dashboard under the Developers tab and is bound to exactly one project, so there is no project_id parameter on any ticket route. Validate the key with GET /api/ext/test before calling ticket endpoints.
Aggregate counts used to render filter tabs in a support UI. These reflect the whole project, not just the current page.
all_countmine_countunassigned_countassigned_countEach element is a ticket (conversation) with lifecycle and assignment data, the latest non-activity message (last_non_activity_message), label list, priority/status strings, and unread/seen timestamps. Capture payload[].id to call GET /ticket/{id}, its messages, assign, toggle, and update_type endpoints.
idinbox_idstatuspriorityassignee_last_seen_atlast_non_activity_messagelabelsunread_countcreated_atupdated_atTimestamps such as created_at, updated_at, and last_activity_at are Unix epoch seconds (integers).
page-basedPass page (1-based) to page through results. Increment until the returned payload array is empty. The meta counts stay constant across pages and can be used to estimate how many pages exist.
X-API-KeystringheaderrequiredYour workspace API key. Create one in the dashboard under API keys.
assignee_typeenum(all | me | unassigned | assigned)Scopes the list by the ticket's assignment relationship to the current API context.
One of all, me, unassigned, or assigned. me returns tickets assigned to the authenticated identity; unassigned returns tickets with no assignee; assigned returns tickets that have any assignee. Defaults to all tickets when omitted.
statusenum(open | pending | resolved | snoozed | all)Filters tickets by lifecycle status.
One of open, pending, resolved, snoozed, or all. Use all to ignore status filtering. Combine with assignee_type to narrow, e.g. open tickets assigned to no one.
qstringFree-text search term matched against ticket content and contact details.
Optional. Leave empty to disable text search. Server-side matching covers message content and contact identifiers.
pageinteger1-based page number for pagination.
Optional; defaults to the first page. Increase until payload comes back empty.
Successful Response
application/json
Validation Error
application/json