---
title: "Turn a schedule on or off; turning it on recomputes its next run."
method: POST
path: "/v1/schedules/{id}/enabled"
---

# Turn a schedule on or off; turning it on recomputes its next run.

`POST /v1/schedules/{id}/enabled`

## Request

- Base URL: `http://127.0.0.1:10108`
- URL: `http://127.0.0.1:10108/v1/schedules/{id}/enabled`
- Auth: HTTP bearer

Turns the schedule on or off. Turning it on recomputes its next run from now and requires its script to still be approved.

## Path parameters

- `id` string, required

## Request body

- object
  - `enabled` boolean, required

## Response `200`

The schedule after the change; turning it on recomputes `nextRunAt` from now.

- object
  - `concurrency` integer, required
  - `createdAt` string, date-time, required
  - `cronExpr` string, nullable, required
  - `dailyHour` integer, nullable, required
  - `dailyMinute` integer, nullable, required
  - `enabled` boolean, required
  - `headless` boolean, required
  - `id` string, uuid, required
  - `intervalMinutes` integer, nullable, required
  - `intervalUnit` 'seconds' | 'minutes', required
  - `lastRunAt` string, date-time, nullable, required
  - `name` string, required
  - `nextRunAt` string, date-time, nullable, required
  - `profileIds` string[], required
  - `runAt` string, date-time, nullable, required
  - `scheduleType` 'interval' | 'daily' | 'weekly' | 'cron' | 'once', required
  - `scriptId` string, nullable, required
  - `staggerMs` integer, required
  - `target` union, required
    - object
      - `kind` 'explicit', required
      - `value` string[], required
    - object
      - `kind` 'filter', required
      - `value` string, uuid, required
  - `updatedAt` string, date-time, required
  - `weeklyDay` integer, nullable, required

## Other responses

- `400`: The id is not a uuid, the body is not `{enabled: boolean}`, or a one-time schedule's run_at has passed.
- `401`: No bearer token, or not a token this app issued. The body is empty: it never says which.
- `403`: Refused by the plan: it no longer includes the local API (checked on every request), or it does not allow this action (profile or schedule limit, parallel runs). A request whose Host header is not loopback is also 403, with an empty body.
- `404`: No schedule with this id.
- `409`: Turning on a schedule whose script is no longer approved.
- `500`: Veilus failed: storage could not be read or written, or a task panicked. The message says what failed; retrying rarely helps.

---

[API](https://skmtc.dev/veilus/apis/veilus-local-api.md) · [All operations](https://skmtc.dev/veilus/apis/veilus-local-api/llms.txt) · [OpenAPI document](https://skmtc.dev/veilus/apis/veilus-local-api/revisions/67ac3818f9d2?raw)
