React to a message
October 14, 2026
Table of contents
Add an emoji reaction to a message in a chat, yours or the agent’s, as in the muse.ai app. Sending the same emoji again removes it. The response lists the message’s reactions after the change.
The agent reacts too, for example with 👍 to a message of yours. Reactions arrive on the stream as reaction events with the message’s whole set of reactions, and GET /chats/chatId lists them in each message’s reactions.
https://api.useapi.net/v1/muse/chats/
chatId/messages/messageId/reactions
chatIdis URL-encoded in the path (it contains:and@).messageIdis themessageIdof a message in the chat, from the stream or GET /chats/chatId.
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
API tokenis required, see Setup useapi.net for details.
Request Body
{
"emoji": "👍"
}
emojiis required, one emoji, for example 👍, ❤️, 😂, 😮, 😢, 🙏 or 🫶. Sending an emoji the message already has from you removes it.
Maximum length: 32 characters.
Responses
-
200 OK — the message’s reactions after the change.
{ "chatId": "c-u12345-email:[email protected]:8e0bf21e-a3b5-4a1e-a05a-65d160469bfb-bot:muse", "messageId": "assistant-msg-bfc09d8d-5071-6d9b-dac3-dd35bdeaa602", "reactions": ["👍"] } -
400 Bad Request —
emojiis missing, a path value is invalid, or Muse did not accept the emoji.{ "error": "Muse did not take the reaction (HTTP 400)", "code": 400 } -
Invalid API token.
{ "error": "useapi.net ⁝ Unauthorized", "code": 401 } -
403 Forbidden — the
chatIdwas issued to a different API token.{ "error": "This chat id does not belong to this API token", "code": 403 } -
404 Not Found — Muse has no such message, or the account that holds the chat is not added.
{ "error": "Muse did not take the reaction (HTTP 404)", "code": 404 } -
502 Bad Gateway — Muse did not take the reaction. Retry shortly.
{ "error": "Muse did not take the reaction (HTTP 500)", "code": 502 } -
503 Service Unavailable — Muse could not be reached. Retry shortly.
{ "error": "Could not connect to the Muse workspace of account [email protected] (…), please retry shortly", "code": 503 } -
596 Account Error
The account needs your attention, and it is paused until you add it again. You receive an email when this happens. There are two causes.
Meta asks for a security check on the account. Sign in once at muse.ai in a browser, complete the check, then add the account again with POST /accounts using the same email and password. The API keeps using its session, so no new sign-in is needed.
{ "error": "Account [email protected]: Meta asks for a security check on account [email protected] (\"This account must complete a security checkpoint on the web\"). Sign in once at https://muse.ai in a browser, complete the check, then add the account again with POST /accounts", "code": 596 }Or Muse refused to sign the account in again when its session needed renewing, most often because the password was changed. Add the account again with the current password.
{ "error": "Account [email protected]: Muse refused to sign in account [email protected] (…). Update its password with POST /accounts, or sign in at https://muse.ai to clear the block, then re-add it", "code": 596 }
Model
{ // TypeScript, all fields are optional
chatId: string
messageId: string
reactions: string[] // the message's reactions after the change, e.g. ["👍"]
error?: string // errors only
code?: number // errors only
}
Examples
-
CHATID="c-u12345-email:[email protected]:8e0bf21e-a3b5-4a1e-a05a-65d160469bfb-bot:muse" MESSAGEID="assistant-msg-bfc09d8d-5071-6d9b-dac3-dd35bdeaa602" curl -X POST "https://api.useapi.net/v1/muse/chats/$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=''))" "$CHATID")/messages/$MESSAGEID/reactions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -d '{"emoji": "👍"}' -
const token = "API token"; const chatId = "chatId from POST /chats"; const messageId = "messageId from the stream or GET /chats/{chatId}"; const apiUrl = `https://api.useapi.net/v1/muse/chats/${encodeURIComponent(chatId)}/messages/${encodeURIComponent(messageId)}/reactions`; const response = await fetch(apiUrl, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${token}`, }, body: JSON.stringify({ emoji: "👍" }) }); console.log("response", response.status, await response.json()); -
import requests from urllib.parse import quote token = "API token" chatId = "chatId from POST /chats" messageId = "messageId from the stream or GET /chats/{chatId}" apiUrl = f"https://api.useapi.net/v1/muse/chats/{quote(chatId, safe='')}/messages/{quote(messageId, safe='')}/reactions" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.post(apiUrl, headers=headers, json={"emoji": "👍"}) print(response, response.json())