Schedules

Schedules automate recurring test execution. Assign tests to a schedule, set a daily run time, and the system runs them on a rotating basis, most-overdue first.

Overview

A schedule ties a set of tests and test plans to a recurring cadence. You define when to run (time of day, which days of the week) and the system launches every item at that time. There is no selection or rotation logic — a schedule is a cron: what's on it runs, every time.

Schedule items

Each schedule contains a list of items. An item targets exactly one runnable entity — a test or a test plan. Every item is launched on every run.

Email digest

Schedules can be configured to send an email digest after each run. The digest summarizes the results of all agents that ran and can be set to send always or only when failures occur. Configure recipients and optionally filter by finding severity.

POST /api/v1/schedules

Create a schedule

Parameters

ParameterTypeInRequiredDescription
project_iduuidbodyYesProject ID
namestringbodyYesSchedule name
run_daysarraybodyNoISO day numbers to run on (Mon=1..Sun=7). Default: all days. Example: [1,2,3,4,5] for weekdays.
test_idsarraybodyNoTest IDs to include
digest_configobjectbodyNoEmail digest settings. Example: {"enabled": true, "channels": ["email"], "notify_on": "always", "recipients": ["alice@example.com"], "min_severity": "high"}. min_severity: "critical", "high", "medium", "low" (omit for all).

Status Codes

CodeDescription
201Schedule created
400Validation error
401Unauthorized
404Project not found

Response Body

{
  "schedule": {
    "id": "019d4000-0000-7000-0000-000000000000",
    "tenant_id": "550e8400-e29b-41d4-a716-446655440000",
    "project_id": "660e8400-e29b-41d4-a716-446655440000",
    "name": "Daily QA sweep",
    "run_days": [1, 2, 3, 4, 5],
    "enabled": true,
    "last_tick_at": null,
    "created_at": "2026-03-31T10:00:00Z",
    "updated_at": "2026-03-31T10:00:00Z"
  },
  "items": []
}
POST /api/v1/schedules
cURL
Response
GET /api/v1/schedules

List schedules

Parameters

ParameterTypeInRequiredDescription
project_iduuidqueryNoFilter by project
limitintegerqueryNoPage size (default: 20)
afteruuidqueryNoCursor for next page

Status Codes

CodeDescription
200OK
401Unauthorized
GET /api/v1/schedules
cURL
Response
GET /api/v1/schedules/{id}

Get schedule with items and recent runs

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID

Status Codes

CodeDescription
200OK
401Unauthorized
404Not found
GET /api/v1/schedules/{id}
cURL
Response
PATCH /api/v1/schedules/{id}

Update schedule

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID
namestringbodyNoNew name
enabledbooleanbodyNoEnable or disable
run_daysarraybodyNoISO day numbers (Mon=1..Sun=7)
digest_configobjectbodyNoEmail digest settings (see Create for shape). Set to null to disable.

Status Codes

CodeDescription
200Updated
401Unauthorized
404Not found
PATCH /api/v1/schedules/{id}
cURL
Response
DELETE /api/v1/schedules/{id}

Delete schedule

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID

Status Codes

CodeDescription
204Deleted
401Unauthorized
404Not found
DELETE /api/v1/schedules/{id}
cURL
Response
POST /api/v1/schedules/{id}/items

Add a test or test plan to a schedule

Schedules can carry both tests and test plans as items. The request body must specify exactly one of test_id or test_plan_id; specifying both, or neither, returns 400.

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID
test_iduuidbodyNoTest to add. Mutually exclusive with test_plan_id.
test_plan_iduuidbodyNoTest plan to add. Mutually exclusive with test_id.

Status Codes

CodeDescription
201Item added
400Validation error (e.g. missing or duplicated identifier, item belongs to a different project)
401Unauthorized
404Schedule not found
POST /api/v1/schedules/{id}/items
cURL
Response
DELETE /api/v1/schedules/{id}/items/{itemId}

Remove an item from a schedule

Accepts the ID of any schedule item, whether it targets a test or a test plan.

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID
itemIduuidpathYesItem ID (test-item or test-plan-item)

Status Codes

CodeDescription
204Removed
401Unauthorized
404Not found
DELETE /api/v1/schedules/{id}/items/{itemId}
cURL
Response
GET /api/v1/schedules/{id}/runs

List schedule runs (agents launched by this schedule)

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID

Status Codes

CodeDescription
200OK
401Unauthorized
404Not found
GET /api/v1/schedules/{id}/runs
cURL
Response
POST /api/v1/schedules/{id}/trigger

Manually trigger a schedule

Launches every item on the schedule immediately. Does not affect the schedule's regular daily run.

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID

Status Codes

CodeDescription
200Triggered
401Unauthorized
404Not found
POST /api/v1/schedules/{id}/trigger
cURL
Response
POST /api/v1/schedules/{id}/digest

Send a digest email for this schedule now

Force-sends a digest email summarising the agents from this schedule's most recent triggered runs. Requires digest_config.enabled = true on the schedule. Recipients and severity filters come from digest_config.

Parameters

ParameterTypeInRequiredDescription
iduuidpathYesSchedule ID

Status Codes

CodeDescription
200Digest dispatched
400Digest is not enabled on this schedule
401Unauthorized
404Not found
POST /api/v1/schedules/{id}/digest
cURL
Response