hosting

PUT /v1/sites/{siteId}/scheduled-tasks/{taskId}

Replace a site's scheduled task.

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}/scheduled-tasks/{taskId} \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "schedule": <string>, "command": <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

⛔ **The body is the WHOLE row, every time.** the platform's update *replaces* the task rather than patching it, so a request carrying only the field that moved blanks the rest — which, on a pause, means losing the schedule and the command the customer wrote. `PUT` and not `PATCH` says exactly that: the body is the task's desired end state. The same validation as `createSiteScheduledTask` runs first, so a bad expression is `422` before the vendor is asked and the existing task is left alone. `404` for a site with no managed hosting package, and for a task id that is not on it. Requires `sites.view` and `sites.panel_access`.

Parameters

NameTypeRequiredWhat it is
siteId (path)UuidYesSite ID (UUIDv7).
taskId (path)stringYesThe task id returned by `listSiteScheduledTasks`.

Request body

NameTypeRequiredWhat it is
schedulestringYesA five- or six-field crontab expression. Validated before the vendor is called; ⛔ a newline anywhere in it is refused, because a crontab is lines and one embedded newline is a s…
commandstringYesThe command to run. Capped at the length the vendor's crond accepts — anything longer belongs in a script file the task then schedules.
email_outputstringNoWhere to mail the task's output. An email address, or empty to mail it nowhere — which is why this carries no `format: email`: the empty string is a valid value here and a forma…
enabledbooleanNoWhether the task runs. ⛔ Honoured by `updateSiteScheduledTask` and **ignored by `createSiteScheduledTask`** — a newly created task is always active, and pausing one is a subsequ…

Response

NameTypeRequiredWhat it is
idstringYesThe task's identifier at the vendor, used to update or delete it.
schedulestringYesThe crontab expression, carried **verbatim**. A customer who typed `*/15 * * * *` sees exactly that back, never a normalised rewriting of it.
commandstringYesThe command the vendor runs, as the site's own user.
enabledbooleanYesWhether the task currently runs. ⛔ An absent vendor flag reads as `false`, never `true` — reporting a paused job as running is how a customer stops investigating the thing that…
email_outputstringYesWhere the task's output is mailed, or `""` when the vendor mails it nowhere.

Errors this endpoint can return

401 · 403 · 404 · 409 · 422 · 429 · 503