GET
/api/public/v1/threads/unread

List unread threads

The threads the token’s employee has replies in that they have not seen, across all of their conversations, most recent reply first — the Threads Catch-up list, computed by the same function. Each entry is a thread root carrying its `conversationId`, `replyCount`, `lastReplyAt` and `unreadReplyCount` (replies from other people after the caller’s thread marker; with no marker, every one of them). A thread stays here until it is marked read or its conversation is. Muted and archived conversations never appear, and neither does a conversation the caller is not listed in. Read one with the thread endpoint.

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.

threads:read
GETExample request
curl
curl -X GET "https://www.pxb.app/api/public/v1/threads/unread" \
  -H "Authorization: Bearer your_access_token"
200Example response
json
{
  "message": "Unread threads retrieved successfully!",
  "content": {
    "threads": [
      {
        "id": "msg_9931",
        "conversationId": "cnv_5150",
        "authorEmployeeId": "emp_12ab",
        "parentMessageId": null,
        "content": "Deploying the billing export now — <@emp_44f1> heads up.",
        "type": "TEXT",
        "replyCount": 2,
        "lastReplyAt": "2026-08-29T18:22:00.000Z",
        "unreadReplyCount": 1,
        "editedAt": null,
        "deletedAt": null,
        "pinnedAt": null,
        "attachments": [],
        "reactions": [],
        "mentions": [
          {
            "employeeId": "emp_44f1"
          }
        ],
        "createdAt": "2026-08-29T18:10:00.000Z"
      }
    ]
  }
}

In the console

The same thing done by hand, for anyone comparing the API against the screen they already use.

Threads
/threads
  1. Open Catch up.