Product guide
Resolving and internal notes
Two things you do to a conversation rather than inside it: mark it finished with, and talk about it without the customer hearing.
Resolved is a team state
Not per person. Two people pressing Resolve at the same moment resolves it once, enforced by the database rather than remembered by the code.
A reply reopens it
Automatically, the moment it arrives. A conversation still filed under Resolved after the customer answered is one nobody is looking at.
A note can never be sent
Whispers live in their own table. No send path reads it, so there is no route by which an internal note reaches the customer it is about.
Resolving is a moment
Append-only, so “how many did we resolve last week” survives somebody replying — and an automation can trigger on the moment itself.
One conversation, more than one id
Messages keeps a separate chat per transport, so a conversation that starts as SMS and continues over RCS has more than one chat_id behind it. Miss Blue shows it as one conversation: /v1/threads returns a single thread, and an id you stored before the transport changed keeps working.
Any id the conversation has ever had is accepted when listing its messages, marking it read, pinning it, reporting who is typing, and resolving, reopening or noting it. Group chats are never merged, and location requests address the exact chat you name.
Webhooks report the same id the thread list uses. The person you are texting sees one conversation throughout — phones thread on the phone number, not on how a message travelled.
Resolve one
Resolving something already resolved is not an error — you get the same answer the first caller did.
curl -X POST https://api.missblue.dev/v1/projects/$PROJECT/conversations/resolve \
-H "Authorization: Bearer $MISS_BLUE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"chat_id":"iMessage;-;+13055550142","handle":"+13055550142"}'
{"resolved": true, "resolved_at": "2026-09-19T15:02:11Z", "resolved_by_user_id": "…"}Reopen one
curl -X POST https://api.missblue.dev/v1/projects/$PROJECT/conversations/reopen \
-H "Authorization: Bearer $MISS_BLUE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"chat_id":"iMessage;-;+13055550142","handle":"+13055550142"}'Leave a note
mentions holds the user ids to tell. Anybody who cannot already see the project is dropped: a mention is a link to a customer conversation, and sending that outside the team would hand somebody the conversation.
curl -X POST https://api.missblue.dev/v1/projects/$PROJECT/conversations/whispers \
-H "Authorization: Bearer $MISS_BLUE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chat_id":"iMessage;-;+13055550142",
"handle":"+13055550142",
"body":"Card on file bounced — take payment on the day.",
"mentions":["<user id>"]
}'Read the notes
Scoped to the project in the path. A chat_id comes from the platform and proves nothing on its own, so one project cannot read another’s notes by guessing one.
curl https://api.missblue.dev/v1/projects/$PROJECT/conversations/$CHAT_ID/whispers \
-H "Authorization: Bearer $MISS_BLUE_API_KEY"