Schedulers

Create Scheduler projects and manage their schedules from the API. A project can hold several schedules: add, update, pause, or delete each, and trigger runs on demand.

POST/organizations/:orgId/projects

Create a Scheduler project. It starts with one default schedule (hourly, UTC); manage schedules with the endpoints below.

Request body
{
  "name": "nightly-report",
  "type": "cron"
}
Response
{
  "project": {
    "id": "p1234567-abcd-...",
    "name": "nightly-report",
    "description": null,
    "region": "us-east-1",
    "type": "cron",
    "createdAt": "2026-07-11T...",
    "updatedAt": "2026-07-11T..."
  }
}
GET/organizations/:orgId/projects/:projectId/schedules

List the schedules on this project.

Response
{
  "schedules": [
    {
      "id": 42,
      "expression": "0 * * * *",
      "timezone": "UTC",
      "enabled": true,
      "createdAt": "2026-07-11T...",
      "updatedAt": "2026-07-11T..."
    }
  ]
}
POST/organizations/:orgId/projects/:projectId/schedules

Add a schedule. "expression" is a standard 5-field schedule expression; "timezone" (IANA) and "enabled" are optional. A project can hold up to 5 schedules. Adding one beyond that returns 409.

Request body
{
  "expression": "0 9 * * MON-FRI",
  "timezone": "America/New_York",
  "enabled": true
}
Response
{
  "schedule": {
    "id": 43,
    "expression": "0 9 * * MON-FRI",
    "timezone": "America/New_York",
    "enabled": true,
    "createdAt": "2026-07-11T...",
    "updatedAt": "2026-07-11T..."
  }
}
PUT/organizations/:orgId/projects/:projectId/schedules/:scheduleId

Update one schedule. Send any subset of "expression", "timezone", and "enabled". Set "enabled" to false to pause, true to resume.

Request body
{
  "expression": "30 6 * * *",
  "timezone": "America/New_York",
  "enabled": false
}
Response
{
  "schedule": {
    "id": 43,
    "expression": "30 6 * * *",
    "timezone": "America/New_York",
    "enabled": false,
    "updatedAt": "2026-07-11T..."
  }
}
DELETE/organizations/:orgId/projects/:projectId/schedules/:scheduleId

Delete one schedule. A project must keep at least one; deleting the last one returns 400.

POST/organizations/:orgId/projects/:projectId/run

Trigger a run immediately, outside the schedule. The invocation is asynchronous, so check Logs for output.

Response
{
  "invoked": true
}