Mark the conversation read up to a message
const url = 'http://localhost:8000/api/clients/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/thread/read/';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"message_id":"3f2a1b0c-0000-4000-8000-0000000000d3"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:8000/api/clients/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/thread/read/ \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "message_id": "3f2a1b0c-0000-4000-8000-0000000000d3" }'Moves the signed-in person’s read marker — only ever forwards; the unread counts follow it. 404 message_not_found for a message of another card.
A coach of the card’s team. Every route answers 404 while client access is switched off on the environment, and 404 client_not_found for a card of another team; a partner API key and a client’s own account get 403. Reading stays open on every plan; posting and editing are 402 on a read-only team or a plan without client access; deleting one’s own message is not. 429 past the account’s rate (chat_read 240/min for reads, chat_post 30/min for writes).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”POST …/thread/read/.
object
The newest message the person has seen.
Examples
Read up to
{ "message_id": "3f2a1b0c-0000-4000-8000-0000000000d3"}POST …/thread/read/.
object
The newest message the person has seen.
Example generated
message_id=2489E9AD-2EE2-8E00-8EC9-32D5F69181C0POST …/thread/read/.
object
The newest message the person has seen.
Responses
Section titled “Responses”No response body
object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Example generated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Example generated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examples
403 — a client's own account
{ "detail": "client_account"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examples
404 — not a message of this card
{ "detail": "message_not_found"}404 — not a card of the team
{ "detail": "client_not_found"}object
429 — throttled: this account’s (or address’s) rate for the route is used up; try again after wait seconds, which Retry-After repeats. A route with a limit of its own answers its own code instead, documented there.
With throttled: whole seconds until the next request can pass.
Example generated
{ "detail": "example", "wait": 1}