Mark a conversation read or done
read: true marks every text in it read in the dashboard.
/v1/conversations/{id}
read: true marks every text in it read in the dashboard. archived: true marks it done, which also marks it read, and archived: false brings it back. A new text in brings an archived conversation back on its own.
Needs a key with the messages:send scope.
Path parameters
idstringrequiredThe conversation’s id.
Starts with
conv_.
Request body
readbooleanTrue marks every text in it read.
archivedbooleanTrue marks it done; false brings it back.
Example
/v1/conversations/conv_1Hq2LxW9cVbN3mKpRtYs0acurl -X PATCH "https://usebluebot.com/api/v1/conversations/conv_1Hq2LxW9cVbN3mKpRtYs0a" \
-H "Authorization: Bearer $BLUEBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"archived": true
}'Response
200: The conversation after the change.
idstringrequiredA conv_ id.
Starts with
conv_.object"conversation"requiredkindstringrequiredpersonfor one person,groupfor a group chat.One of
person,group.titlestringrequiredThe person’s name, the group’s name, or their numbers, as the inbox shows it.
handlestring or nullrequiredThe person’s phone number or email address; null for a group.
contact_idstring or nullrequiredThe person, for a one-to-one conversation.
Starts with
ct_.chat_idstring or nullrequiredThe group chat, for a group.
Starts with
chat_.participantsarray of stringsrequiredEveryone in it besides you: one handle for a person, the members for a group.
servicestring or nullrequiredThe service the last text used, when known.
One of
imessage,sms.last_messageobject or nullrequiredShow its 6 fieldsHide its fields
idstringrequiredA msg_ id.
Starts with
msg_.directionstringrequiredOne of
in,out.statestringrequiredThe last text’s state.
previewstring or nullrequiredIts first 140 characters, or null when it had no words.
filesintegerrequiredHow many files it carried.
attimestamprequiredWhen it was sent or arrived.
last_message_attimestamp or nullrequiredWhen the last text was sent or arrived.
unread_countintegerrequiredTexts in that you haven’t opened in the dashboard.
waitingbooleanrequiredTrue when the last text is theirs, so they are waiting on you.
archivedbooleanrequiredMarked done. A new text in brings it back.
stoppedbooleanrequiredThe person is on your stop list.
created_attimestamprequiredWhen the conversation started.
{
"id": "conv_1Hq2LxW9cVbN3mKpRtYs0a",
"object": "conversation",
"kind": "person",
"title": "Maria Alvarez",
"handle": "+15555550123",
"contact_id": "ct_1Hq2LxW9cVbN3mKpRtYs0a",
"chat_id": null,
"participants": [
"+15555550123"
],
"service": "imessage",
"last_message": {
"id": "msg_1Hq2LxW9cVbN3mKpRtYs0a",
"direction": "in",
"state": "received",
"preview": "Can we move the showing to 4?",
"files": 0,
"at": "2026-11-13T19:44:12.000Z"
},
"last_message_at": "2026-11-13T19:44:12.000Z",
"unread_count": 0,
"waiting": true,
"archived": true,
"stopped": false,
"created_at": "2026-11-02T15:20:00.000Z"
}Errors
Every refusal has the same envelope and a page of its own. These are the ones this operation can give.
| Code | Status | What it means |
|---|---|---|
| 401 | The request carried no key, or a key BlueBot doesn’t know: mistyped, revoked, or a test key sent to the live API. | |
| 403 | The key doesn’t carry the scope the endpoint needs. Each endpoint’s reference names its scope. | |
| 429 | Too many requests. A key may make 120 requests a minute. The RateLimit header says how many are left, and Retry-After how long to wait. | |
| 500 | Something went wrong on BlueBot’s side. It was reported. Send the request again; with an Idempotency-Key that is always safe. | |
| 400 | Something in the request doesn’t fit: a missing or malformed field, a bad id, or a combination the endpoint refuses. details names each field. | |
| 404 | There is no such thing on this account. Ids are prefixed by kind, so a message id starts with msg_. |
Try it
Call this operation from the page with your own key. The key stays in this tab and is forgotten when you leave.