mail

PATCH /v1/mail/routing/{fqdn}

Re-point a forwarding domain's catch-all.

All mail endpoints

All developer docs

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/routing/{fqdn} \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "destination": <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

Sets where everything addressed to this domain is delivered. Requires mail.manage. ⛔ Taking ownership is part of the write. The alias stops being system-managed, so the convergence sweep will never reassert our computed destination over the customer's choice — silently, which is the only way that failure would ever be noticed. ⛔ Refused with 422 on a domain that stores its mail in mailboxes, rather than accepted and ignored: a forwarding address on a mailbox domain is a control that appears to work while mail keeps arriving in the mailbox.

Parameters

NameTypeRequiredWhat it is
fqdn (path)stringYesThe hostname whose mail routing is being read or changed.

Request body

NameTypeRequiredWhat it is
destinationstringYesWhere mail to any address on this domain is delivered.

Response

NameTypeRequiredWhat it is
fqdnstringYesThe domain this routing is for.
mechanismstring<zinn_mailbox, zinn_forward, cloudflare_routing, external, none>YesWhich mechanism serves this domain's inbound mail. zinn_mailbox stores it; zinn_forward and cloudflare_routing pass it on and store nothing; external means the customer's…
mechanism_labelstringYesWhy this mechanism was chosen, in a sentence a person can act on.
forwardsbooleanYesWhether mail is passed on rather than stored.
storesbooleanYesWhether this domain has real mailboxes on our relay.
statusstring<pending, converged, held, failed>YesThe last convergence pass's outcome. held is distinct from failed and means the zone could not be read, so nothing was changed — which is correct behaviour, not a fault.
dns_authoritystring<cloudflare, other, unknown>YesWhose nameservers the zone was delegated to when last measured. unknown means the lookup did not answer — never that it is delegated elsewhere.
catch_allstringYesWhere mail to any address on this domain is delivered. Empty when no forwarding alias exists — a domain with no deliverable destination gets no alias rather than one pointing…
last_converged_atstringNoWhen the world last agreed with the intended state.

Errors this endpoint can return

401 · 403 · 404 · 422 · 429