API reference

Generated from the live API’s OpenAPI spec — every field below is enforced by the route’s zod schema, so this reference cannot drift. All requests are authenticated with Authorization: Bearer <api-key>. Base URL: https://flowplane-api.do.demo.thebuildmill.com.

Decisions

GET /v1/decisions/

List decisions (reviewer inbox)

List decisions for the org, newest first. Filter by status and assignee email for the reviewer inbox.

Parameters:

ParamInRequiredType
statusquerynoPENDING | APPROVED | REJECTED | EXPIRED
assigneequerynostring
limitquerynointeger
offsetquerynointeger

GET /v1/decisions/{id}

Get a decision with its quorum tally

Parameters:

ParamInRequiredType
idpathyesstring

POST /v1/decisions/{id}/decide

Approve or reject a decision

Record a vote. Under quorum (FN-82) the decision resolves only when the approval/rejection threshold is met; reject-wins by default. On resolution Flowplane fires the engine resume event.

Parameters:

ParamInRequiredType
idpathyesstring

Request body:

FieldTypeRequiredDescription
decisionapprove | rejectyes
notestringno

Runs

POST /v1/runs/

Trigger a workflow run

Start a run of a registered workflow. For external engines this fires the engine event and seeds no Flowplane rows; for the bundled engine Flowplane owns the run. Supports idempotency, a per-run timeout, and a cost cap.

Request body:

FieldTypeRequiredDescription
workflowIdstringyes
inputobjectno
idempotencyKeystringno
timeoutSecintegerno
maxCostUsdnumberno

Worker

POST /v1/worker/register

Register (upsert) a workflow definition

SDK/worker self-registration (FN-34). Idempotent upsert keyed by workflow id for the API key’s org.

Request body:

FieldTypeRequiredDescription
idstringyes
namestringno
versionintegerno
enginebundled | inngest | temporal | triggerno
stepsobject[]yes

POST /v1/worker/decisions

Open a HITL decision (decision-first model)

Called by an engine adapter (e.g. flowplane.awaitApproval) to request a human decision for an external-engine run. The policy gate (FN-81) may resolve "not required", in which case approvalNeeded=false and no decision is created.

Request body:

FieldTypeRequiredDescription
enginebundled | inngest | temporal | triggerno
externalRunIdstringyes
stepRefstringyes
workflowRefstringno
assigneeEmailstringno
policystringno
requiredbooleanno
contextobjectno
timeoutSecintegerno

POST /v1/worker/policies

Upsert a named approval policy

Declare an org-scoped approval policy (FN-81/FN-82): a mandatory floor (when a human is required) plus defaults for assignee, approver group, and quorum. Idempotent upsert keyed by (org, name).

Request body:

FieldTypeRequiredDescription
namestringyes
floorobject[]no
defaultsobjectno