POST
/api/public/v1/conversations/{conversationId}/read

Mark a conversation read

Marks the conversation read, up to now, for the token’s employee — and only theirs. Threads are included, exactly as opening the conversation in the console does: `unreadCount`, `markedUnread` and every thread’s `unreadReplyCount` clear, and the console’s unread badge follows. Idempotent. Read state belongs to a membership, so you must be a member (403 otherwise). The support rota works a Support channel without joining it and has no read state; for them this succeeds and does nothing, as it does in the console.

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:write

Path Parameters

NameTypeRequiredDescription
conversationIdstringRequiredConversation ID.
POSTExample request
curl
curl -X POST "https://www.pxb.app/api/public/v1/conversations/{conversationId}/read" \
  -H "Authorization: Bearer your_access_token"
200Example response
json
{
  "message": "Marked as read.",
  "content": {
    "conversationId": "cnv_5150"
  }
}
403Example response
json
{
  "message": "You are not a member."
}
404Example response
json
{
  "message": "Conversation not found."
}

In the console

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

Threads
/threads
  1. Open the conversation, or choose Mark as read.