hosting

PUT /v1/sites/{siteId}/php-settings

Set a site's PHP extensions and php.ini settings.

All hosting endpoints

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/sites/{siteId}/php-settings \
  -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

Applies the **complete** desired state. An omitted name is cleared — deliberately not a PATCH, because "return this to the platform default" and "pin it to the value that default happens to have today" are different intentions and only a whole-set write can express the first. The change is **pushed to the machine as part of this call and read back**, so a `200` means the interpreter a visitor's request runs has actually loaded it. A value the box quietly declined is a failure here, never a success the customer discovers is untrue later. A value above the plan's ceiling is a `422` **naming the plan and the tier that would allow it**, so the panel can offer the upgrade rather than showing a dead end. A staff-only directive is also a `422` and not a `403`: the caller is entitled to change PHP settings, and this particular one is not among them — a `403` reads as "you need a different key" and sends them to support to ask for one that does not exist. Requires `sites.view` + `sites.panel_access`.

Parameters

NameTypeRequiredWhat it is
siteId (path)UuidYesSite ID (UUIDv7).

Request body

NameTypeRequiredWhat it is
extensionsstring[]NoThe Tier 2 extensions to have enabled. Naming a Tier 0/1 extension is a `422` rather than a silent no-op, and naming a Tier 3 one is a `422` too — filtering them would report su…
iniobjectNoThe `php.ini` overrides to have set. Values are strings, as PHP reads them.

Response

NameTypeRequiredWhat it is
php_versionstringYesThe alt-php version this site runs, dotted (`8.3`). Empty if unset.
extensionsSitePhpExtension[]Yes
iniSitePhpBandedOption[]Yes
lveSiteLveStateYesThe site's CloudLinux LVE resource tier — `docs/204` §7b. ⭐ `ep` is the limit that emits `508 Resource Limit Is Reached`, which is why this is on a customer screen at all: it co…
applied_atstringYesWhen these settings were last confirmed by the machine. `null` means they have never been pushed — a different fact from "pushed and matched", and the only one of the two that n…

Errors this endpoint can return

401 · 403 · 404 · 422 · 429