PATCH /v1/mail/services/{mailServiceId}/responders/{responderId}
Edit an auto-reply.
Authentication
Send an API key as a bearer token. The key must carry the mail.manage permission; a key without it is refused with 403, not 404.
This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X PATCH https://api.zinndigital.com/v1/mail/services/{mailServiceId}/responders/{responderId} \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "content": <string> }'Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
Changes the message and its schedule. **The address is not part of this body** — an auto-reply belongs to a mailbox, and the address is *which mailbox you are editing* rather than a property of the reply. ⭐ This used to say *"the mail backend has no rename verb"*. That was **false** and was the stated premise of a decision to offer no rename at all; measured against the live upstream hosting API on 2026-08-16, a mailbox renames **in place**, same id, contents intact. Use `renameMailbox` to change an address, or a forwarder to give a mailbox a second one. The responder is returned **as the backend reports it back after the write**, not as it was sent: the mail backend answers an applied update and an ignored one with the same empty body, so echoing the request would be a fabricated success (D9256). Requires `mail.manage`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
mailServiceId (path) | Uuid | Yes | Email service ID (UUIDv7). |
responderId (path) | string | Yes | The **mail backend's** identifier for the responder, as returned by the list — not a UUID of ours. A responder has no model here, so there is no id of ours to use. |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
subject | string | No | — |
content | string | Yes | — |
start_time | string | No | RFC 3339. `null` clears the schedule. |
end_time | string | No | RFC 3339, and must be after `start_time` when both are given. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
id | string | Yes | The mail backend's identifier - the handle `DELETE` needs. |
local | string | Yes | The part before the `@`. |
address | string | Yes | The mailbox this replies for. |
subject | string | Yes | — |
content | string | Yes | The reply body. |
start_time | string | Yes | When the auto-reply starts. `null` when unscheduled (it replies from now on). ⭐ This used to be declared **"Opaque - do not parse, compare or render as a date"** (#664), out of… |
end_time | string | Yes | When the auto-reply stops. `null` to run until switched off. |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429 · 503