---
title: "Reply to a channel message"
method: POST
path: "/discord/messages/{message_id}/reply"
tags: ["Discord"]
---

# Reply to a channel message

`POST /discord/messages/{message_id}/reply`

## Request

- Base URL: `https://api.reacherapp.com/public/v1`
- URL: `https://api.reacherapp.com/public/v1/discord/messages/{message_id}/reply`
- Auth: API key in header `x-api-key` and API key in header `x-shop-id`

Post a reply into a Discord channel, answering the message identified by `message_id`, using a native message reference and suppressing mentions.

Requires `read_write` scope, an `Idempotency-Key`, and a single shop. Responses are cached for 24 hours; this depends on cache retention and is not durable exactly-once delivery. Unavailable claims fail closed. A 409 `delivery_receipt_unknown` requires delivery review, never blind resending with a new key or after cache expiry. Worker durable claims are separate. `X-Dry-Run: true` validates local input only; it does not check integration, permissions or message existence. Rate limits still apply.

## Path parameters

- `message_id` string, required: Discord message id being replied to.

## Headers

- `Idempotency-Key` string, nullable
- `X-Dry-Run` string, nullable

## Request body

- DiscordReplyRequest
  - `channel_id` string, required: Channel to post the reply into.
  - `content` string, required: Reply body (≤ 2000 chars).

## Response `201`

Successful Response

- DiscordReplyResponse: Envelope docs for the reply route (runtime returns a JSONResponse).
  - `data` DiscordReplyResult, required
    - `ok` boolean, required
    - `channel_id` string, required
    - `replied_to_message_id` string, required: The message id this reply answers (from the path).
    - `discord_message_id` string, nullable: Id of the reply Discord assigned, once posted.
  - `dry_run` boolean

## Other responses

- `400`: Validation error, multi-shop key, or missing/invalid Idempotency-Key.
- `403`: API key lacks `read_write` scope (`WRITE_NOT_PERMITTED`).
- `404`: Shop has no Discord integration, or message not found in this shop.
- `409`: Idempotency conflict or delivery_receipt_unknown; review before resending.
- `422`: Validation Error
- `429`: Write-tier rate limit exceeded.
- `502`: Discord rejected the reply.
- `503`: Idempotency or transport admission unavailable; no send attempted.

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-10-02** `11512e6b7f67`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/reacherapp/apis/reacher-data-api/changes/discord/messages/:message_id/reply/post.md)

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) - [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/reacherapp/apis/reacher-data-api/revisions/63ce74b30b5a?raw)
