compute
DELETE /v1/compute/servers/{serverId}/add-on
Cancel this machine's add-on and release its licence.
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 DELETE https://api.zinndigital.com/v1/compute/servers/{serverId}/add-on \
-H "Authorization: Bearer zdk_live_…"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
Stops the charge and gives the licence back to the vendor. Requires `sites.view` and `billing.payment.manage`, the same pair as buying one. ⛔ Not `sites.delete`: cancelling destroys no customer data, it stops a cost — and putting it behind the wipe key would stop a customer turning off something they are paying for. ⛔⛔ And not `billing.entitlement.manage`, which is what it was until 2026-08-17: no customer role holds that key, so the customer paying $29 a month for the managed service was the one person who could not stop paying it. The machine's recurring price falls by the add-on's amount **from the next period**. The period already paid for is honoured rather than clawed back. ⛔ **The vendor is released before our row is marked**, deliberately. If the vendor call fails we keep an active row and go on paying, which is visible and swept for; the other order loses the licence from our side while the vendor keeps billing it — an orphan no sweep can find, because the row naming the address is gone. ⭐ For a pooled licence (LiteSpeed) the seat goes to `releasing`, not `free`: the serial is IP-bound and the release is manual in the vendor's own portal, so returning it to stock would hand the next customer a serial still locked to somebody else.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
serverId (path) | Uuid | Yes | The server's id, as `listComputeServers` reports it. **Ours** (UUIDv7), minted when the order row was written — never the provider's own identifier for the machine. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
data | ComputeAddOnAssignment | Yes | One machine's add-on — what was bought, what it costs, and where it has got to. ⛔ **Never carries the licence key or the vendor's reference.** Key material belongs in Vault; a s… |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429