GET
/api/public/v1/ticketsList tickets
Paginated list of tracked work. Every filter the console table and board offer is a query parameter here, and repeating a parameter ORs its values — `?status=TODO&status=IN_REVIEW` returns both.
Required scope
The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Dev Tools → API, to an assistant or CLI sign-in when you approve or edit it under Dev Tools, and to a teammate under Employee → Permissions.
projects:read
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | Optional | Maximum number of items to return (1-100).Default: 20 |
offset | number | Optional | Number of items to skip before starting to collect the result set.Default: 0 |
sortBy | string | Optional | Field to sort by. Allowed values vary by endpoint.Default: createdAt |
sortOrder | string asc desc | Optional | Sort direction.Default: desc |
search | string | Optional | Free-text search across the resource’s primary fields. |
createdAfter | string | Optional | ISO 8601 timestamp — only return items created after this time. |
createdBefore | string | Optional | ISO 8601 timestamp — only return items created before this time. |
updatedAfter | string | Optional | ISO 8601 timestamp — only return items updated after this time. |
projectId | string | Optional | Project id. Repeatable. Narrows the list to work filed in these projects. |
status | string PLANNING REFINED IN_PROGRESS IN_REVIEW DONE CANCELLED | Optional | Filter by status. Repeatable. |
priority | string HIGH MEDIUM LOW | Optional | Filter by priority. Repeatable. |
assigneeId | string | Optional | Employee id, or the literal `none` for unassigned work. Repeatable, and `none` combines with ids. |
creatorId | string | Optional | Employee id of whoever filed the work. Repeatable. A ticket filed by our own automation has a null `creator` and matches no id. |
reporterId | string | Optional | Employee id of whoever reported the work — the creator unless somebody said otherwise. Repeatable. Work reported by a customer is matched by `reporterAccountId` instead. |
reporterAccountId | string | Optional | xRM account id of the customer who reported the work. Repeatable. |
milestoneId | string | Optional | Milestone id, or the literal `none` for work in no milestone. Repeatable. |
labelId | string | Optional | Return work carrying any of these labels. Repeatable. |
excludeId | string | Optional | Leave these ticket ids out of the results. Repeatable. |
overdue | boolean | Optional | Set `true` for work past its due date and not yet Done. |
updatedAtFrom | string | Optional | ISO 8601. Only work changed at or after this moment — what to ask for when you are polling for what moved since you last looked. Also accepts `updatedAtTo`. |
dueDateFrom | string | Optional | ISO 8601. Also accepts `dueDateTo` and `createdAtFrom/To`. |
sort | string oldest dueDate priority title updated | Optional | Board sort order. `dueDate` puts undated work last; `priority` runs most urgent first. |
GETExample request
curl
curl -X GET "https://www.pxb.app/api/public/v1/tickets" \
-H "Authorization: Bearer your_access_token"200Example response
json
{
"message": "Projects retrieved successfully!",
"content": {
"projects": [
{
"id": "tkt_a1b2c3",
"key": "APOLLO-14",
"number": 14,
"title": "Ship the billing export",
"description": "CSV export of the ledger for accountants.",
"status": "PLANNING",
"priority": "HIGH",
"estimate": 5,
"dueDate": "2026-09-15T08:00:00.000Z",
"isOverdue": false,
"project": {
"id": "prj_a1b2c3",
"key": "APOLLO",
"name": "Apollo billing rebuild",
"color": "violet"
},
"type": {
"id": "typ_01",
"name": "Task",
"icon": "CircleCheck",
"color": "blue"
},
"milestone": {
"id": "epc_9f8e",
"name": "Billing",
"color": "violet"
},
"goal": {
"id": "spr_22",
"number": 4,
"year": 2026,
"status": "ACTIVE"
},
"assignee": {
"employeeId": "emp_44f1",
"name": "Dana Reyes",
"email": null,
"avatarUrl": null
},
"creator": {
"employeeId": "emp_12ab",
"name": "Sam Okafor",
"email": null,
"avatarUrl": null
},
"reporter": {
"kind": "CUSTOMER",
"id": "acc_5e2f",
"name": "Priya Nair",
"email": "priya@example.com",
"avatarUrl": null
},
"labels": [
{
"id": "lbl_77",
"name": "customer-request",
"color": "amber"
}
],
"projectId": "prj_a1b2c3",
"typeId": "typ_01",
"milestoneId": "epc_9f8e",
"goalId": "spr_22",
"boardOrder": 0,
"planOrder": 0,
"subtaskCount": 2,
"commentCount": 4,
"attachmentCount": 0,
"linkCount": 1,
"createdAt": "2026-08-01T14:02:00.000Z",
"updatedAt": "2026-08-20T09:41:00.000Z",
"resolvedAt": null
}
],
"pagination": {
"total": 42,
"limit": 20,
"offset": 0,
"hasMore": true
}
}
}In the console
The same thing done by hand, for anyone comparing the API against the screen they already use.
Projects
/projects