API reference / Schedules

Schedules

A schedule creates a new job on a recurring basis according to a cron expression evaluated in an IANA timezone. Each firing produces an ordinary job that follows the schedule's retry policy and appears in the jobs list. The minimum interval is 30 seconds, and schedule names are unique per environment. Active schedule limits depend on your plan, from 10 on Hobby to 5,000 on Scale.

The schedule object

FieldTypeDescription
idstringUnique schedule identifier, prefixed sch_. Immutable.
namestringHuman-readable name, unique within the project and environment.
cronstringCron expression that defines when the schedule fires.
timezonestringIANA timezone used to evaluate the expression, such as America/Denver. Defaults to UTC.
target_urlstringHTTPS URL that receives the payload on every firing.
payloadobjectJSON delivered on every firing. Maximum 256 KB.
pausedbooleanWhen true, the schedule does not fire. Missed firings are not replayed on resume.
next_run_atstring (ISO 8601)The next time the schedule will fire, or null when paused.
created_atstring (ISO 8601)Timestamp of schedule creation, in UTC.

#Create a schedule

POST /v2/schedules

Creates a recurring schedule from a cron expression and timezone. Malformed expressions or unknown timezones return invalid_cron_expression, and expressions that would fire more often than every 30 seconds return interval_too_short. Reusing an existing name returns schedule_name_taken.

ParameterInTypeRequiredDescription
namebodystringyesUnique schedule name within the environment.
cronbodystringyesCron expression, for example 0 6 * * 1-5.
target_urlbodystringyesHTTPS URL that receives the payload on each firing.
timezonebodystringnoIANA timezone name. Defaults to UTC.
payloadbodyobjectnoJSON payload delivered on each firing.
retry_policybodyobjectnoRetry settings applied to every job the schedule creates.
Shell
curl -X POST https://api.tendcomputer.com/v2/schedules \
  -H "Authorization: Bearer tnd_live_8fQ2xLm9Zc41" \
  -H "Content-Type: application/json" \
  -d '{"name":"weekday-report","cron":"0 6 * * 1-5","timezone":"America/Denver","target_url":"https://reports.example-shop.dev/generate","payload":{"report":"daily-sales"}}'
JSON
{
  "id": "sch_01J0A4F8C3",
  "name": "weekday-report",
  "cron": "0 6 * * 1-5",
  "timezone": "America/Denver",
  "target_url": "https://reports.example-shop.dev/generate",
  "payload": { "report": "daily-sales" },
  "paused": false,
  "next_run_at": "2026-05-14T12:00:00Z",
  "created_at": "2026-05-13T14:30:12Z"
}

#Update a schedule

PATCH /v2/schedules/{schedule_id}

Changes one or more fields of an existing schedule; omitted fields keep their current values. Setting paused to true stops future firings without deleting the schedule. Firings missed while paused are not replayed on resume.

ParameterInTypeRequiredDescription
schedule_idpathstringyesThe schedule ID, beginning with sch_.
cronbodystringnoNew cron expression.
timezonebodystringnoNew IANA timezone name.
payloadbodyobjectnoReplacement payload. Replaces the object entirely rather than merging.
pausedbodybooleannoPause or resume the schedule.
Shell
curl -X PATCH https://api.tendcomputer.com/v2/schedules/sch_01J0A4F8C3 \
  -H "Authorization: Bearer tnd_live_8fQ2xLm9Zc41" \
  -H "Content-Type: application/json" \
  -d '{"paused":true}'
JSON
{
  "id": "sch_01J0A4F8C3",
  "name": "weekday-report",
  "cron": "0 6 * * 1-5",
  "timezone": "America/Denver",
  "target_url": "https://reports.example-shop.dev/generate",
  "payload": { "report": "daily-sales" },
  "paused": true,
  "next_run_at": null,
  "created_at": "2026-05-13T14:30:12Z"
}

#List schedules

GET /v2/schedules

Returns all schedules in the current environment, newest first, with cursor-based pagination. Use limit (default 50, maximum 200) and next_cursor to page through results. Filter by paused to find schedules that are not currently firing.

ParameterInTypeRequiredDescription
limitqueryintegernoPage size. Default 50, maximum 200.
cursorquerystringnoThe next_cursor value from the previous response.
pausedquerybooleannoWhen set, returns only paused or only active schedules.
Shell
curl "https://api.tendcomputer.com/v2/schedules?paused=false&limit=50" \
  -H "Authorization: Bearer tnd_live_8fQ2xLm9Zc41"
JSON
{
  "data": [
    {
      "id": "sch_01J0A6R2W9",
      "name": "cache-warm",
      "cron": "*/5 * * * *",
      "timezone": "UTC",
      "target_url": "https://api.example-shop.dev/cache/warm",
      "paused": false,
      "next_run_at": "2026-05-13T14:35:00Z",
      "created_at": "2026-05-13T14:31:48Z"
    },
    {
      "id": "sch_01J0A4F8C3",
      "name": "weekday-report",
      "cron": "0 6 * * 1-5",
      "timezone": "America/Denver",
      "target_url": "https://reports.example-shop.dev/generate",
      "paused": false,
      "next_run_at": "2026-05-14T12:00:00Z",
      "created_at": "2026-05-13T14:30:12Z"
    }
  ],
  "next_cursor": null
}

#Delete a schedule

DELETE /v2/schedules/{schedule_id}

Permanently deletes a schedule so it never fires again. Jobs the schedule already created are unaffected and continue through their normal lifecycle. Deletion cannot be undone, but the name becomes available for reuse immediately.

ParameterInTypeRequiredDescription
schedule_idpathstringyesThe schedule ID, beginning with sch_.
Shell
curl -X DELETE https://api.tendcomputer.com/v2/schedules/sch_01J0A6R2W9 \
  -H "Authorization: Bearer tnd_live_8fQ2xLm9Zc41"
JSON
{
  "id": "sch_01J0A6R2W9",
  "deleted": true
}