Schedules endpoints

Recurrence schedules that start runs of a workflow: create, pause, resume, run now and preview the next occurrences. Every operation with parameters, body, responses, errors and examples.

View this page as Markdown

Recurrence schedules that start runs of a workflow: create, pause, resume, run now and preview the next occurrences.

Schedules carry no revision, and no operation here reads Expected-Revision (the header, or the SDK's expectedRevision option, is ignored): an update applies to the schedule as it is stored, and the last write wins. Run now answers the new run with its revision.

Base URL https://app.processcart.com/api/v1. Every operation below is also in the OpenAPI document and the interactive reference.

Operation Method and path Scope
List schedules GET /v1/schedules Scope schedules:manage
Create a schedule POST /v1/schedules Scope schedules:manage
Get a schedule GET /v1/schedules/{id} Scope schedules:manage
Update a schedule PATCH /v1/schedules/{id} Scope schedules:manage
Delete a schedule DELETE /v1/schedules/{id} Scope schedules:manage
Pause a schedule POST /v1/schedules/{id}/pause Scope schedules:manage
Resume a schedule POST /v1/schedules/{id}/resume Scope schedules:manage
Start a run from a schedule now POST /v1/schedules/{id}/run Scope schedules:manage
Preview a schedule's next occurrences GET /v1/schedules/{id}/preview Scope schedules:manage

GET /v1/schedules

List schedules. Scope schedules:manage · the key's allowlist narrows the rows (never a 403 — rows outside it are absent) · paginated ({ data, nextCursor, hasMore }). Operation id listSchedules · open in the API reference.

Lists the workspace's recurrence schedules, newest first, each with its recurrence, presets, enabled state and next occurrences. Filter by workflowId or enabled. updatedSince turns the list into an incremental sync ordered by updatedAt ascending (inclusive). A key restricted to workflows or folders lists only the schedules of workflows inside its allowlist.

Query parameters (an unknown parameter is a 422 validation_failed with errors[].code = "unknown_parameter")

Name Type Required Description
workflowId string (uuid) no
enabled boolean no
updatedSince string (date-time) no Incremental sync: only items whose updatedAt is at or after this instant (inclusive), ordered by updatedAt ascending; an explicit conflicting sort / order is a 422. Overlap by a minute and dedupe: a Run by (id, revision), any other item (workflow, view, webhook, schedule, automation rule) by (id, updatedAt) — a higher revision or a later updatedAt replaces the copy you hold, an equal one is unchanged.
limit integer no
cursor string no The nextCursor of the previous page. Opaque, and bound to the query that produced it — a cursor from a different filter or sort is a 422.

Responses

Status Meaning Body
200 OK. ScheduleList
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
422 validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example response (200)

{
  "data": [
    {
      "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
      "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
      "workflow": {
        "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
        "name": "Order fulfillment"
      },
      "name": "Weekly order review",
      "description": "Every Monday at 9:00 AM",
      "recurrence": {
        "freq": "weekly",
        "interval": 1,
        "time": "09:00",
        "startDate": "2026-11-02",
        "weekly": {
          "days": [
            "mon"
          ]
        }
      },
      "timezone": "America/Los_Angeles",
      "namePattern": "{{workflow}} — {{date}}",
      "presetValues": {
        "amount": 250,
        "customer": "Acme Corp"
      },
      "assignmentOverrides": {
        "review": [
          {
            "kind": "user",
            "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
          }
        ],
        "wrapup": [
          {
            "kind": "group",
            "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
          }
        ]
      },
      "enabled": true,
      "disabledReason": null,
      "lastError": null,
      "consecutiveFailures": 0,
      "nextRunAt": "2026-11-02T17:00:00.000Z",
      "nextOccurrences": [
        "2026-11-02T17:00:00.000Z",
        "2026-11-09T17:00:00.000Z",
        "2026-11-16T17:00:00.000Z"
      ],
      "lastRunAt": null,
      "latestRun": {
        "id": "1185793a-e8fc-4470-a359-826794842cef",
        "name": "Order fulfillment — Oct 10, 2026",
        "startedAt": "2026-10-11T05:27:53.467Z"
      },
      "presetMismatches": [],
      "createdBy": null,
      "createdAt": "2026-10-11T05:27:50.731Z",
      "updatedAt": "2026-10-11T05:27:52.873Z"
    }
  ],
  "nextCursor": null,
  "hasMore": false
}

POST /v1/schedules

Create a schedule. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it) · accepts Idempotency-Key. Operation id createSchedule · open in the API reference.

Creates a schedule that starts runs of one published workflow on a recurrence (daily, weekly, monthly or yearly, at a time on a 5-minute step), with a run-name pattern, preset field values (every required kickoff field needs one; a preset outside its field's bounds is refused with 422, errors[].code invalid_value) and optional per-task assignees. timezone defaults to the workspace's. A recurrence with no future occurrence is refused. Audited. A key restricted to workflows or folders sees only the schedules of workflows inside its allowlist; any other schedule answers 403 not_allowed_for_key.

Request headers

Name Type Required Description
Idempotency-Key string no Makes the request safe to retry: a second request with the same key and a byte-identical body (and the same Expected-Revision) replays the stored response (Idempotent-Replayed: true); a different body with the same key is refused (422 idempotency_key_reused) and no second resource is created. Keys are stored per workspace for 24 hours and replayed only to the API key that made the request (or the key one rotation away from it); another API key sending the same value is refused (422 idempotency_key_reused), so prefix keys per integration. 409, 429 and 5xx answers are never stored.

Request body — application/json, ScheduleConfig

Property Type Required Description
workflowId Uuid yes
name string yes
recurrence Recurrence yes
timezone string no
namePattern string no
presetValues object (key → CanonicalValue) no
assignmentOverrides object (key → AutomationAssignee[]) no

Responses

Status Meaning Body
201 Created. Location names the new resource. Schedule
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key; read_only_key — Read-only key; workflow_not_runnable — Workflow not runnable. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
409 idempotency_in_progress — Request in progress; workflow_not_published — Workflow not published; workflow_trashed — Workflow is in Trash. Problem
413 payload_too_large — Payload too large. Problem
415 unsupported_media_type — Unsupported media type. Problem
422 idempotency_key_reused — Idempotency key reused; validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example request

{
  "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
  "name": "Weekly order review",
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "time": "09:00",
    "startDate": "2026-11-02",
    "weekly": {
      "days": [
        "mon"
      ]
    }
  },
  "presetValues": {
    "customer": "Acme Corp",
    "amount": 250
  },
  "assignmentOverrides": {
    "review": [
      {
        "kind": "user",
        "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
      }
    ],
    "wrapup": [
      {
        "kind": "group",
        "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
      }
    ]
  }
}

Example response (201)

{
  "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
  "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
  "workflow": {
    "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
    "name": "Order fulfillment"
  },
  "name": "Weekly order review",
  "description": "Every Monday at 9:00 AM",
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "time": "09:00",
    "startDate": "2026-11-02",
    "weekly": {
      "days": [
        "mon"
      ]
    }
  },
  "timezone": "America/Los_Angeles",
  "namePattern": "{{workflow}} — {{date}}",
  "presetValues": {
    "amount": 250,
    "customer": "Acme Corp"
  },
  "assignmentOverrides": {
    "review": [
      {
        "kind": "user",
        "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
      }
    ],
    "wrapup": [
      {
        "kind": "group",
        "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
      }
    ]
  },
  "enabled": true,
  "disabledReason": null,
  "lastError": null,
  "consecutiveFailures": 0,
  "nextRunAt": "2026-11-02T17:00:00.000Z",
  "nextOccurrences": [
    "2026-11-02T17:00:00.000Z",
    "2026-11-09T17:00:00.000Z",
    "2026-11-16T17:00:00.000Z"
  ],
  "lastRunAt": null,
  "latestRun": null,
  "presetMismatches": [],
  "createdBy": null,
  "createdAt": "2026-10-11T05:27:50.731Z",
  "updatedAt": "2026-10-11T05:27:50.731Z"
}

GET /v1/schedules/{id}

Get a schedule. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it). Operation id getSchedule · open in the API reference.

Returns one schedule with its recurrence in words, presets, assignment overrides, enabled state and pause reason, failure counter, next occurrences, newest run and any presets the published workflow no longer accepts. A key restricted to workflows or folders sees only the schedules of workflows inside its allowlist; any other schedule answers 403 not_allowed_for_key.

Path parameters

Name Type Required Description
id string (uuid) yes

Responses

Status Meaning Body
200 OK. Schedule
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
422 validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example response (200)

{
  "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
  "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
  "workflow": {
    "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
    "name": "Order fulfillment"
  },
  "name": "Weekly order review",
  "description": "Every Monday at 9:00 AM",
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "time": "09:00",
    "startDate": "2026-11-02",
    "weekly": {
      "days": [
        "mon"
      ]
    }
  },
  "timezone": "America/Los_Angeles",
  "namePattern": "{{workflow}} — {{date}}",
  "presetValues": {
    "amount": 250,
    "customer": "Acme Corp"
  },
  "assignmentOverrides": {
    "review": [
      {
        "kind": "user",
        "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
      }
    ],
    "wrapup": [
      {
        "kind": "group",
        "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
      }
    ]
  },
  "enabled": true,
  "disabledReason": null,
  "lastError": null,
  "consecutiveFailures": 0,
  "nextRunAt": "2026-11-02T17:00:00.000Z",
  "nextOccurrences": [
    "2026-11-02T17:00:00.000Z",
    "2026-11-09T17:00:00.000Z",
    "2026-11-16T17:00:00.000Z"
  ],
  "lastRunAt": null,
  "latestRun": {
    "id": "1185793a-e8fc-4470-a359-826794842cef",
    "name": "Order fulfillment — Oct 10, 2026",
    "startedAt": "2026-10-11T05:27:53.467Z"
  },
  "presetMismatches": [],
  "createdBy": null,
  "createdAt": "2026-10-11T05:27:50.731Z",
  "updatedAt": "2026-10-11T05:27:52.873Z"
}

PATCH /v1/schedules/{id}

Update a schedule. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it) · accepts Idempotency-Key. Operation id updateSchedule · open in the API reference.

Changes any subset of name, recurrence, timezone, namePattern, presetValues and assignmentOverrides (presets and overrides are checked against the workflow's current published version). A new recurrence or zone recomputes the next run from now. workflowId cannot change, and enabled is not part of the configuration — use the pause and resume operations (422 unknown_key on enabled). A preset outside its field's bounds is refused (422 invalid_value). Audited.

Path parameters

Name Type Required Description
id string (uuid) yes

Request headers

Name Type Required Description
Idempotency-Key string no Makes the request safe to retry: a second request with the same key and a byte-identical body (and the same Expected-Revision) replays the stored response (Idempotent-Replayed: true); a different body with the same key is refused (422 idempotency_key_reused) and no second resource is created. Keys are stored per workspace for 24 hours and replayed only to the API key that made the request (or the key one rotation away from it); another API key sending the same value is refused (422 idempotency_key_reused), so prefix keys per integration. 409, 429 and 5xx answers are never stored.

Request body — application/json, SchedulePatch

Property Type Required Description
name string no
recurrence Recurrence no
timezone string no
namePattern string no
presetValues object (key → CanonicalValue) no
assignmentOverrides object (key → AutomationAssignee[]) no

Responses

Status Meaning Body
200 OK. Schedule
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key; read_only_key — Read-only key; workflow_not_runnable — Workflow not runnable. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
409 idempotency_in_progress — Request in progress; workflow_not_published — Workflow not published; workflow_trashed — Workflow is in Trash. Problem
413 payload_too_large — Payload too large. Problem
415 unsupported_media_type — Unsupported media type. Problem
422 idempotency_key_reused — Idempotency key reused; validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example request

{
  "name": "Weekly order review (Mondays)"
}

Example response (200)

{
  "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
  "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
  "workflow": {
    "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
    "name": "Order fulfillment"
  },
  "name": "Weekly order review (Mondays)",
  "description": "Every Monday at 9:00 AM",
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "time": "09:00",
    "startDate": "2026-11-02",
    "weekly": {
      "days": [
        "mon"
      ]
    }
  },
  "timezone": "America/Los_Angeles",
  "namePattern": "{{workflow}} — {{date}}",
  "presetValues": {
    "amount": 250,
    "customer": "Acme Corp"
  },
  "assignmentOverrides": {
    "review": [
      {
        "kind": "user",
        "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
      }
    ],
    "wrapup": [
      {
        "kind": "group",
        "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
      }
    ]
  },
  "enabled": true,
  "disabledReason": null,
  "lastError": null,
  "consecutiveFailures": 0,
  "nextRunAt": "2026-11-02T17:00:00.000Z",
  "nextOccurrences": [
    "2026-11-02T17:00:00.000Z",
    "2026-11-09T17:00:00.000Z",
    "2026-11-16T17:00:00.000Z"
  ],
  "lastRunAt": null,
  "latestRun": {
    "id": "1185793a-e8fc-4470-a359-826794842cef",
    "name": "Order fulfillment — Oct 10, 2026",
    "startedAt": "2026-10-11T05:27:53.467Z"
  },
  "presetMismatches": [],
  "createdBy": null,
  "createdAt": "2026-10-11T05:27:50.731Z",
  "updatedAt": "2026-10-11T05:27:55.743Z"
}

DELETE /v1/schedules/{id}

Delete a schedule. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it) · accepts Idempotency-Key. Operation id deleteSchedule · open in the API reference.

Deletes the schedule. Runs it already created stay; their schedule member reads null afterwards. Audited.

Path parameters

Name Type Required Description
id string (uuid) yes

Request headers

Name Type Required Description
Idempotency-Key string no Makes the request safe to retry: a second request with the same key and a byte-identical body (and the same Expected-Revision) replays the stored response (Idempotent-Replayed: true); a different body with the same key is refused (422 idempotency_key_reused) and no second resource is created. Keys are stored per workspace for 24 hours and replayed only to the API key that made the request (or the key one rotation away from it); another API key sending the same value is refused (422 idempotency_key_reused), so prefix keys per integration. 409, 429 and 5xx answers are never stored.

Responses

Status Meaning Body
204 Done; no body. —
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key; read_only_key — Read-only key. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
409 idempotency_in_progress — Request in progress. Problem
422 idempotency_key_reused — Idempotency key reused; validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

POST /v1/schedules/{id}/pause

Pause a schedule. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it) · accepts Idempotency-Key. Operation id pauseSchedule · open in the API reference.

Stops the schedule from creating runs (reason manual). Pausing a paused schedule answers 200 unchanged and keeps its reason. Audited.

Path parameters

Name Type Required Description
id string (uuid) yes

Request headers

Name Type Required Description
Idempotency-Key string no Makes the request safe to retry: a second request with the same key and a byte-identical body (and the same Expected-Revision) replays the stored response (Idempotent-Replayed: true); a different body with the same key is refused (422 idempotency_key_reused) and no second resource is created. Keys are stored per workspace for 24 hours and replayed only to the API key that made the request (or the key one rotation away from it); another API key sending the same value is refused (422 idempotency_key_reused), so prefix keys per integration. 409, 429 and 5xx answers are never stored.

Responses

Status Meaning Body
200 OK. Schedule
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key; read_only_key — Read-only key. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
409 idempotency_in_progress — Request in progress. Problem
422 idempotency_key_reused — Idempotency key reused; validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example response (200)

{
  "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
  "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
  "workflow": {
    "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
    "name": "Order fulfillment"
  },
  "name": "Weekly order review",
  "description": "Every Monday at 9:00 AM",
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "time": "09:00",
    "startDate": "2026-11-02",
    "weekly": {
      "days": [
        "mon"
      ]
    }
  },
  "timezone": "America/Los_Angeles",
  "namePattern": "{{workflow}} — {{date}}",
  "presetValues": {
    "amount": 250,
    "customer": "Acme Corp"
  },
  "assignmentOverrides": {
    "review": [
      {
        "kind": "user",
        "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
      }
    ],
    "wrapup": [
      {
        "kind": "group",
        "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
      }
    ]
  },
  "enabled": false,
  "disabledReason": "manual",
  "lastError": null,
  "consecutiveFailures": 0,
  "nextRunAt": null,
  "nextOccurrences": [],
  "lastRunAt": null,
  "latestRun": null,
  "presetMismatches": [],
  "createdBy": null,
  "createdAt": "2026-10-11T05:27:50.731Z",
  "updatedAt": "2026-10-11T05:27:51.759Z"
}

POST /v1/schedules/{id}/resume

Resume a schedule. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it) · accepts Idempotency-Key. Operation id resumeSchedule · open in the API reference.

Turns a paused schedule back on. Resuming never catches up: occurrences missed while paused are skipped and the next run is the first occurrence after now. A schedule whose end date has passed is refused with 409 schedule_ended (change its recurrence first). A schedule whose workflow is unpublished answers 409 workflow_not_published, one in Trash 409 workflow_trashed, and an archived one 403 workflow_not_runnable. Resuming a running schedule answers 200 unchanged. Audited.

Path parameters

Name Type Required Description
id string (uuid) yes

Request headers

Name Type Required Description
Idempotency-Key string no Makes the request safe to retry: a second request with the same key and a byte-identical body (and the same Expected-Revision) replays the stored response (Idempotent-Replayed: true); a different body with the same key is refused (422 idempotency_key_reused) and no second resource is created. Keys are stored per workspace for 24 hours and replayed only to the API key that made the request (or the key one rotation away from it); another API key sending the same value is refused (422 idempotency_key_reused), so prefix keys per integration. 409, 429 and 5xx answers are never stored.

Responses

Status Meaning Body
200 OK. Schedule
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key; read_only_key — Read-only key; workflow_not_runnable — Workflow not runnable. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
409 idempotency_in_progress — Request in progress; schedule_ended — Schedule ended; workflow_not_published — Workflow not published; workflow_trashed — Workflow is in Trash. Problem
422 idempotency_key_reused — Idempotency key reused; validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example response (200)

{
  "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
  "workflowId": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
  "workflow": {
    "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
    "name": "Order fulfillment"
  },
  "name": "Weekly order review",
  "description": "Every Monday at 9:00 AM",
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "time": "09:00",
    "startDate": "2026-11-02",
    "weekly": {
      "days": [
        "mon"
      ]
    }
  },
  "timezone": "America/Los_Angeles",
  "namePattern": "{{workflow}} — {{date}}",
  "presetValues": {
    "amount": 250,
    "customer": "Acme Corp"
  },
  "assignmentOverrides": {
    "review": [
      {
        "kind": "user",
        "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
      }
    ],
    "wrapup": [
      {
        "kind": "group",
        "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
      }
    ]
  },
  "enabled": true,
  "disabledReason": null,
  "lastError": null,
  "consecutiveFailures": 0,
  "nextRunAt": "2026-11-02T17:00:00.000Z",
  "nextOccurrences": [
    "2026-11-02T17:00:00.000Z",
    "2026-11-09T17:00:00.000Z",
    "2026-11-16T17:00:00.000Z"
  ],
  "lastRunAt": null,
  "latestRun": null,
  "presetMismatches": [],
  "createdBy": null,
  "createdAt": "2026-10-11T05:27:50.731Z",
  "updatedAt": "2026-10-11T05:27:52.873Z"
}

POST /v1/schedules/{id}/run

Start a run from a schedule now. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it) · accepts Idempotency-Key. Operation id runScheduleNow · open in the API reference.

Starts one run right away with the schedule's name pattern, presets and assignment overrides — paused or not, outside the recurrence. Returns the new Run (startedBy: "schedule", schedule set, scheduledFor: null, revision: 1) and an absolute Location. Presets the published workflow no longer accepts are skipped; a required kickoff field without a preset is refused with 422 required_fields_unsatisfied. Audited.

Path parameters

Name Type Required Description
id string (uuid) yes

Request headers

Name Type Required Description
Idempotency-Key string no Makes the request safe to retry: a second request with the same key and a byte-identical body (and the same Expected-Revision) replays the stored response (Idempotent-Replayed: true); a different body with the same key is refused (422 idempotency_key_reused) and no second resource is created. Keys are stored per workspace for 24 hours and replayed only to the API key that made the request (or the key one rotation away from it); another API key sending the same value is refused (422 idempotency_key_reused), so prefix keys per integration. 409, 429 and 5xx answers are never stored.

Responses

Status Meaning Body
201 Created. Location names the new resource. Run
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key; read_only_key — Read-only key; workflow_not_runnable — Workflow not runnable. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
409 idempotency_in_progress — Request in progress; workflow_not_published — Workflow not published; workflow_trashed — Workflow is in Trash. Problem
422 idempotency_key_reused — Idempotency key reused; required_fields_unsatisfied — Required fields unsatisfied; validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example response (201)

{
  "id": "1185793a-e8fc-4470-a359-826794842cef",
  "name": "Order fulfillment — Oct 10, 2026",
  "status": "active",
  "priority": "none",
  "labels": [],
  "labelDetails": [],
  "dueAt": null,
  "keyDate": null,
  "revision": 1,
  "updatedAt": "2026-10-11T05:27:53.910Z",
  "startedAt": "2026-10-11T05:27:53.467Z",
  "startedBy": "schedule",
  "startedByUserId": null,
  "schedule": {
    "id": "12b83373-b279-48e5-86b1-c88e71c9ed29",
    "name": "Weekly order review"
  },
  "scheduledFor": null,
  "completedAt": null,
  "deletedAt": null,
  "workflow": {
    "id": "39b74b11-d796-42e5-972f-d2a20b5ce7b1",
    "name": "Order fulfillment"
  },
  "versionId": "9973fead-8dbf-4719-9a61-9dc7b126a7f4",
  "url": "https://app.processcart.com/runs/1185793a-e8fc-4470-a359-826794842cef",
  "tasks": [
    {
      "key": "details",
      "title": "Details",
      "kind": "standard",
      "section": "Intake",
      "state": "todo",
      "visible": true,
      "locked": false,
      "dueAt": null,
      "assignees": [],
      "completedAt": null,
      "completedByUserId": null
    },
    {
      "key": "review",
      "title": "Review",
      "kind": "approval",
      "section": "Intake",
      "state": "todo",
      "visible": true,
      "locked": false,
      "dueAt": null,
      "assignees": [
        {
          "kind": "user",
          "userId": "d4a284fd-cdc8-43c1-8933-084a811fc33e"
        }
      ],
      "completedAt": null,
      "completedByUserId": null
    },
    {
      "key": "stop",
      "title": "Sign-off",
      "kind": "standard",
      "section": "Intake",
      "state": "todo",
      "visible": true,
      "locked": false,
      "dueAt": null,
      "assignees": [],
      "completedAt": null,
      "completedByUserId": null
    },
    {
      "key": "wrapup",
      "title": "Wrap up",
      "kind": "standard",
      "section": "Intake",
      "state": "todo",
      "visible": true,
      "locked": true,
      "dueAt": null,
      "assignees": [
        {
          "kind": "group",
          "groupId": "98257cc7-dce3-4ca7-a310-ecf91b75e201"
        }
      ],
      "completedAt": null,
      "completedByUserId": null
    }
  ],
  "fields": [
    {
      "key": "customer",
      "label": "Customer",
      "type": "text",
      "format": "none",
      "taskKey": "details",
      "value": "Acme Corp",
      "formatted": "Acme Corp",
      "visible": true
    },
    {
      "key": "order_code",
      "label": "Order code",
      "type": "text",
      "format": "custom",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "memo",
      "label": "Memo",
      "type": "textarea",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "quantity",
      "label": "Quantity",
      "type": "number",
      "format": "number",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "amount",
      "label": "Amount",
      "type": "number",
      "format": "currency",
      "taskKey": "details",
      "value": 250,
      "formatted": "$250.00",
      "visible": true
    },
    {
      "key": "fee",
      "label": "Fee",
      "type": "number",
      "format": "currency",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "rate",
      "label": "Rate",
      "type": "number",
      "format": "percent",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "rate_text",
      "label": "Rate (text)",
      "type": "text",
      "format": "percent",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "ship_date",
      "label": "Ship date",
      "type": "date",
      "format": "date",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "start_time",
      "label": "Start time",
      "type": "time",
      "format": "time",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "gift_wrap",
      "label": "Gift wrap",
      "type": "dropdown",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true,
      "choices": [
        "Yes",
        "No"
      ]
    },
    {
      "key": "tags",
      "label": "Tags",
      "type": "multi_choice",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true,
      "choices": [
        "A",
        "B",
        "C"
      ]
    },
    {
      "key": "agree",
      "label": "Agree",
      "type": "checkbox",
      "format": null,
      "taskKey": "details",
      "value": false,
      "formatted": "No",
      "visible": true
    },
    {
      "key": "contact_email",
      "label": "Contact email",
      "type": "email",
      "format": "email",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "website",
      "label": "Website",
      "type": "url",
      "format": "url",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "phone",
      "label": "Phone",
      "type": "phone",
      "format": "phone",
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "owner",
      "label": "Owner",
      "type": "members",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "steps",
      "label": "Steps",
      "type": "subtasks",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true,
      "items": [
        {
          "key": "photos",
          "label": "Photos"
        },
        {
          "key": "invoice",
          "label": "Invoice"
        }
      ]
    },
    {
      "key": "contract",
      "label": "Contract",
      "type": "file",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": true
    },
    {
      "key": "double_amount",
      "label": "Double amount",
      "type": "formula",
      "format": "currency",
      "taskKey": "details",
      "value": 500,
      "formatted": "$500.00",
      "visible": true
    },
    {
      "key": "source",
      "label": "Source",
      "type": "hidden",
      "format": null,
      "taskKey": "details",
      "value": null,
      "formatted": "",
      "visible": false
    }
  ]
}

GET /v1/schedules/{id}/preview

Preview a schedule's next occurrences. Scope schedules:manage · checked against the key's workflow / folder allowlist (403 not_allowed_for_key outside it). Operation id previewSchedule · open in the API reference.

Returns the next count (1–10, default 3) times the schedule creates a run, as UTC instants. For a paused schedule, the occurrences a resume would produce (counted from now); empty once its end date has passed.

Path parameters

Name Type Required Description
id string (uuid) yes

Query parameters (an unknown parameter is a 422 validation_failed with errors[].code = "unknown_parameter")

Name Type Required Description
count integer no

Responses

Status Meaning Body
200 OK. ScheduleOccurrences
401 No usable credential. unauthorized — Authentication required; invalid_api_key — Invalid API key; key_revoked — API key revoked. Problem
403 insufficient_scope — Insufficient scope; not_allowed_for_key — Not allowed for this key. Problem
404 not_found — Not found. Problem
405 The verb is not supported on this path. method_not_allowed — Method not allowed. Problem
422 validation_failed — Validation failed. Problem
429 rate_limited — Too many requests. Problem
500 internal_error — Internal error. Problem
503 unavailable — Service unavailable. Problem

Errors (every code this operation can answer; see Errors)

Example response (200)

{
  "occurrences": [
    "2026-11-02T17:00:00.000Z",
    "2026-11-09T17:00:00.000Z",
    "2026-11-16T17:00:00.000Z"
  ]
}