---
title: "Reply to a change request"
method: POST
path: "/v1/sms/registrations/{id}/respond"
tags: ["SMS"]
---

# Reply to a change request

`POST /v1/sms/registrations/{id}/respond`

Replies to a reviewer change request on a registration in
`changes_requested` state: a note, hosted document URLs (from
`POST /v1/sms/opt-in-proof`), or both, sent together. When the request
was written as points (`reviewRequest` on the registration), send one
entry in `answers` per point. The registration
returns to `requested` (back in review), and you do not need to resubmit the
whole registration. A `rejected` registration can also be answered when
we asked for changes to fix it (`reviewRequest` set); it stays `rejected`. To change the submitted brand/campaign fields
themselves, resubmit via `POST /v1/sms/registrations` with
`resubmitRequestId` instead.

## Path parameters

- `id` string, required

## Request body

- object
  - `note` string — Answer for the reviewer. Required when no files are sent.
  - `files` string[] — Hosted document URLs returned by POST /v1/sms/opt-in-proof.
  - `requestId` string — The `reviewRequest.id` you are answering. When it no longer matches the open request the reply is refused with 409.
  - `answers` object[] — One answer per point of the open `reviewRequest`, each point at most once. Required (every point) when the request has points; a missing, repeated or unknown point is a 400 naming the point ids. At most 10 files per reply.
    - `pointId` string, required
    - `text` string — For `text` points (at least 3 characters).
    - `url` string, uri — For `link` and `link_or_file` points.
    - `files` string[] — Hosted document URLs from POST /v1/sms/opt-in-proof, for `file` and `link_or_file` points.

## Response `200`

Reply recorded; the registration is back in review.

- object
  - `status` 'requested' | 'rejected' — requested = back in our review; rejected = a registration the carriers rejected, where we asked for these answers to fix it (it stays rejected while we do).

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Registration not found
- `409` — The registration is not waiting on changes, or `requestId` is no longer the open request (reload it).

## Changes

- **2026-09-25** `2c04683ce694` — 1 warning, 6 info
  - added the new `rejected` enum value to the `status` response property for the response status `200`
  - added the new optional request property `answers`
  - added the new optional request property `requestId`
  - added the optional property `details/adAccountId` to the response with the `400` status
  - …3 more
- **2026-09-16** `3e6ddf2a99ea` — 1 info
  - added the optional property `details/budgetScope` to the response with the `400` status
- **2026-09-15** `0dba7d004d75` — 2 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaScope` to the response with the `400` status

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/sms/registrations/:id/respond/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/b2325332041a?raw)
