Skip to main content
A schedule starts a run of an agent at each occurrence of a cron expression. Its runs have trigger scheduled and carry the schedule’s schedule_id. For a single run at a later time, set start_at on POST /runs instead. In the SDKs (Python 0.23.0 or Go v0.16.0 or later), these endpoints are on client.agents in Python and client.Agents in Go.

Create a schedule

  1. Open Agents and select the agent.
  2. Click Schedule, then Add schedule.
  3. Pick When it runs, such as Every weekday at 9:00 AM, or choose Custom and enter a cron expression.
  4. Pick the Time zone.
  5. Choose what happens If the last run is still going: Skip this time or Start another anyway.
  6. Click Add schedule. When you edit a schedule later, the button reads Save schedule.
A cron expression or time zone that doesn’t parse, an expression that never fires, or an agent with no revision returns 400.

How occurrences run

  • A run starts up to about 30 seconds after its occurrence, then waits for a phone like any queued run.
  • Each occurrence starts at most one run.
  • On a day when daylight saving skips a time, a schedule for that time doesn’t run. On a day that repeats a time, it runs once.
  • After an outage, only the latest missed occurrence runs.
  • A scheduled run holds no phone after it ends, so it has no follow-up window.
  • When an occurrence starts no run, a schedule.occurrence_skipped webhook fires with a reason: overlap (the previous run hadn’t finished), agents_unavailable (Agents isn’t available to your organization) or model_unavailable (the agent’s model can no longer be used). The schedule goes on.

Pause, resume, run now, change or delete

In the Dashboard, open the agent and click Schedule to turn a schedule on or off, edit it, or delete it. A schedule’s state is active, paused or ended. next_run_at is when the next occurrence starts a run, and last_run_id is the run it last started. A schedule that reaches its end_at, or has no occurrence left, ends and fires schedule.ended once. List a schedule’s runs with GET /runs?schedule_id=... or axilio runs list --schedule <schedule-id>.

Next steps

Monitor runs

Inspect and measure the runs a schedule starts.

Webhook events

Get schedule.paused, schedule.ended and skipped occurrences.