compute
POST /v1/panels/connections/{connectionId}/install-licence
Install a licence we bought onto this panel.
Authentication
Send an API key as a bearer token. The key must carry the connections.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/panels/connections/{connectionId}/install-licence \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "licence_id": <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
⛔⛔ **Buying a licence and installing it are different acts, and doing only the first is a recurring charge for nothing.** This is the step that makes a purchase useful. ⭐ The panel is read back afterwards rather than the call being trusted, so the response states what the panel now actually holds. Requires `connections.manage`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
connectionId (path) | Uuid | Yes | The connected panel's id, as `listPanelConnections` reports it. |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
licence_id | string | Yes | A licence this organisation holds. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
id | Uuid | Yes | UUIDv7 identifier — sortable by creation time (docs/02 §8). |
host | string | Yes | — |
port | integer | Yes | — |
panel | string | Yes | — |
label | string | Yes | — |
licence_id | Uuid | Yes | The licence this panel runs on, where we sold it. Null is a supported case, not an error: a customer may connect a panel they licensed elsewhere. |
proved_capabilities | string[] | Yes | ⛔⛔ **What this CONNECTION demonstrated, not what the adapter can express.** A Plesk box can answer every read and refuse `/cli/*/call` outright, and both one-click login and lic… |
panel_version | string | Yes | — |
panel_hostname | string | Yes | The panel's own hostname, which need not be the host we connect to. |
licence_name | string | Yes | The edition the panel reports it is licensed for. |
verify_tls | boolean | Yes | Whether we verify the panel's TLS certificate. Per connection, because many Plesk boxes present a self-signed certificate on 8443 — the panel's own default before a customer ins… |
checked_at | string | Yes | ⛔ `null` means **never checked**, which is not the same as *failed*. A client must render the two differently. |
last_error | string | Yes | Empty when the last check succeeded. Otherwise the reason, which distinguishes *we could not reach it* from *it refused our credential* — the two send a customer to opposite pla… |
Errors this endpoint can return
401 · 403 · 404 · 429 · 503