compute
POST /v1/compute/servers/{serverId}/services/action
Start, stop or restart one service inside a server.
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 POST https://api.zinndigital.com/v1/compute/servers/{serverId}/services/action \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "unit": <string>, "action": <string<start, stop, restart>> }'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
Acts on a single service unit inside the machine - Apache, MariaDB, ProFTPD - while the machine itself stays up. This is the difference between a customer whose site is down fixing it themselves in ten seconds and a customer opening a ticket. ⛔ Not the same blast radius as setComputeServerPower. That one moves the whole machine; this moves one unit inside a machine that keeps running. Stopping a web server or a database still takes every website on that box off the air, so the operation is audit-logged with the real actor. ⛔ unit must be a service the machine is currently running. The engine checks the name against the machine's own live service list before sending anything, so an arbitrary systemd unit - sshd.service, a firewall, the enrolment agent - is refused with a 422 that names what is available instead. The list this endpoint's sibling listComputeServerServices returns is exactly the set that may be named here. The response carries the provider's own confirmation sentence, which is worth showing to the customer verbatim. 404 for a server that is not the caller's; 422 for a machine that is not active, a unit it does not run, or a verb outside start/stop/restart. Requires sites.view and sites.restart.
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. |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
unit | string | Yes | The service unit to act on, exactly as listComputeServerServices reports it (httpd.service, mariadb.service, proftpd.service). ⛔ Must be a unit the machine is… |
action | string<start, stop, restart> | Yes | ⛔ A closed vocabulary. reload, enable and disable are deliberately absent: they have never been proven against a provider, and a verb we have not proven is a button that may… |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
message | string | Yes | The provider's own confirmation sentence — "Service proftpd.service was stopped successfully." — passed through verbatim, because it is more specific than anything we would… |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429 · 503