support
POST /v1/sites/{siteId}/diagnose
Run the support AI against one site — check it, fix what is fixable, record the rest.
Authentication
Send an API key as a bearer token. The key must carry the hosting.php.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 POST https://api.zinndigital.com/v1/sites/{siteId}/diagnose \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ }'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
Runs every diagnostic probe against the named site: whether it is being throttled by its plan's LVE limits (the cause of `508 Resource Limit Is Reached`), whether a `php.ini` value is below what the plan already allows, whether it runs a retired PHP version, and how much of its disk allowance is used. Remedies on the platform's named safe list are then applied — audit-logged and reversible — and everything that cannot be fixed becomes a **recommendation** the customer and staff can both see. ⛔⛔ **A remedy can never grant a limit the plan does not include.** Every one runs through the same customer-band service a person would use, and an application that moved what the site is entitled to is refused rather than reported as applied. ⛔ `complete` is `false` and `blind_probes` names what could not be read. "We found nothing wrong" and "we could not look" are different answers and the client must render them differently. Requires `hosting.php.manage`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
siteId (path) | Uuid | Yes | The site to check. |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
apply_fixes | boolean | No | Set `false` to diagnose without applying anything. The default applies the safe list, which is the platform's ruled behaviour. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
complete | boolean | Yes | False when any probe could not run. |
blind_probes | string[] | Yes | The probes that could not look. |
probes | SiteDiagnosticProbe[] | Yes | — |
findings | TicketDeflectionFinding[] | Yes | — |
applied | string[] | Yes | Remedies applied automatically, by key. Every one is audit-logged. |
refused | object[] | No | Remedies that were attempted and refused, with the reason code. `ENTITLEMENT_DRIFT` means the platform detected that a fix would have changed what the site is entitled to and st… |
recommendations | SupportRecommendation[] | Yes | — |
notified | integer | No | How many customers were e-mailed. At most one message per finding, ever. |
notify_skipped_not_in_good_standing | integer | No | Notifications skipped because the account is suspended or unpaid. ⛔ Counted rather than silently dropped — a skip and a broken emitter look identical otherwise. |
notify_failed | integer | No | Notifications that were attempted and raised. ⛔ Its own number: a broken emitter and a quiet run both report `notified: 0`, so a customer who was never told would otherwise be i… |
Errors this endpoint can return
401 · 403 · 404 · 422