---
title: "Toggle Room Chat Reaction"
method: POST
path: "/chatrooms/{room_name}/chat/{message_id}/reactions"
tags: ["chatrooms"]
---

# Toggle Room Chat Reaction

`POST /chatrooms/{room_name}/chat/{message_id}/reactions`

## Request

- Base URL: `https://api.fluentea.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.fluentea.com/chatrooms/{room_name}/chat/{message_id}/reactions`
- Auth: none declared

Add or remove MY reaction to one message in this room's chat.

Asked for by an advisor, in the chat of a real class on 2026-08-26: "ohh
also react to the comments in the chat?" The call already had reactions -
the ones that drift over the video - but a line somebody typed could not be
answered without typing back, which in a class of forty is forty lines of
"yes".

**Unlike `/chat/log`, the state here has to be readable back.** A message is
published over the data channel first and recorded second, because a live
class must never wait on a database write; a reaction keeps that order, but
it is a TOGGLE on shared state rather than an append, so somebody who joins
late or reconnects has to be able to ask what the current state is, and this
table is the only place that answers. The client publishes for immediacy and
calls this for the record - the same both/and the message itself uses.

Toggling is per user, and the whole update says "this user now does / does
not have this emoji on this message". Two people reacting at once therefore
cannot conflict: each owns only their own key, so the data-channel deltas
converge on the state the database already holds.

PRIVATE ROWS ARE NOT REACTABLE, and that is a gate rather than a
simplification. The quiet lane is private FROM THE CLASSMATES; this endpoint
only checks that the caller is in the room, so without the filter any
student could probe a message id and both confirm that a private question
exists and write themselves into it.

## Path parameters

- `room_name` string, required
- `message_id` string, required

## Headers

- `authorization` string, nullable

## Request body

- ChatReactionRequest
  - `emoji` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored.md) - [All operations](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/llms.txt) - [OpenAPI document](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/revisions/aeb0298c02e1?raw)
