Update a workflow step
/workflow-steps/{id}Changes the fields you send and returns the step. A taken label, or a changed name, type or is_protected on a protected step, returns 422. A new label renames a release step's deal folders; one a sibling folder has returns 409. is_floating unlinks the step, joining its neighbours, or relinks it at the end. has_custom_form: false removes the custom form; set-custom-form adds one. document_upload and minimum_investment set those requirements; null removes them. It emits no webhook, and sending the previous values undoes it.
Path parameters
The record's id.
Query parameters
Validate and run the call without committing it, returning what the real call would return with
meta.dry_runset.
Request body
application/json, required
The name people see.
The machine name.
- One of:
What a linear step does: default or kyc. A branched step or a branch keeps its type (422).
default,kyc What the step is for.
Whether the step is protected from deletion.
Whether the step sits outside the main chain.
- One of:
Send false to remove the step's custom form.
false Whether only internal users can move investors onto the step.
Whether an internal-only step tells investors that their transaction is being processed internally. Only on an internal-only step (422 internal_only).
Asks the investor to upload a document to enter the step. Null removes it.
Holds investors to the deal's minimum investment. Null removes it.
Releases documents in the step's deal folders, creating them for the workflow's deals and renaming existing ones; a name a sibling folder has returns 409. Null removes it and keeps the folders.
Sends a webhook. Null removes it.
Whether the step posts the investment to Portfolio, with each deal naming the asset.
{
"label": "Funds received"
}Responses
{
"data": {
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"workflow_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"name": "string",
"label": "string",
"type": "string",
"kind": "linear",
"description": "string",
"is_protected": true,
"is_floating": true,
"order": 1,
"has_custom_form": true,
"is_internal_only": true,
"show_default_internal_message": true,
"document_upload": {
"optional": true,
"document_name": "string",
"document_instruction": "string"
},
"minimum_investment": {
"optional": true,
"disclaimer": "string"
},
"document_release": {
"folder_name": "string"
},
"webhook": {
"webhook_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"leading_edge": true
},
"posts_to_portfolio": true,
"info_banner": {
"title": "string",
"body": "string",
"delegated_to_deal": true
},
"requirements": [
{
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"class_name": "string",
"leading_edge": true,
"optional": true,
"delegated_to_deal": true,
"config": {}
}
],
"triggers": [
{
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"class_name": "string",
"leading_edge": true,
"delegated_to_deal": true,
"config": {}
}
],
"created_at": "2026-06-12T10:00:00+00:00",
"updated_at": "2026-06-12T10:00:00+00:00"
}
}Authorization failed. error.code is one of org_disabled,
ip_blocked, missing_scope, scope_disabled, user_disabled.
The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per
problem, or a code documented on the operation.
Examples
curl -X PATCH https://your-org-domain/kong/core/api/v2/workflow-steps/{id}\
-H "Authorization: Bearer $HELM_API_KEY"\
-H "Content-Type: application/json"\
-d '{
"label": "Funds received"
}'