Authentication
Send an API key as a bearer token. The key must carry the sites.view 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 PUT https://api.zinndigital.com/v1/ai/site-agent/preferences \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "action": <string>, "mode": <AiSiteAgentMode> }'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
Records the customer's wish. The **requested** value is stored, never the clamped one: a customer who asks for "just fix it" on a fix still earning its rung keeps that setting, and it takes effect on its own the day the fix is promoted. Storing the clamp instead would quietly downgrade them for ever with no way to see it had happened. An unknown action or remedy key is a `422` naming it, never a silently ignored write. Requires `sites.view`.
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
action | string | Yes | — |
mode | AiSiteAgentMode | Yes | What the customer wants the AI to do about one kind of fix. `ask` proposes it and waits for a button; `canary` applies it to one site and checks the result; `auto` applies it an… |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
action | string | Yes | The fix this row is about — an agent action key or a support remedy key. |
requested | AiSiteAgentMode | Yes | What the customer chose, stored as they chose it. |
effective | AiSiteAgentMode | Yes | What will actually happen — `requested` clamped to `ceiling`. |
ceiling | AiSiteAgentMode | Yes | The highest mode the PLATFORM currently permits for this fix. The customer cannot raise it; it moves when the fix earns a higher rung. |
clamped | boolean | Yes | True when the customer asked for more than the ceiling allows. The screen must say so — otherwise their choice looks as though it did not register. |
reason | string | No | Why the ceiling is where it is, in words a customer reads. |
Errors this endpoint can return
401 · 403 · 422 · 429