API endpoints

The full public surface, grouped by resource. All paths are under /v1 and take a bearer token; org-scoped routes take your org slug in the path. For authentication, key scopes, conventions, pagination, and errors, see the REST API guide. Rows marked session only need a logged-in session; an API key can never perform them at any scope.

Resources

ResourceWhat it covers
WorkflowsCreate, version, disable, and delete workflows.
RunsTrigger a run; list, read, cancel, and retry runs.
SchedulesDurable schedules: cron, rate, or at.
WebhooksA workflow's inbound URL, auth mode, and secret.
Connections & deliveriesProvider connect flows and the inbound delivery log.
WatchesSubscriptions to workflow and run terminal outcomes.
ArtifactsList a run's artifacts and mint signed download URLs.
SecretsNames and metadata; stage, rotate, delete (never values).
EnvironmentsNamed environments and non-secret variables.
InferenceBYO providers and the public managed-model price table.
API keysList, mint, cap, and revoke keys.
Billing & usageUsage windows, credit balance, seats, and the ledger.
Org, members, auditOrg lifecycle, members, invitations, security policy, the audit log, and exports.
YouYour profile, memberships, and account export.

Workflows

Method & pathWhat it does
GET /orgs/:slug/workflowsList the org's workflows (paginated).
POST /orgs/:slug/workflowsCreate a workflow from a built program artifact (the CLI's deploy).
POST /orgs/:slug/workflows/artifact-upload-urlMint a presigned upload URL for a program artifact before create/update.
GET /workflows/:idFetch one workflow, its manifest, and its current version.
PATCH /workflows/:idPublish a new version (or rename the slug).
DELETE /workflows/:idDelete a workflow (soft; runs and audit are retained).
POST /workflows/:id/disable · /enablePause every trigger, reversibly, then resume.

Runs

Method & pathWhat it does
POST /orgs/:slug/workflows/:id/runsTrigger a run; optional input and environment. Returns 201.
GET /orgs/:slug/workflows/:id/runsList a workflow's runs (filter ?status=, paginated).
GET /orgs/:slug/runsList every run across the org.
GET /runs/:idStatus, timing, token and cost totals, error.
GET /runs/:id/inputThe trigger payload this run was called with.
GET /runs/:id/eventsA snapshot of the run's stored event log.
POST /runs/:id/cancel · /retryStop a queued or in-flight run; re-run with the same input.

Schedules

Method & pathWhat it does
POST /workflows/:id/schedulesCreate a durable schedule: exactly one of cron, rate, or at, with optional timezone and input.
GET /workflows/:id/schedulesList a workflow's durable schedules.
DELETE /workflows/:id/schedules/:scheduleIdCancel a schedule so it stops firing.
GET /orgs/:slug/schedulesThe org's cron triggers plus predicted next fire times (the agenda view).

Schedules created here are the same primitive a program provisions with workflows.schedule(). A crontrigger declared in the workflow's workflow.jsoncdescriptor needs nothing here; these endpoints are for schedules created at runtime or from your own tooling. When the workflow types its input, a schedule's static input is validated against the derived input schema at creation, so a bad payload is rejected then, not when it fires.

Webhooks

Method & pathWhat it does
GET /orgs/:slug/workflows/:id/webhookThe inbound URL and auth mode (the secret is never returned on read).
POST /orgs/:slug/workflows/:id/webhook/rotateRotate the secret; the new value is shown once (admin).

Connections & deliveries

Method & pathWhat it does
POST /orgs/:slug/connections/:providerStart the connect flow: mints a single-use state and returns where to send the user.
POST /orgs/:slug/connections/:provider/completeFinish it after the callback; the claim is verified against the provider, not trusted from the redirect.
GET /orgs/:slug/connections/:providerThe org's connections for that provider, with what each covers (GitHub: the repositories; Linear and Notion: the workspace; Jira: the site).
DELETE /connections/:idDisconnect a provider connection.
GET /orgs/:slug/deliveriesThe inbound delivery log: every event received, its outcome, and the runs it started or why it started none.
POST /deliveries/:id/replayReplay one delivery through the router as a new row and decision (admin).

These back the provider triggers, so :provider is github, linear, jira, or notion. The triggers themselves live in a workflow's workflow.jsonc descriptor and are versioned with the workflow, so there is nothing to configure here per trigger. The delivery log and replay are shared by every provider. On a deployment where a provider is not configured, starting a connect flow fails with that reason and the GET answers { connections: [], configured: false } rather than pretending it could connect.

Watches

Method & pathWhat it does
GET|PUT|DELETE /workflows/:id/watchYour subscription to a workflow's terminal outcomes.
GET|PUT|DELETE /runs/:id/watchYour subscription to one run's terminal outcome.
GET|PATCH /me/notificationsYour notification preferences and every watch you hold.
DELETE /me/watches/:idDrop a single watch.

Artifacts

Method & pathWhat it does
GET /orgs/:slug/runs/:id/artifactsList the artifacts a run produced.
GET /artifacts/:idOne artifact's metadata (name, content type, size, expiry).
GET /artifacts/:id/download302 redirect to a short-lived signed URL.
GET /artifacts/:id/download-urlThe signed URL as JSON (when you can't follow a redirect with a header).

See Artifacts for what a workflow writes and how the signed URLs work.

Secrets

Method & pathWhat it does
GET /orgs/:slug/secretsList secret names and metadata. Values are never returned.
POST /orgs/:slug/secrets (session only)Stage a secret value into the vault.
GET /secrets/:idOne secret's metadata.
DELETE /secrets/:id · POST /secrets/:id/rotate (session only)Delete or rotate a secret.

Environments

Method & pathWhat it does
POST /orgs/:slug/environments · GETCreate a named environment; list the org's environments.
GET|PATCH|DELETE /environments/:idRead, update, or delete one (delete cascades its secrets and variables).
POST /orgs/:slug/env-variables · GETSet a non-secret variable on an environment or the org base; list them.
GET|PATCH|DELETE /env-variables/:idRead, update, or delete one variable.

An environment scopes secrets and variables; a run picks one by name at trigger time, and an env-level value overrides the org base. See Secrets & environments.

Inference

Method & pathWhat it does
GET /orgs/:slug/inference-providersList BYO providers (name, source, base URL). Keys are never returned.
POST /orgs/:slug/inference-providers (session only)Register a provider and stage its key.
DELETE /orgs/:slug/inference-providers/:name (session only)Remove a provider.
PUT /orgs/:slug/inference-providers/:name/bedrock-roleWire a BYO Bedrock cross-account role (the second step after create).
GET /inference/ratesThe public managed-model price table (no auth).

API keys

Method & pathWhat it does
GET /orgs/:slug/api-keysList keys (prefix, last-4, scopes, spend cap; never the value).
POST /orgs/:slug/api-keys (session only)Mint a key; the bwk_ token is shown once.
POST /orgs/:slug/inference-keysMint an inference-only key with a default spend cap.
PATCH /api-keys/:id (session only)Set or clear a monthly spend cap.
DELETE /api-keys/:idRevoke a key.

Billing & usage

Method & pathWhat it does
GET /orgs/:slug/usageRuns, compute, tokens, outcomes, and credit over a window.
GET /orgs/:slug/workflows/:id/usageThe same, scoped to one workflow.
GET /orgs/:slug/billing/balance · /seats · /transactionsCredit balance, seat counts, and the ledger.
POST /orgs/:slug/billing/checkout · /portalOpen a Stripe Checkout session or the customer portal (admin).
GET|PATCH /orgs/:slug/billing/emailRead or set the billing email.

Org, members, audit

Method & pathWhat it does
POST /orgs · GET /orgs/check-slugCreate an org (you become owner); check slug availability.
GET|PATCH|DELETE /orgs/:slugRead, rename, or delete the org (delete is owner-only).
PATCH /orgs/:slug/securityRequire 2FA, allow-list email domains, set run retention (admin).
GET|PATCH|DELETE /orgs/:slug/members/:userIdList, re-role, or remove members.
POST|GET /orgs/:slug/invitations · DELETE .../:idInvite, list, or revoke (invite is session only).
POST /invitations/acceptAccept an invitation by token.
GET /orgs/:slug/auditThe audit log (admins see all; others see their own entries).
POST /orgs/:slug/exports · GET .../exports/:idRequest an org data export and read its status (admin).

You

Method & pathWhat it does
GET /meYour profile and org memberships.
PATCH /me · DELETE /me (session only)Update your display name; delete your account.
POST /me/exportDownload your account data as JSON.