# workflows-api ## Pages - [Workflows API](https://docs.ezghcloud.com/workflows-api/index.md) — Durable workflows written as code in your own application: EZGH records every step, retries what failed, and sleeps for minutes or months. Every path is under an organization and project; lists are paged with limit, cursor and nextCursor. SDKs call the live host (workflows-live.ezghcloud.com) with invocation tokens; those endpoints are the workflows protocol's, described with it. - [Cancel a run](https://docs.ezghcloud.com/workflows-api/CancelRun/index.md) - [Complete a run's callback](https://docs.ezghcloud.com/workflows-api/CompleteCallback/index.md) — Completes the waiting callback step with the body as its value (any JSON, at most 1 MiB). A repeat with the same value answers 200; another value 409 callback_completed; an expired callback, or one of an ended or cancelling run, 410 callback_expired. - [Create an app](https://docs.ezghcloud.com/workflows-api/CreateApp/index.md) — Creates a push app, unsynced, whose answer carries its signing secret, shown once (an Idempotency-Key replay answers signingSecret null); or a pull app, synced, with no endpoint or signing secret (signingSecret null): its workers announce their workflows when they poll. - [Create a schedule](https://docs.ezghcloud.com/workflows-api/CreateSchedule/index.md) — Starts runs of one workflow of one app on a cron timetable. The caller also needs workflows.runs.start on the workflow. A repeat with the same Idempotency-Key replays the stored 201 with Idempotent-Replayed: true. Names aren't unique. - [Delete an app](https://docs.ezghcloud.com/workflows-api/DeleteApp/index.md) - [Delete a schedule](https://docs.ezghcloud.com/workflows-api/DeleteSchedule/index.md) — Its timer goes with it; runs it already started continue. - [Get an app](https://docs.ezghcloud.com/workflows-api/GetApp/index.md) - [Get a project's limits](https://docs.ezghcloud.com/workflows-api/GetLimits/index.md) — The product-owned limits in force for the project, read when asked, with where each value comes from: the default, an organization override or a project override (staff change them). Run starts over runStartsPerSecond (with runStartsBurst) or with openRuns runs open answer 429 too_many_requests with Retry-After; schedule firings and child runs don't take from runStartsPerSecond. New limits may be added: ignore names you don't know. - [Get a run](https://docs.ezghcloud.com/workflows-api/GetRun/index.md) - [Get a run's input](https://docs.ezghcloud.com/workflows-api/GetRunInput/index.md) - [Get a run's output](https://docs.ezghcloud.com/workflows-api/GetRunOutput/index.md) — 409 run_not_completed until the run has completed. - [Get a schedule](https://docs.ezghcloud.com/workflows-api/GetSchedule/index.md) - [Get a schedule's input](https://docs.ezghcloud.com/workflows-api/GetScheduleInput/index.md) — Needs workflows.runs.getPayload on the schedule's workflow: it's the input of the runs the schedule starts. - [Get a step's output](https://docs.ezghcloud.com/workflows-api/GetStepOutput/index.md) - [List a project's apps](https://docs.ezghcloud.com/workflows-api/ListApps/index.md) - [List a run's history](https://docs.ezghcloud.com/workflows-api/ListRunEvents/index.md) - [List and search a project's runs](https://docs.ezghcloud.com/workflows-api/ListRuns/index.md) — Newest first (createdAt, then id, descending), from the run list, which lags changes by about a second; a get by ID always reads the run itself. Every filter is optional and they combine with AND; repeat status to match any of several. There are no counts: page with nextCursor ("Load more"). The list is unavailable (503 with Retry-After) while its store is; nothing else is affected. - [List a project's schedules](https://docs.ezghcloud.com/workflows-api/ListSchedules/index.md) — Newest first, from the schedule index, which lags changes by about a second; a get by ID is always current. - [Pause a schedule](https://docs.ezghcloud.com/workflows-api/PauseSchedule/index.md) — It stops firing until resumed. - [Poll a pull app's task queue (live host)](https://docs.ezghcloud.com/workflows-api/PollTasks/index.md) — On workflows-live.ezghcloud.com. A pull worker's long poll: held up to 55 s, it answers 200 with up to maxTasks started invocations (each with its invocation token), or 204 when none arrived. Needs workflows.workers.poll on the app, and workflows.apps.sync as well when the poll announces workflows. Only refused polls are recorded in Trails. - [Resume a schedule](https://docs.ezghcloud.com/workflows-api/ResumeSchedule/index.md) — It fires again from now, with no catch-up for the paused period. - [Retry a failed run](https://docs.ezghcloud.com/workflows-api/RetryRun/index.md) — Resumes a failed run from the step that failed; completed steps aren't run again. - [Rotate an app's signing secret](https://docs.ezghcloud.com/workflows-api/RotateAppSecret/index.md) — Makes a new signing secret, shown once. The previous ones stay valid for 24 hours. An Idempotency-Key replay answers signingSecret null. - [Start a run](https://docs.ezghcloud.com/workflows-api/StartRun/index.md) — 201 for a new run; 200 for an existing runKey with the same workflow and input; 409 run_key_conflict otherwise. - [Sync an app](https://docs.ezghcloud.com/workflows-api/SyncApp/index.md) — Sends a signed sync request to the endpoint (the given one, else the app's) and records the workflows the SDK reports. The endpoint changes only when the sync succeeds; a failed sync is 409 sync_failed and changes nothing. - [Start a schedule's workflow now](https://docs.ezghcloud.com/workflows-api/TriggerSchedule/index.md) — Requires an Idempotency-Key, which names the run (400 idempotency_key_required without one). A repeat with the same key replays the stored 201 with Idempotent-Replayed: true. As StartRun, the app must serve the workflow now: 409 workflow_not_announced on a pull app no worker announced it to in the last 10 minutes, 409 app_not_synced or workflow_not_synced on a push app. Ignores the overlap policy and doesn't count as a firing. The caller also needs workflows.runs.start on the workflow. - [Rename an app](https://docs.ezghcloud.com/workflows-api/UpdateApp/index.md) — Only the name changes here; the endpoint changes through a sync. - [Change a schedule](https://docs.ezghcloud.com/workflows-api/UpdateSchedule/index.md) — Only the fields given change. If-Match: "" makes it conditional (412 precondition_failed when the schedule has changed). A schedule's app can't change. - [App](https://docs.ezghcloud.com/workflows-api/schemas/App/index.md) - [AppCreate](https://docs.ezghcloud.com/workflows-api/schemas/AppCreate/index.md) - [AppCreated](https://docs.ezghcloud.com/workflows-api/schemas/AppCreated/index.md) - [AppList](https://docs.ezghcloud.com/workflows-api/schemas/AppList/index.md) - [AppSync](https://docs.ezghcloud.com/workflows-api/schemas/AppSync/index.md) - [AppUpdate](https://docs.ezghcloud.com/workflows-api/schemas/AppUpdate/index.md) — name, partitions (pull apps), or both. - [CallbackCompletion](https://docs.ezghcloud.com/workflows-api/schemas/CallbackCompletion/index.md) — Any JSON value, at most 1 MiB: the callback step's output. - [Error](https://docs.ezghcloud.com/workflows-api/schemas/Error/index.md) — Every non-2xx answer. Clients branch on code, never on message. - [Limit](https://docs.ezghcloud.com/workflows-api/schemas/Limit/index.md) - [Limits](https://docs.ezghcloud.com/workflows-api/schemas/Limits/index.md) - [PollRequest](https://docs.ezghcloud.com/workflows-api/schemas/PollRequest/index.md) - [PollResponse](https://docs.ezghcloud.com/workflows-api/schemas/PollResponse/index.md) - [QuotaExceeded](https://docs.ezghcloud.com/workflows-api/schemas/QuotaExceeded/index.md) — quota_exceeded: the quota that refused the request. Never with Retry-After. - [Run](https://docs.ezghcloud.com/workflows-api/schemas/Run/index.md) - [RunCancel](https://docs.ezghcloud.com/workflows-api/schemas/RunCancel/index.md) - [RunError](https://docs.ezghcloud.com/workflows-api/schemas/RunError/index.md) - [RunEvent](https://docs.ezghcloud.com/workflows-api/schemas/RunEvent/index.md) - [RunEventList](https://docs.ezghcloud.com/workflows-api/schemas/RunEventList/index.md) - [RunList](https://docs.ezghcloud.com/workflows-api/schemas/RunList/index.md) - [RunStart](https://docs.ezghcloud.com/workflows-api/schemas/RunStart/index.md) - [RunSummary](https://docs.ezghcloud.com/workflows-api/schemas/RunSummary/index.md) — A run as lists show it: no steps, payloads or error message (get the run for those). - [Schedule](https://docs.ezghcloud.com/workflows-api/schemas/Schedule/index.md) - [ScheduleCreate](https://docs.ezghcloud.com/workflows-api/schemas/ScheduleCreate/index.md) - [ScheduleList](https://docs.ezghcloud.com/workflows-api/schemas/ScheduleList/index.md) - [ScheduleSummary](https://docs.ezghcloud.com/workflows-api/schemas/ScheduleSummary/index.md) - [ScheduleUpdate](https://docs.ezghcloud.com/workflows-api/schemas/ScheduleUpdate/index.md) - [Step](https://docs.ezghcloud.com/workflows-api/schemas/Step/index.md) - [WorkflowInfo](https://docs.ezghcloud.com/workflows-api/schemas/WorkflowInfo/index.md)