get_api_schedules
const url = 'https://example.com/api/schedules';const options = {method: 'GET', headers: {cookie: 'supacloud_session=<supacloud_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/schedules \ --cookie supacloud_session=<supacloud_session>Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”object
#708 F11 / who-5 — the agent PROFILE the fired task runs under (agent_profile_id
WHO column). None = no pin. Surfaced so the schedule editor shows the current pin.
ADR 0030 W4 — when set, this schedule fires a kind='app' run of the
given App on cadence. Exactly one of workflow_id / app_id / a task
definition is set. Surfaced on the wire so the schedule-editor can show
(and the trigger picker can filter on) the App target.
ADR 0030 W4 — the per-fire App input payload prefilled into the run’s
trigger context. None for a task / workflow schedule.
The runs row of the schedule’s most recent fire (ADR 0022 R4). R5’s
schedule-page run column links this into /runs/{last_run_id};
last_task_id (the task definition) is kept alongside it.
When set, this schedule fires a kind='workflow' run of the given
workflow on cadence (ADR 0020 V4 schedule trigger). Exposed on the
wire (V10) so the web builder’s schedule trigger config form can
filter the schedules picker down to the rows that already belong to
the workflow being edited, without a second round-trip.
Examplegenerated
[ { "agent_profile_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "agent_type": "example", "app_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "app_inputs": "example", "cadence": "example", "config": "example", "created_at": "2026-04-15T12:00:00Z", "failure_count": 1, "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "last_error": "example", "last_run_at": "2026-04-15T12:00:00Z", "last_run_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "last_task_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "next_run_at": "2026-04-15T12:00:00Z", "project_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "prompt": "example", "run_count": 1, "status": "example", "timezone": "example", "title": "example", "updated_at": "2026-04-15T12:00:00Z", "user_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "workflow_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "workspace_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }]Structured client error
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Authentication required
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Permission denied
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Structured server error
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}