---
title: "DELETE /v2/chats/{chat_id}/messages/{message_id}/reactions/{emoji}"
method: DELETE
path: "/v2/chats/{chat_id}/messages/{message_id}/reactions/{emoji}"
tags: ["Messaging"]
---

# DELETE /v2/chats/{chat_id}/messages/{message_id}/reactions/{emoji}

`DELETE /v2/chats/{chat_id}/messages/{message_id}/reactions/{emoji}`

## Request

- Base URL: `https://api.arbital.xyz` (the document declares no server; this is the origin it was published from)
- URL: `https://api.arbital.xyz/v2/chats/{chat_id}/messages/{message_id}/reactions/{emoji}`
- Auth: HTTP bearer

Clears the caller's reaction. Idempotent. Contract 2 requires ?contract=2, UUID Idempotency-Key and a quoted per-edge If-Match, with an empty body. Identical command replay returns its original transition/edge version with the current authorized summary; changed command intent 409, fresh stale edge 412, malformed contract/header 400. Legacy requests remain unconditional and cannot distinguish delayed fresh intent from retry.

## Path parameters

- `chat_id` string, uuid, required
- `message_id` string, uuid, required
- `emoji` string, required

## Query parameters

- `contract` '2'

## Headers

- `Idempotency-Key` string, uuid
- `If-Match` string

## Response `200`

Canonical reaction state; unchanged when the reaction was already absent

- union
  - ChatReactionState: Canonical reaction state after a mutation. Compare revision (the message version) to drop frames or responses that arrive out of order.
    - `chat_id` string, uuid, required
    - `message_id` string, uuid, required
    - `reactions` ChatMessageReactionSummary[], required
      - `emoji` string, required: One emoji grapheme in canonical form (NFC, variation selectors removed).
      - `count` integer, required
    - `revision` string, required
    - `viewer_reactions` string[], required
  - ChatReactionStateV2: Conditional mutation result. Aggregate revision/reactions are the current authorized summary; edge_revision and transition_id retain the original command result on identical replay. Null transition_id means no transition. Commands never acknowledge chat receipts.
    - `chat_id` string, uuid, required
    - `message_id` string, uuid, required
    - `reactions` ChatMessageReactionSummary[], required
      - `emoji` string, required: One emoji grapheme in canonical form (NFC, variation selectors removed).
      - `count` integer, required
    - `revision` string, required
    - `viewer_reactions` string[], required
    - `contract` 2, required
    - `edge_revision` string, required: Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number.
    - `transition_id` string, uuid, nullable, required

## Other responses

- `400`: Stable machine-readable private messaging problem
- `401`: Stable machine-readable private messaging problem
- `403`: Stable machine-readable private messaging problem
- `404`: Stable machine-readable private messaging problem
- `409`: Stable machine-readable private messaging problem
- `412`: Stable machine-readable private messaging problem
- `429`: Authenticated messaging mutation budget exhausted
- `503`: Stable machine-readable private messaging problem

---

[API](https://skmtc.dev/arbital/apis/arbital-api.md) - [All operations](https://skmtc.dev/arbital/apis/arbital-api/llms.txt) - [OpenAPI document](https://skmtc.dev/arbital/apis/arbital-api/revisions/bb0185edf43a?raw)
