Idempotency-Key returns the existing execution instead.
The trigger’s input_contract decides which payloads Flowker accepts and how it decodes them. Choose it before you write the node: it is required, and it fixes the payload format for the whole route.
Before you start
- A workflow in
draftstatus. An active workflow is locked, so add the trigger before you activate it. See Getting started with Flowker for the create-and-activate path. - With
PLUGIN_AUTH_ENABLED=true— required in production — grant theexecutepermission on thewebhooksresource to every system you let call the path. See Securing a webhook. A non-production deployment with plugin authentication disabled uses a non-authorizing passthrough. - For the
xsdcontract: an XSD document in the registry. Upload it with Upload an XSD schema and keep the id it returns. To enforce XSD ingress validation, configure the XML validation service throughXSD_VALIDATOR_URL. When it is unset, Flowker decodes well-formed XML but skips XSD validation. - For the
openapicontract: an OpenAPI document in the registry (Upload an OpenAPI schema, covered end to end in Connecting your own API). You also need the path and the method of the operation whose request body describes your payload. Derive an operation schema shows you that request body.
Step 1: Read the trigger contract from the catalog
Triggers are built in. You discover them in the catalog, and you never create one.
1
List the built-in triggers
List catalog triggers returns each trigger with its
id, name and version. The webhook trigger’s id is webhook.2
Read the webhook trigger's schema
Get a catalog trigger returns the same fields plus
schema — the JSON Schema Flowker validates your trigger node against. Read it when you want the field list from the running instance.Step 2: Choose the input contract
The mode fixes the route’s payload format. An
xsd route is XML and an openapi route is JSON. An open route uses the format you declare. The validator currently also accepts format on xsd and openapi, but those modes ignore it and force XML or JSON respectively; omit it there so the configuration does not imply that it changes the route.
Choose open when the caller’s payload has no published contract, or when you want the workflow itself to decide what is acceptable. When a partner sends XML that an XSD document defines, choose xsd. Choose openapi when a partner sends JSON and you hold the OpenAPI document that describes it.
An
openapi route never accepts an unchecked payload: when Flowker cannot reach a verdict, it rejects the call with FLK-0720, and the workflow never sees that payload. When XSD validation is configured, an xsd route reaches its verdict through that service: a document that does not conform is rejected with XML_VALIDATION_FAILED, and a verdict Flowker cannot trust with FLK-0720. Configure that service before you put an xsd route in front of a caller that requires schema enforcement.Step 3: Decide how the webhook answers
On a
sync route, response_view shapes the body:
response_view is inert on an async route. For the full passthrough rules and for the responseStatusCode override, see Synchronous response mode.
Step 4: Write the trigger node
The webhook trigger is a node with
type: "trigger" and these fields in its data:
The trigger configuration is a closed contract. Saving a workflow whose webhook trigger omits
path, method or input_contract, misses a field its input_contract mode requires, names another mode’s schema id or operation field, or carries a key or value the schema rejects fails with FLK-0934.
payments/received, /payments/received and payments/received/ all register the same route.
Step 5: Activate the workflow
1
Create the workflow
Send the node with the rest of your workflow to Create a workflow. The workflow lands in
draft status, and Flowker validates the trigger configuration here — a contract error answers FLK-0934.2
Activate it
Call Activate a workflow. Activation registers the path and the method. It also resolves what the contract references. A missing XSD schema answers
FLK-0930 and a missing OpenAPI schema FLK-0931. An operation the document does not declare answers FLK-0932, and an operation with no request body answers FLK-0933.FLK-0360. Deactivating a workflow releases its routes, so you can hand a path to a new version.
Step 6: Call the route and confirm it works
Send the call the way your caller will:
async route whose execution is not terminal answers 202 with the receipt:
sync route answers with the execution’s outcome, in the shape its response_view selects. The status it carries depends on the view and on how the execution ended — Synchronous response mode holds those rules.
Three signals tell you the route worked:
- A response that started an execution carries
X-Webhook-Workflow-IDandX-Webhook-Execution-ID, so you can tie a call to the workflow it reached and the execution it started. - Get execution results reports the step results and the final output for that
executionId. - The execution’s input carries a
_webhookobject with the method, the path and the caller’s address. Use it to confirm the workflow saw the call it should. See Webhook metadata.
Idempotency-Key returns the original execution instead of starting another one. On an async route, a terminal replay returns an HTTP 200 receipt with idempotencyReplayed: true and the original status. On a sync route, the status and body follow response_view and any terminal responseStatusCode: full and receipt include replay metadata, while final_output and a direct passthrough response do not guarantee it. Send a new key to run the workflow again.
The five verbs each have their own reference page: POST, GET, PUT, PATCH and DELETE.
When a call fails
After Flowker resolves a route, JSON-route errors return
code, title and message, while XML-route errors return an <error> document. The FLK-0363 body-size check runs before route resolution, so it returns the JSON error envelope for every request. See the Flowker error list for every code and both shapes.
What’s next
Integration guide
Connect the workflow to external services, and read the full synchronous-response rules.
Workflow design guide
Build the rest of the graph the trigger enters.

