Executor configuration lifecycle
Before an executor can be used in a workflow, it moves through the following lifecycle:
Executor configuration lifecycle
/v1/executors endpoints (list, get, update, delete). The lifecycle states (unconfigured, configured, tested, active, disabled) are tracked internally — transitions happen through the service layer.
The executor configuration lifecycle is managed through the service layer (
MarkConfigured, MarkTested, Activate, Disable, Enable commands). Note that the current HTTP API exposes GET, PATCH, and DELETE endpoints. PATCH updates configuration data but does not trigger status transitions.Step 1: Explore the catalog
Before creating an executor configuration, browse the catalog to see what’s already available. The catalog is a read-only registry of built-in executors and triggers that ship with Flowker. You don’t need to create catalog entries — you discover them and then configure the ones you need.
1
List available executors
Call the List catalog executors endpoint to see all executor types Flowker supports out of the box — HTTP requests, data transformations, and more.
2
List available triggers
Call the List catalog triggers endpoint to see how workflows can be started — webhooks or manual API calls.
3
Pick what you need
Identify the executor type and trigger type that match your integration. You’ll reference these when creating your configuration in the next step.
Step 2: Configure a provider connection and executor
Executors are built-in components that ship with Flowker. You do not create them via the API — they are discovered through the catalog (
GET /v1/catalog/executors) in Step 1.
To use an executor, you first create a provider configuration that defines the connection to the external service, and then manage executor configurations that bind a catalog executor to a provider connection with operation-specific settings.
Create a provider configuration
CallPOST /v1/provider-configurations to set up the connection to your external service — including the base URL, credentials, and environment-specific settings. The config field is validated against the provider’s JSON Schema from the catalog.
See Provider configurations below for details and examples.
Manage executor configurations
Once you have a provider configuration, manage executor configurations through the/v1/executors endpoints:
An executor configuration defines which endpoint to call and how to map data for that operation. It references a provider configuration for the actual connection details.
See the Executor configurations API for the full API reference.
Authentication types
Flowker supports multiple authentication methods. Use the method required by your external service.
Example — OIDC client credentials
Example — OIDC client credentials
Provider configurations
Provider configurations are separate from executor configurations. While an executor configuration defines how Flowker calls a specific operation on an external service, a provider configuration represents a configured connection to a provider instance — including its base URL, credentials, and environment-specific settings. Think of it this way: a provider configuration is the connection, and an executor configuration is the operation you run over that connection.
Creating a provider configuration
Create a provider configuration by calling the Create provider configuration endpoint. Provide theproviderId from the catalog and the provider-specific configuration (base URL, credentials, and so on).
The config field is validated against the provider’s JSON Schema from the catalog. If it doesn’t match, the request returns a 422 error.
Example request
Example request
Testing connectivity
After creating a provider configuration, test it with the Test provider configuration endpoint. The test runs three stages — connectivity, authentication, and end-to-end — and returns results for each.Enabling and disabling
Provider configurations are created inactive status. You can temporarily disable one with the Disable provider configuration endpoint and re-enable it later with the Enable provider configuration endpoint.
See the Provider configurations API for the full reference.
Step 3: Configure the executor
Mark the executor as configured by calling the Update executor configuration endpoint. This transitions the status from
unconfigured to configured.
Step 4: Validate your configuration
Before using an executor in a workflow, validate its configuration against the catalog schema using the Validate executor config endpoint (
POST /v1/catalog/executors/{id}/validate).
This performs JSON Schema validation only — it checks that your configuration object matches the structure the executor expects (required fields, types, formats). It does not test connectivity to the external service.
To test actual connectivity to an external service, use the Test provider configuration endpoint on the provider configuration instead. That endpoint runs connectivity, authentication, and end-to-end checks against the real service.
Field mapping and data transformation
When workflow data doesn’t match the format an external service expects — or when a service returns data in a shape the next step can’t consume — use field mappings and transformations to bridge the gap. Field mappings and transformations are defined inside the
data object of executor nodes. Flowker applies input mappings before calling the external service, and output mappings after receiving the response.
Quick example — mapping workflow fields to an executor
Quick example — mapping workflow fields to an executor
Step 5: Use the executor in a workflow
Once your executor configuration is validated, reference it in a workflow. The executor becomes active when it’s used in an active workflow. To temporarily take an executor out of service, update its configuration using the Update executor configuration endpoint.
Using an executor in a workflow
Reference the executor in a workflow node of type
executor.
The example below creates a payment validation workflow. When a payment arrives, Flowker calls the fraud check executor, evaluates the risk score, and either approves or rejects the payment based on the result.
The workflow has five nodes: a webhook trigger that receives the payment, an executor node that calls the fraud check service, a conditional node that evaluates the score, and two action nodes for the approve and reject outcomes. Edges connect them in sequence, with the conditional node branching to either path based on the score threshold.
Use the Create workflow endpoint to define the workflow, then Activate it, and finally Execute it.
Example — Create a payment validation workflow
Example — Create a payment validation workflow
Example — Execute the workflow
Example — Execute the workflow
Triggering workflows
Workflow executions are triggered via the Execute workflow endpoint:
inputData for the execution. All fields are available to subsequent nodes via the workflow namespace — for example, workflow.transactionId or workflow.amount. Node outputs are available via the node’s ID — for example, check-fraud.score.
Idempotency
Every execution request must include anIdempotency-Key header. Requests without it are rejected with 400 Bad Request (error FLK-0509). Generate a fresh UUID for each new execution, and reuse the same key only when retrying the identical request.
Webhook triggers
Webhooks are the primary way external systems trigger Flowker workflows. Instead of your system calling the executions API directly, you register a webhook path in a workflow and external services send HTTP requests to that path.
How it works
- Add a trigger node of type
webhookto your workflow with apathandmethodin itsdata. - When the workflow is activated, Flowker registers the path in its webhook registry.
- External systems send requests to
POST /v1/webhooks/{path}(or the method you configured). - Flowker resolves the path to the matching workflow and executes it.
Defining a webhook trigger node
The webhook trigger is a node withtype: "trigger" and the following fields in data:
Example — Webhook trigger node
Example — Webhook trigger node
Webhook metadata
Flowker automatically injects a_webhook object into the execution’s inputData with metadata about the incoming request:
This metadata is available to all nodes in the workflow via the
workflow._webhook namespace.
Important notes
- Each webhook path + method combination can only be registered by one active workflow. Activating a second workflow with the same path fails with a conflict error.
- Webhook paths support nested segments (e.g.,
payments/stripe/received). - The request body maximum size is 1 MB.
- Deactivating a workflow automatically unregisters its webhook routes.
Synchronous response mode
By default, a webhook trigger responds with a202 receipt as soon as the execution starts (the async mode) — the caller must poll the execution status separately. Set response_mode to "sync" in the trigger node’s data to have Flowker hold the HTTP connection open and return the execution’s outcome directly in the response:
If the execution does not reach a terminal state before the internal wait cap elapses, Flowker falls back to the same
202 receipt (with a Location header pointing at the results endpoint) the async mode would have returned.
response_view selects the shape of the sync response body:
A failed execution’s
finalOutput (in full or final_output view) always carries status: "failed" and errorMessage, and errorClass when Flowker could classify the failure — never a bare {}. Absent a responseStatusCode override (see below), the sync HTTP status stays 200 for full/final_output/receipt (it reports transport health, not business outcome). A valid responseStatusCode on the terminal set_output node overrides that status for those three views.
An action node with actionType: "set_output" can carry an optional responseStatusCode (integer, 200–599) to override the HTTP status a sync webhook response returns. An out-of-range or non-integer value is rejected at save time (FLK-0122). For passthrough, the override applies only when the set_output node itself is the terminal step — a terminal executor’s relayed provider status always wins, and the no-response fallback always uses a plain 200 so an override never masks a failure.
Passthrough detection is strict: only the terminal step counts. A set_output terminal downstream of an executor is shaped as its own output — Flowker never walks back to an earlier executor’s response. On a failed execution the halting step is the terminal step, so a provider 4xx that stopped the workflow is relayed as the real 4xx.
Values in a set_output node’s output support ${...} references resolved against the workflow context — including ${workflow.<field>} (trigger payload), ${execution.id}, ${execution.startedAt}, and ${execution.now} (stamped at interpolation time). An unresolvable ${...} reference fails the step (fail-closed).
Error handling
If a node fails, the execution stops and is marked as
failed.
There is no automatic fallback. After retries are exhausted, the execution fails.
Each failure includes:
- Failed node and reason
- Step number and output
- Error code
Retry and circuit breaker
Flowker includes built-in resilience for executor calls.
Retries
When an executor call fails with a transient error, Flowker retries automatically. Retry behavior is configurable per node in the executor’s configuration:
Retries only apply when the operation is safe to repeat. By default,
POST and PATCH calls are treated as non-idempotent and are not retried (a single attempt), while GET, PUT, DELETE, and other verbs retry normally. Setting retry.max_attempts explicitly on a node opts that node into retries regardless of method.
Non-retryable errors short-circuit to a single attempt regardless of configuration: circuit breaker open, context cancelled, configuration errors, secret-resolution failures, and non-transient 4xx provider responses (any 4xx except 408 and 429).
The retry applies per node execution. If all attempts fail, the step is marked as failed and the execution stops.
Circuit breaker
Flowker uses a circuit breaker to protect external services from being overwhelmed by repeated failing calls:
Provider
4xx client/auth errors do not trip the circuit: they are the caller’s problem, not a sign the provider is down. Only transport-level and 5xx failures count toward the threshold.
When the circuit is open, executor calls fail immediately with FLK-0507 instead of reaching the external service. This prevents cascading failures and gives the external service time to recover.
Circuit breaker state transitions
What’s next
Core concepts
Understand workflows, nodes, edges, and executions.
Executor configurations API
Explore the executor configuration API.

