Mark a conversation read or unread
Build a request to copy
This page never sends a request. Fill in the fields, then copy the request and run it from your server.
curl -X PATCH 'https://api.whatsable.app/v1/conversations/string/unread' \
-H 'Content-Type: application/json' \
-d '{
"unread": true
}'true marks the conversation unread in the inbox, as an operator's Mark unread does. false marks it read: its unread_count goes to 0 and marked_unread to false. Sending the state it already has is safe.
bearerAuthAuthorizationBearer <nfy_live_<32 characters>>An API key from Settings > API keys, sent as Authorization: Bearer <key>.
id*stringThe conversation id.
1 <= length <= 64application/json- body
Mark one conversation unread or read in the inbox.
unread*booleantrue marks it unread in the inbox, as an operator's Mark unread does. false marks it read, clearing its unread count. Reading through the API never marks it read.
The conversation, with its unread_count and marked_unread.
application/json- response
One customer on one of the business numbers. One person writing to two numbers has two conversations.
object*stringid*string1 <= length <= 64number_id*stringThe business number of the conversation.
1 <= length <= 64contact_id*string1 <= length <= 64contact_name*|The contact's name. Null when nobody named them.
last_message_preview*|The last message in one line, as the inbox list shows it. Null before the first message.
last_message_at*|The last message in either direction. Null before the first message. A list puts such a conversation last.
last_inbound_at*|The customer's last message. Null when they never wrote.
last_outbound_at*|The business's last message. Null when it never wrote.
awaiting_reply*booleanThe customer wrote last: last_inbound_at is later than last_outbound_at, or nothing was sent since.
window_expires_at*|When the 24-hour customer-service window closes. Null when it never opened.
window_open*booleanWhether a session message (any type but template) can be sent now. Check it before a session send.
unread_count*integerInbound messages nobody has read in the inbox. Reading through the API does not change it.
0 <= value <= 9007199254740991marked_unread*booleanSomeone marked it unread in the inbox.
figures_to_check*integerAI messages with a figure nobody has checked yet.
0 <= value <= 9007199254740991ai*|nullcreated_at*stringdate-timeupdated_at*stringdate-timecurl -X PATCH 'https://api.whatsable.app/v1/conversations/string/unread' \ -H 'Content-Type: application/json' \ -d '{ "unread": true}'{ "object": "conversation", "id": "cm2v8c1a00001qz8h4t5u6v7w", "number_id": "cm2v8a1b20002qz8h9i0j1k2l", "contact_id": "cm2v8k1a00001qz8h8x9y0z1a", "contact_name": "Ana Pérez", "last_message_preview": "Is my order ready?", "last_message_at": "2026-10-20T19:51:21Z", "last_inbound_at": "2026-10-20T19:51:21Z", "last_outbound_at": "2026-10-20T18:00:00Z", "awaiting_reply": true, "window_expires_at": "2026-10-21T19:51:21Z", "window_open": true, "unread_count": 2, "marked_unread": false, "figures_to_check": 0, "ai": { "bot_id": "cm2v8b1a00001qz8h3j4k5l6m", "status": "active" }, "created_at": "2026-09-01T12:00:00Z", "updated_at": "2026-10-20T19:51:21Z"}Read a conversation's timeline GET
Returns what happened in a conversation, newest first: its messages, notes, AI decisions, AI status and bot changes, and label changes.
Add an internal note to a conversation POST
Adds an internal note to the conversation. The team sees it in the inbox, under this key's name; the customer never does, and nothing is sent to WhatsApp. Read the notes with `GET /v1/conversations/{id}/timeline?types=note`.