Schedules API
All schedule endpoints are project-scoped. The actions are enable / disable / trigger, not pause / resume.
List schedules
Section titled “List schedules”GET /api/v1/projects/{slug}/schedulesRole: viewer.
Query params: scheduler (e.g. celery-beat, apscheduler), enabled (bool), cursor, limit.
{ "items": [ { "id": "...", "project_id": "...", "name": "email.daily-digest", "scheduler": "celery-beat", "trigger_type": "cron", "trigger": {"minute": "0", "hour": "9", "day_of_week": "*"}, "task": "email.send_daily_digest", "args": [], "kwargs": {"locale": "en-US"}, "enabled": true, "last_run_at": "...", "next_run_at": "...", "created_at": "...", "updated_at": "..." } ], "next_cursor": "..."}Get schedule
Section titled “Get schedule”GET /api/v1/projects/{slug}/schedules/{schedule_id}Role: viewer.
Create schedule
Section titled “Create schedule”POST /api/v1/projects/{slug}/schedulesRole: operator. CSRF-protected.
{ "name": "email.daily-digest", "scheduler": "celery-beat", "trigger_type": "cron", "trigger": {"minute": "0", "hour": "9", "day_of_week": "*"}, "task": "email.send_daily_digest", "args": [], "kwargs": {"locale": "en-US"}, "enabled": true}args and kwargs JSON are each capped at 64 KiB.
Update schedule
Section titled “Update schedule”PATCH /api/v1/projects/{slug}/schedules/{schedule_id}Role: operator. CSRF-protected. Any subset of the create fields.
Delete schedule
Section titled “Delete schedule”DELETE /api/v1/projects/{slug}/schedules/{schedule_id}Role: admin. CSRF-protected.
Enable / disable / trigger
Section titled “Enable / disable / trigger”POST /api/v1/projects/{slug}/schedules/{schedule_id}/enablePOST /api/v1/projects/{slug}/schedules/{schedule_id}/disablePOST /api/v1/projects/{slug}/schedules/{schedule_id}/triggerRole: operator. CSRF-protected. trigger runs the underlying task once immediately and returns the resulting task id.
Fire history
Section titled “Fire history”GET /api/v1/projects/{slug}/schedules/{schedule_id}/firesRole: viewer. Returns the schedule’s recent fire history (when it ran, what task id it produced, succeeded / failed).
Import / diff / resync
Section titled “Import / diff / resync”When the scheduler is authoritative (Celery beat, APScheduler), three colon-suffixed endpoints drive the sync workflow:
POST /api/v1/projects/{slug}/schedules:importPOST /api/v1/projects/{slug}/schedules:diffPOST /api/v1/projects/{slug}/schedules:resync:import materialises the scheduler’s current schedules into the brain. :diff reports differences without writing. :resync reconciles drift in one direction (brain to scheduler or the reverse depending on the body).