notifications
PUT /v1/sites/{site_id}/notification-channels
Replace this site's notification channels.
Authentication
Send an API key as a bearer token. This endpoint does not state a specific permission in the specification, so give your key the least it needs and check the response rather than assuming.
Where your organisation id goes
This endpoint takes org_id as a query parameter. Leave it out and the call covers your whole tenancy subtree; send it to narrow the call to one organisation.
Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X PUT https://api.zinndigital.com/v1/sites/{site_id}/notification-channels \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "channels": <SiteNotificationChannel[]> }'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
The COMPLETE desired routing, sent as one document. A channel absent from the list is one the customer removed - a POST-only surface could not express removal, and the screen is a matrix the customer edits in several places before pressing save once. Refused 422 when email_muted is true and no listed destination is a non-e-mail channel that is verified and delivering. The check runs against the routing you are ABOUT to save, not the current one, so "connect Slack and turn e-mail off" works in a single request. It is refused at the point of asking rather than accepted and ignored: a toggle that accepts a value it will not honour reads as a broken setting.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
site_id (path) | string | Yes | — |
org_id (query) | string | No | The organization to act on. Omitted resolves to your own ONLY when you belong to exactly one organisation; a principal in more than one must name it. A reseller managing a client… |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
channels | SiteNotificationChannel[] | Yes | The COMPLETE set. Anything absent is removed. |
email_muted | boolean | No | Ask for e-mail to be switched off. Refused 422 unless at least one listed destination is a non-e-mail channel that is verified and delivering. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
site_id | string | Yes | — |
channels | SiteNotificationChannel[] | Yes | — |
email_muted | boolean | Yes | What the customer ASKED for. Not necessarily what is happening. |
email_active | boolean | Yes | Whether e-mail is actually being sent right now. Computed at send time from the live health of the other channels, never read from a stored flag. |
email_reason | string<not_muted, muted, alternatives_failing, no_alternative, unreadable> | Yes | Why. not_muted - the customer never turned it off. muted - off, as asked, with a healthy alternative. alternatives_failing - back ON because their other channels have… |
healthy_alternatives | integer | No | How many non-e-mail destinations this site routes to are delivering. |
overriding_choice | boolean | No | True when e-mail is being sent DESPITE the customer having muted it. This is the state a screen must explain, or the toggle appears broken. |
Errors this endpoint can return
422