Voiceflow bearer token
curl --request POST \
--url https://realtime-api.voiceflow.com/v1/stable/workflow/<workflowID>/block/<blockID>/step \
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json' \
--data '{
"afterStepID": "<string>",
"atStart": true,
"step": {
"kind": "message",
"key": "<StableWorkflowSeedKey>",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": true
},
"links": {}
},
"expectedSteps": [
"<string>"
],
"acknowledgeRewire": true
}'const response = await fetch('https://realtime-api.voiceflow.com/v1/stable/workflow/<workflowID>/block/<blockID>/step?projectID=<projectID>&environmentAlias=<environmentAlias>', {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"afterStepID": "<string>",
"atStart": true,
"step": {
"kind": "message",
"key": "<StableWorkflowSeedKey>",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": true
},
"links": {}
},
"expectedSteps": [
"<string>"
],
"acknowledgeRewire": true
}),
});
const data = await response.json();import requests
response = requests.post(
'https://realtime-api.voiceflow.com/v1/stable/workflow/<workflowID>/block/<blockID>/step?projectID=<projectID>&environmentAlias=<environmentAlias>',
headers={'Authorization': 'Bearer <token>'},
json={
"afterStepID": "<string>",
"atStart": True,
"step": {
"kind": "message",
"key": "<StableWorkflowSeedKey>",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": True
},
"links": {}
},
"expectedSteps": [
"<string>"
],
"acknowledgeRewire": True
},
)
data = response.json()vf workflow insert-step --workflow-id <workflowID> --block-id <blockID> --project-id <projectID> --environment-alias <environmentAlias> \
< body.json{
"message": "<string>",
"blockID": "<string>",
"step": {
"id": "<string>",
"kind": "message",
"exitClass": "sequential",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": true
},
"fallsThroughTo": "<string>",
"suppressedPorts": [
"<string>"
],
"links": [
{
"port": "<string>",
"label": "<string>",
"to": "<string>",
"actions": [
"<StableWorkflowPortAction>"
],
"overridden": true,
"effectiveTo": "<string>"
}
],
"reconciledPorts": {
"added": [
"<string>"
],
"removed": [
"<string>"
]
},
"warnings": [
{
"code": "<StableWorkflowDiagnosticCode>",
"detail": "<string>"
}
]
},
"portAction": {
"stepID": "<string>",
"port": "<string>",
"index": 0
},
"ids": {},
"clearedLinks": [
{
"stepID": "<string>",
"port": "<string>",
"to": "<string>",
"actions": [
"<string>"
]
}
],
"unresolvedReferences": [
{
"path": "<string>",
"token": "<string>",
"reason": "unknown"
}
]
}Adds a step to a block, either after a step you name or at the start of the block. Send `expectedSteps` as your last read returned them; if the block changed since then, the call returns 409 and writes nothing.
curl --request POST \
--url https://realtime-api.voiceflow.com/v1/stable/workflow/<workflowID>/block/<blockID>/step \
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json' \
--data '{
"afterStepID": "<string>",
"atStart": true,
"step": {
"kind": "message",
"key": "<StableWorkflowSeedKey>",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": true
},
"links": {}
},
"expectedSteps": [
"<string>"
],
"acknowledgeRewire": true
}'const response = await fetch('https://realtime-api.voiceflow.com/v1/stable/workflow/<workflowID>/block/<blockID>/step?projectID=<projectID>&environmentAlias=<environmentAlias>', {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"afterStepID": "<string>",
"atStart": true,
"step": {
"kind": "message",
"key": "<StableWorkflowSeedKey>",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": true
},
"links": {}
},
"expectedSteps": [
"<string>"
],
"acknowledgeRewire": true
}),
});
const data = await response.json();import requests
response = requests.post(
'https://realtime-api.voiceflow.com/v1/stable/workflow/<workflowID>/block/<blockID>/step?projectID=<projectID>&environmentAlias=<environmentAlias>',
headers={'Authorization': 'Bearer <token>'},
json={
"afterStepID": "<string>",
"atStart": True,
"step": {
"kind": "message",
"key": "<StableWorkflowSeedKey>",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": True
},
"links": {}
},
"expectedSteps": [
"<string>"
],
"acknowledgeRewire": True
},
)
data = response.json()vf workflow insert-step --workflow-id <workflowID> --block-id <blockID> --project-id <projectID> --environment-alias <environmentAlias> \
< body.json{
"message": "<string>",
"blockID": "<string>",
"step": {
"id": "<string>",
"kind": "message",
"exitClass": "sequential",
"content": {
"responseType": "message",
"messageID": "<string>",
"waitForUserResponse": true
},
"fallsThroughTo": "<string>",
"suppressedPorts": [
"<string>"
],
"links": [
{
"port": "<string>",
"label": "<string>",
"to": "<string>",
"actions": [
"<StableWorkflowPortAction>"
],
"overridden": true,
"effectiveTo": "<string>"
}
],
"reconciledPorts": {
"added": [
"<string>"
],
"removed": [
"<string>"
]
},
"warnings": [
{
"code": "<StableWorkflowDiagnosticCode>",
"detail": "<string>"
}
]
},
"portAction": {
"stepID": "<string>",
"port": "<string>",
"index": 0
},
"ids": {},
"clearedLinks": [
{
"stepID": "<string>",
"port": "<string>",
"to": "<string>",
"actions": [
"<string>"
]
}
],
"unresolvedReferences": [
{
"path": "<string>",
"token": "<string>",
"reason": "unknown"
}
]
}Authorizations
Query Parameters
Body
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Show child attributes
Plain text; markdown is not interpreted. {variable_name} inserts a variable or entity, {variable_name.path} a field of a variable. Escape a literal { or \ with a backslash. A name matching neither is stored as literal text and reported in unresolvedReferences; secrets are not available here.
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Show child attributes
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Show child attributes
Call forward works only in a phone project. In a chat project, do not add it as a step or an action: tell the user it needs a phone project.
Show child attributes
Plain text; markdown is not interpreted. {variable_name} inserts a variable or entity, {variable_name.path} a field of a variable. Escape a literal { or \ with a backslash. A name matching neither is stored as literal text and reported in unresolvedReferences; secrets are not available here.
Ports to link, keyed by port: next, else, fail, no-reply, conversation-turn, or a function or playbook path ID. In create, values are block keys from this request; in add_blocks, block keys from this request or existing block IDs; everywhere else, existing block IDs. A branch you create links through its own to.
Required when the insert makes the last step stop being last and that step has exits that would stop running: a Tool or Code fail or path link is cleared, and actions on such an exit are deleted. Also required when you append a step that has no next port, such as End or Go to block: the old last step's next link cannot move to it, so it is cleared.
Response
201 - application/jsonReturns what was written, the block that holds the new step, the step itself, and the IDs the server created.
Show child attributes
What the step does. api, function, integration and mcp are Tool steps. playbook and operator are Agent steps. goToBlock jumps to a block or a workflow start and ends the path. callForward transfers a phone call and ends the path. legacy is a step these operations show but cannot change.
message, end, set, workflow, listen, condition, buttons, card, carousel, code, api, function, integration, mcp, playbook, operator, crew, handoff, legacy, goToBlock, callForwardHow the step leaves. sequential: it continues to the step below it, or through next when it is last. branch: it leaves through one of its links, so it must be last. async-branch: a Card or Carousel, whose linked buttons run from any position. terminal: it ends the path.
sequential, branch, async-branch, terminalThe step's settings, shaped by its kind. A step these operations cannot show reads as readOnly.
Show child attributes
Show child attributes
responseType, messageID, waitForUserResponseresponseType, promptID, waitForUserResponseShow child attributes
responseType, messageID, responseEnabledresponseType, promptID, responseEnabledShow child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Plain text; markdown is not interpreted. {variable_name} inserts a variable or entity, {variable_name.path} a field of a variable. Escape a literal { or \ with a backslash. A name matching neither is stored as literal text and reported in unresolvedReferences; secrets are not available here.
Show child attributes
The port actions this exit runs, in order, before it reaches to.
Show child attributes
What the step does. api, function, integration and mcp are Tool steps. playbook and operator are Agent steps. goToBlock jumps to a block or a workflow start and ends the path. callForward transfers a phone call and ends the path. legacy is a step these operations show but cannot change.
message, end, set, workflow, listen, condition, buttons, card, carousel, code, api, function, integration, mcp, playbook, operator, crew, handoff, legacy, goToBlock, callForwardThe step's settings, shaped by its kind. A step these operations cannot show reads as readOnly.
Set when the step is an action on an exit: the step and port that run it, and its position.
Links this write cleared because they would no longer run.
Show child attributes
References this write kept as literal text instead of binding, each with the reason. The write still succeeded.
Show child attributes
unknown: no variable or entity of that name. secret-not-allowed: the name is a project secret and this field does not accept one. path-on-non-variable: only a variable has fields. resource-id: a bare resource id, not a name. invalid-name: outside the ^\w{1,64}$ name grammar. dangling: the reference rendered as a bare id, because its row is gone or its name is outside the name grammar.
unknown, secret-not-allowed, path-on-non-variable, resource-id, invalid-name, danglingWas this page helpful?
Thanks for your feedback.