Flows
The calls RowCall can make for you. Install a ready-made flow from the library, or make your own, publish it, and start runs with it.
List flows
GET/flows
The flows you can start runs with: each one’s published version, by name.
Needs the flows scope.
Returns 200
Done.
okbooleanrequiredOne of
trueflowslist of FlowrequiredShow 13 fields insideHide the fields inside
idstringrequiredlibraryKeystring or nullrequiredThe library flow it was copied from (start runs with it as flowKey); null if made here.
namestringrequireddescriptionstringrequiredcallTypestringrequiredOne of
transactionalservicepromotionalversionintegerrequiredThe published version runs use.
publishedAtstring or nullrequiredlanguagesobjectrequiredShow 2 fields insideHide the fields inside
allowedlist of stringrequireddefaultstringrequired
inputslist of FlowInputrequiredShow 5 fields insideHide the fields inside
keystringrequiredlabelstringrequiredtypestringrequiredOne of
textphonenumbermoneydatechoiceyes_norequiredbooleanrequiredchoiceslist of string
inputSchemamap of anyrequiredA JSON Schema for a run’s
inputs(every value is a string).answerslist of FlowAnswerrequiredShow 4 fields insideHide the fields inside
keystringrequiredquestionstringrequiredIn the flow’s default language.
typestringrequiredOne of
yes_notextchoicedatenumberchoiceslist of stringrequired
outcomeslist of objectrequiredShow 2 fields insideHide the fields inside
keystringrequiredlabelstringrequired
actionslist of stringrequiredThe actions this flow may call.
curl https://app.rowcall.ai/v1/flows \ -H "Authorization: Bearer $ROWCALL_API_KEY"
{
"ok": true,
"flows": [
{
"id": "flw_k3j9x2m4q8w1z7p5n6b0",
"libraryKey": "order_verification",
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional",
"version": 3,
"publishedAt": "2026-10-12T06:30:00.000Z",
"languages": {
"allowed": [
"hi-IN",
"en-IN"
],
"default": "hi-IN"
},
"inputs": [
{
"key": "customer_name",
"label": "Name",
"type": "text",
"required": true
},
{
"key": "order_id",
"label": "Order",
"type": "text",
"required": true
},
{
"key": "order_total",
"label": "Total",
"type": "money",
"required": true
},
{
"key": "address",
"label": "Delivery address",
"type": "text",
"required": true
}
],
"inputSchema": {
"type": "object",
"required": [
"customer_name",
"order_id",
"order_total",
"address"
],
"properties": {
"customer_name": {
"type": "string",
"title": "Name"
},
"order_id": {
"type": "string",
"title": "Order"
},
"order_total": {
"type": "string",
"title": "Total"
},
"address": {
"type": "string",
"title": "Delivery address"
}
}
},
"answers": [
{
"key": "placed_order",
"question": "Did you place this order?",
"type": "yes_no",
"choices": []
},
{
"key": "address_correct",
"question": "Should we deliver it to 12 MG Road, Pune?",
"type": "yes_no",
"choices": []
}
],
"outcomes": [
{
"key": "confirmed",
"label": "Confirmed"
},
{
"key": "address_changed",
"label": "Address changed"
},
{
"key": "cancelled",
"label": "Cancelled"
},
{
"key": "needs_team",
"label": "Needs the team"
}
],
"actions": [
"get_order",
"confirm_order",
"cancel_order",
"update_delivery_address"
]
}
]
}Make a flow
POST/flows
A new flow from a whole definition, saved as its first draft. A half-written definition is fine: the response lists its problems. Publish it when there are none.
Needs the flows scope.
Headers
Idempotency-KeystringRetry safely: the same key and request get the same response for 24 hours.
Body
definitionobjectrequiredShow 3 fields insideHide the fields inside
namestringrequireddescriptionstringcallTypestringrequiredOne of
transactionalservicepromotional
Returns 201
Done.
okbooleanrequiredOne of
trueflowFlowDraftrequiredShow 4 fields insideHide the fields inside
flowIdstringrequirednamestringrequiredpublishedVersioninteger or nullrequiredWhat runs use now; null until published.
draftobject or nullrequirednull when there is no draft (the published version is current).
Show 5 fields insideHide the fields inside
versionintegerrequiredrevisionintegerrequiredGoes up with every save.
definitionFlowDefinitionrequiredA flow definition (see the docs for every field).
problemslist of FlowProblemrequiredEmpty when it can be published.
Show 2 fields insideHide the fields inside
pathlist of string or numberrequiredmessagestringrequired
updatedAtstringrequiredISO 8601 time.
curl -X POST https://app.rowcall.ai/v1/flows \
-H "Authorization: Bearer $ROWCALL_API_KEY" \
-H "Idempotency-Key: verify-4821" \
-H "Content-Type: application/json" \
-d '{
"definition": {
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional"
}
}'{
"ok": true,
"flow": {
"flowId": "flw_k3j9x2m4q8w1z7p5n6b0",
"name": "Order verification",
"publishedVersion": 3,
"draft": {
"version": 4,
"revision": 2,
"definition": {
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional"
},
"problems": [
{
"path": [
"steps"
],
"message": "Add at least one step."
}
],
"updatedAt": "2026-10-13T09:02:41.000Z"
}
}
}Get a flow
GET/flows/{flowId}
One published flow: the inputs a run brings, the answers it collects, its outcomes and actions.
Needs the flows scope.
Path
flowIdstringrequired
Returns 200
Done.
okbooleanrequiredOne of
trueflowFlowrequiredShow 13 fields insideHide the fields inside
idstringrequiredlibraryKeystring or nullrequiredThe library flow it was copied from (start runs with it as flowKey); null if made here.
namestringrequireddescriptionstringrequiredcallTypestringrequiredOne of
transactionalservicepromotionalversionintegerrequiredThe published version runs use.
publishedAtstring or nullrequiredlanguagesobjectrequiredShow 2 fields insideHide the fields inside
allowedlist of stringrequireddefaultstringrequired
inputslist of FlowInputrequiredShow 5 fields insideHide the fields inside
keystringrequiredlabelstringrequiredtypestringrequiredOne of
textphonenumbermoneydatechoiceyes_norequiredbooleanrequiredchoiceslist of string
inputSchemamap of anyrequiredA JSON Schema for a run’s
inputs(every value is a string).answerslist of FlowAnswerrequiredShow 4 fields insideHide the fields inside
keystringrequiredquestionstringrequiredIn the flow’s default language.
typestringrequiredOne of
yes_notextchoicedatenumberchoiceslist of stringrequired
outcomeslist of objectrequiredShow 2 fields insideHide the fields inside
keystringrequiredlabelstringrequired
actionslist of stringrequiredThe actions this flow may call.
curl https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0 \ -H "Authorization: Bearer $ROWCALL_API_KEY"
{
"ok": true,
"flow": {
"id": "flw_k3j9x2m4q8w1z7p5n6b0",
"libraryKey": "order_verification",
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional",
"version": 3,
"publishedAt": "2026-10-12T06:30:00.000Z",
"languages": {
"allowed": [
"hi-IN",
"en-IN"
],
"default": "hi-IN"
},
"inputs": [
{
"key": "customer_name",
"label": "Name",
"type": "text",
"required": true
},
{
"key": "order_id",
"label": "Order",
"type": "text",
"required": true
},
{
"key": "order_total",
"label": "Total",
"type": "money",
"required": true
},
{
"key": "address",
"label": "Delivery address",
"type": "text",
"required": true
}
],
"inputSchema": {
"type": "object",
"required": [
"customer_name",
"order_id",
"order_total",
"address"
],
"properties": {
"customer_name": {
"type": "string",
"title": "Name"
},
"order_id": {
"type": "string",
"title": "Order"
},
"order_total": {
"type": "string",
"title": "Total"
},
"address": {
"type": "string",
"title": "Delivery address"
}
}
},
"answers": [
{
"key": "placed_order",
"question": "Did you place this order?",
"type": "yes_no",
"choices": []
},
{
"key": "address_correct",
"question": "Should we deliver it to 12 MG Road, Pune?",
"type": "yes_no",
"choices": []
}
],
"outcomes": [
{
"key": "confirmed",
"label": "Confirmed"
},
{
"key": "address_changed",
"label": "Address changed"
},
{
"key": "cancelled",
"label": "Cancelled"
},
{
"key": "needs_team",
"label": "Needs the team"
}
],
"actions": [
"get_order",
"confirm_order",
"cancel_order",
"update_delivery_address"
]
}
}Install a library flow
POST/flows/library/{libraryKey}/install
Copies one of RowCall’s ready-made flows (order_verification, live_checkout_help, …) into this org and publishes it, so runs can start with it by flowKey. Installing again returns the same flow.
Needs the flows scope.
Path
libraryKeystringrequired
Returns 200
Done.
okbooleanrequiredOne of
trueflowFlowrequiredShow 13 fields insideHide the fields inside
idstringrequiredlibraryKeystring or nullrequiredThe library flow it was copied from (start runs with it as flowKey); null if made here.
namestringrequireddescriptionstringrequiredcallTypestringrequiredOne of
transactionalservicepromotionalversionintegerrequiredThe published version runs use.
publishedAtstring or nullrequiredlanguagesobjectrequiredShow 2 fields insideHide the fields inside
allowedlist of stringrequireddefaultstringrequired
inputslist of FlowInputrequiredShow 5 fields insideHide the fields inside
keystringrequiredlabelstringrequiredtypestringrequiredOne of
textphonenumbermoneydatechoiceyes_norequiredbooleanrequiredchoiceslist of string
inputSchemamap of anyrequiredA JSON Schema for a run’s
inputs(every value is a string).answerslist of FlowAnswerrequiredShow 4 fields insideHide the fields inside
keystringrequiredquestionstringrequiredIn the flow’s default language.
typestringrequiredOne of
yes_notextchoicedatenumberchoiceslist of stringrequired
outcomeslist of objectrequiredShow 2 fields insideHide the fields inside
keystringrequiredlabelstringrequired
actionslist of stringrequiredThe actions this flow may call.
isNewbooleanrequired
curl -X POST https://app.rowcall.ai/v1/flows/library/order_verification/install \ -H "Authorization: Bearer $ROWCALL_API_KEY"
{
"ok": true,
"flow": {
"id": "flw_k3j9x2m4q8w1z7p5n6b0",
"libraryKey": "order_verification",
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional",
"version": 3,
"publishedAt": "2026-10-12T06:30:00.000Z",
"languages": {
"allowed": [
"hi-IN",
"en-IN"
],
"default": "hi-IN"
},
"inputs": [
{
"key": "customer_name",
"label": "Name",
"type": "text",
"required": true
},
{
"key": "order_id",
"label": "Order",
"type": "text",
"required": true
},
{
"key": "order_total",
"label": "Total",
"type": "money",
"required": true
},
{
"key": "address",
"label": "Delivery address",
"type": "text",
"required": true
}
],
"inputSchema": {
"type": "object",
"required": [
"customer_name",
"order_id",
"order_total",
"address"
],
"properties": {
"customer_name": {
"type": "string",
"title": "Name"
},
"order_id": {
"type": "string",
"title": "Order"
},
"order_total": {
"type": "string",
"title": "Total"
},
"address": {
"type": "string",
"title": "Delivery address"
}
}
},
"answers": [
{
"key": "placed_order",
"question": "Did you place this order?",
"type": "yes_no",
"choices": []
},
{
"key": "address_correct",
"question": "Should we deliver it to 12 MG Road, Pune?",
"type": "yes_no",
"choices": []
}
],
"outcomes": [
{
"key": "confirmed",
"label": "Confirmed"
},
{
"key": "address_changed",
"label": "Address changed"
},
{
"key": "cancelled",
"label": "Cancelled"
},
{
"key": "needs_team",
"label": "Needs the team"
}
],
"actions": [
"get_order",
"confirm_order",
"cancel_order",
"update_delivery_address"
]
},
"isNew": true
}Get a flow’s draft
GET/flows/{flowId}/draft
Any flow of the org’s, published or not: its draft (if it has one), its problems, and the version runs use.
Needs the flows scope.
Path
flowIdstringrequired
Returns 200
Done.
okbooleanrequiredOne of
trueflowFlowDraftrequiredShow 4 fields insideHide the fields inside
flowIdstringrequirednamestringrequiredpublishedVersioninteger or nullrequiredWhat runs use now; null until published.
draftobject or nullrequirednull when there is no draft (the published version is current).
Show 5 fields insideHide the fields inside
versionintegerrequiredrevisionintegerrequiredGoes up with every save.
definitionFlowDefinitionrequiredA flow definition (see the docs for every field).
problemslist of FlowProblemrequiredEmpty when it can be published.
Show 2 fields insideHide the fields inside
pathlist of string or numberrequiredmessagestringrequired
updatedAtstringrequiredISO 8601 time.
curl https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0/draft \ -H "Authorization: Bearer $ROWCALL_API_KEY"
{
"ok": true,
"flow": {
"flowId": "flw_k3j9x2m4q8w1z7p5n6b0",
"name": "Order verification",
"publishedVersion": 3,
"draft": {
"version": 4,
"revision": 2,
"definition": {
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional"
},
"problems": [
{
"path": [
"steps"
],
"message": "Add at least one step."
}
],
"updatedAt": "2026-10-13T09:02:41.000Z"
}
}
}Save a flow’s draft
PUT/flows/{flowId}/draft
Replaces the draft with this definition, or starts a draft from it. Runs keep using the published version until you publish.
Needs the flows scope.
Path
flowIdstringrequired
Body
definitionFlowDefinitionrequiredA flow definition (see the docs for every field).
Returns 200
Done.
okbooleanrequiredOne of
trueflowFlowDraftrequiredShow 4 fields insideHide the fields inside
flowIdstringrequirednamestringrequiredpublishedVersioninteger or nullrequiredWhat runs use now; null until published.
draftobject or nullrequirednull when there is no draft (the published version is current).
Show 5 fields insideHide the fields inside
versionintegerrequiredrevisionintegerrequiredGoes up with every save.
definitionFlowDefinitionrequiredA flow definition (see the docs for every field).
problemslist of FlowProblemrequiredEmpty when it can be published.
Show 2 fields insideHide the fields inside
pathlist of string or numberrequiredmessagestringrequired
updatedAtstringrequiredISO 8601 time.
curl -X PUT https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0/draft \
-H "Authorization: Bearer $ROWCALL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"definition": {
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional"
}
}'{
"ok": true,
"flow": {
"flowId": "flw_k3j9x2m4q8w1z7p5n6b0",
"name": "Order verification",
"publishedVersion": 3,
"draft": {
"version": 4,
"revision": 2,
"definition": {
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional"
},
"problems": [
{
"path": [
"steps"
],
"message": "Add at least one step."
}
],
"updatedAt": "2026-10-13T09:02:41.000Z"
}
}
}Publish a flow
POST/flows/{flowId}/publish
The draft becomes the version runs use (the one before is retired). Refused while the draft has problems. Try it first with a test credential: test runs walk the flow without calling anyone.
Needs the flows scope.
Path
flowIdstringrequired
Returns 200
Done.
okbooleanrequiredOne of
trueflowFlowrequiredShow 13 fields insideHide the fields inside
idstringrequiredlibraryKeystring or nullrequiredThe library flow it was copied from (start runs with it as flowKey); null if made here.
namestringrequireddescriptionstringrequiredcallTypestringrequiredOne of
transactionalservicepromotionalversionintegerrequiredThe published version runs use.
publishedAtstring or nullrequiredlanguagesobjectrequiredShow 2 fields insideHide the fields inside
allowedlist of stringrequireddefaultstringrequired
inputslist of FlowInputrequiredShow 5 fields insideHide the fields inside
keystringrequiredlabelstringrequiredtypestringrequiredOne of
textphonenumbermoneydatechoiceyes_norequiredbooleanrequiredchoiceslist of string
inputSchemamap of anyrequiredA JSON Schema for a run’s
inputs(every value is a string).answerslist of FlowAnswerrequiredShow 4 fields insideHide the fields inside
keystringrequiredquestionstringrequiredIn the flow’s default language.
typestringrequiredOne of
yes_notextchoicedatenumberchoiceslist of stringrequired
outcomeslist of objectrequiredShow 2 fields insideHide the fields inside
keystringrequiredlabelstringrequired
actionslist of stringrequiredThe actions this flow may call.
curl -X POST https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0/publish \ -H "Authorization: Bearer $ROWCALL_API_KEY"
{
"ok": true,
"flow": {
"id": "flw_k3j9x2m4q8w1z7p5n6b0",
"libraryKey": "order_verification",
"name": "Order verification",
"description": "Confirms a cash-on-delivery order and its delivery address before it ships.",
"callType": "transactional",
"version": 3,
"publishedAt": "2026-10-12T06:30:00.000Z",
"languages": {
"allowed": [
"hi-IN",
"en-IN"
],
"default": "hi-IN"
},
"inputs": [
{
"key": "customer_name",
"label": "Name",
"type": "text",
"required": true
},
{
"key": "order_id",
"label": "Order",
"type": "text",
"required": true
},
{
"key": "order_total",
"label": "Total",
"type": "money",
"required": true
},
{
"key": "address",
"label": "Delivery address",
"type": "text",
"required": true
}
],
"inputSchema": {
"type": "object",
"required": [
"customer_name",
"order_id",
"order_total",
"address"
],
"properties": {
"customer_name": {
"type": "string",
"title": "Name"
},
"order_id": {
"type": "string",
"title": "Order"
},
"order_total": {
"type": "string",
"title": "Total"
},
"address": {
"type": "string",
"title": "Delivery address"
}
}
},
"answers": [
{
"key": "placed_order",
"question": "Did you place this order?",
"type": "yes_no",
"choices": []
},
{
"key": "address_correct",
"question": "Should we deliver it to 12 MG Road, Pune?",
"type": "yes_no",
"choices": []
}
],
"outcomes": [
{
"key": "confirmed",
"label": "Confirmed"
},
{
"key": "address_changed",
"label": "Address changed"
},
{
"key": "cancelled",
"label": "Cancelled"
},
{
"key": "needs_team",
"label": "Needs the team"
}
],
"actions": [
"get_order",
"confirm_order",
"cancel_order",
"update_delivery_address"
]
}
}