pipeline-schedules; the product UI may call these triggers routines.
All routes require an authenticated workspace member. Error responses use the
API Problem Details shape with an error message.
Endpoints
Workspace membership failures are
401 or 403. An unwired schedule store or
runner is 503; unexpected persistence failures are 500.
Create and update
POST requires cron_expr and one of target_pipeline_slug or
target_pipeline_id. The target must be in the caller’s workspace. timezone
defaults to UTC; enabled defaults to true; name defaults to the target
slug when omitted or blank. target_pipeline_version pins execution to an
immutable version; omit it to follow the pipeline head.
PATCH uses merge semantics for omitted fields: omitted name, target, cron,
timezone, inputs, enabled, wake, catch-up, and breaker settings are retained.
Invalid JSON, an invalid cron or timezone, a missing target, an invalid
catchup_policy, or an invalid wake reference returns 400. A missing or
foreign schedule is 404.
Schedule representation
Each successful list/create/update response contains an object with these fields (nullable/empty telemetry fields are omitted when unset):id, workspace_id, name, target_pipeline_id, target_pipeline_slug,
target_pipeline_version, cron_expr, timezone, inputs, enabled,
last_run_at, last_status, last_run_id, next_run_at, wake_pipeline_id,
wake_pipeline_slug, wake_inputs, wake_fail_closed, wake_check_count,
wake_fire_count, last_wake_at, last_wake_status, catchup_policy,
last_missed_count, consecutive_failures, max_consecutive_failures,
disabled_reason, created_at, and updated_at.
last_status can be COMPLETED, FAILED, SKIPPED, WAITING, or DEDUPED.
Wake telemetry uses WOKE, SKIPPED, ERROR, or HELD. A circuit breaker
disables the schedule after its threshold and sets disabled_reason to
circuit_breaker; operator-disabled schedules have an empty reason.
Force-fire and delete
POST .../pipeline-schedules/{scheduleId}/run takes an empty JSON body and
executes the stored inputs immediately without advancing the cron cadence. It
honors target_pipeline_version and returns the normal run result with 200.
It returns 404 for a missing/foreign schedule or target, 409 when a pinned
version no longer exists, and 429 with Retry-After: 5 when the pipeline’s
concurrency key is already running.
DELETE is a soft delete: the row is retained, future cron ticks stop, and an
already-running invocation is not cancelled. The successful response is empty
(204). A missing or foreign schedule is 404.