---
title: "Reply to review"
method: POST
path: "/v1/inbox/reviews/{reviewId}/reply"
tags: ["Reviews"]
---

# Reply to review

`POST /v1/inbox/reviews/{reviewId}/reply`

Post a reply to a review. Requires accountId in request body.

**Idempotency:** send an `Idempotency-Key` header to make retries safe
(e.g. after a client-side timeout where delivery is unknown): same key +
same body replays the original response (with `Idempotent-Replayed: true`)
instead of sending the reply to the platform again; same key + different
body returns 422; a key still in flight returns 409. Keys are retained for
24 hours and are scoped to the credential and to this exact path, so
reusing a key against a different reviewId returns 422 rather than
replaying the other review's response.

Only successful (2xx) responses are stored for replay. If the request
throws or returns a non-2xx status the key is released, so the header
protects the "request succeeded but the response was lost" case. After an
ambiguous failure (a 5xx or a network timeout) fetch the review before
retrying with the same key, and treat a missing reply as inconclusive
rather than as proof nothing was sent.

## Path parameters

- `reviewId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `accountId` string, required
  - `message` string, required

## Response `200`

Reply posted

- object
  - `status` string
  - `reply` object
    - `id` string
    - `text` string
    - `created` string, date-time
  - `platform` string

## Other responses

- `400` — Facebook refused the reply for this review (code platform_api_error, platform facebook, Meta error 12 echoed in platformError). Permanent for that review: Graph cannot address its underlying post, and it usually already carries a reply from the Page, which the review listing reports under hasReply. Do not retry.
- `401` — Unauthorized
- `403` — Inbox addon required
- `409` — Same Idempotency-Key still processing; retry after a short backoff
- `422` — Idempotency-Key reused with a different request

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 1 info
  - added the optional property `details/budgetScope` to the response with the `400` status
- **2026-09-15** `0dba7d004d75` — 1 info
  - added the non-success response with the status `400`
- **2026-08-29** `e6f7a453bfb1` — 3 info
  - added the new optional `header` request parameter `Idempotency-Key`
  - added the non-success response with the status `409`
  - added the non-success response with the status `422`

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/inbox/reviews/:reviewId/reply/post.md)

---

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