Now inviting stores. Join the waitlist to hear the agent call you.

Join the waitlist

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.

  • okbooleanrequired

    One oftrue

  • flowslist of Flowrequired
    Show 13 fields inside
    • idstringrequired
    • libraryKeystring or nullrequired

      The library flow it was copied from (start runs with it as flowKey); null if made here.

    • namestringrequired
    • descriptionstringrequired
    • callTypestringrequired

      One oftransactionalservicepromotional

    • versionintegerrequired

      The published version runs use.

    • publishedAtstring or nullrequired
    • languagesobjectrequired
      Show 2 fields inside
      • allowedlist of stringrequired
      • defaultstringrequired
    • inputslist of FlowInputrequired
      Show 5 fields inside
      • keystringrequired
      • labelstringrequired
      • typestringrequired

        One oftextphonenumbermoneydatechoiceyes_no

      • requiredbooleanrequired
      • choiceslist of string
    • inputSchemamap of anyrequired

      A JSON Schema for a run’s inputs (every value is a string).

    • answerslist of FlowAnswerrequired
      Show 4 fields inside
      • keystringrequired
      • questionstringrequired

        In the flow’s default language.

      • typestringrequired

        One ofyes_notextchoicedatenumber

      • choiceslist of stringrequired
    • outcomeslist of objectrequired
      Show 2 fields inside
      • keystringrequired
      • labelstringrequired
    • actionslist of stringrequired

      The actions this flow may call.

Request
curl https://app.rowcall.ai/v1/flows \
  -H "Authorization: Bearer $ROWCALL_API_KEY"
Response
{
  "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-Keystring

    Retry safely: the same key and request get the same response for 24 hours.

Body

  • definitionobjectrequired
    Show 3 fields inside
    • namestringrequired
    • descriptionstring
    • callTypestringrequired

      One oftransactionalservicepromotional

Returns 201

Done.

  • okbooleanrequired

    One oftrue

  • flowFlowDraftrequired
    Show 4 fields inside
    • flowIdstringrequired
    • namestringrequired
    • publishedVersioninteger or nullrequired

      What runs use now; null until published.

    • draftobject or nullrequired

      null when there is no draft (the published version is current).

      Show 5 fields inside
      • versionintegerrequired
      • revisionintegerrequired

        Goes up with every save.

      • definitionFlowDefinitionrequired

        A flow definition (see the docs for every field).

      • problemslist of FlowProblemrequired

        Empty when it can be published.

        Show 2 fields inside
        • pathlist of string or numberrequired
        • messagestringrequired
      • updatedAtstringrequired

        ISO 8601 time.

Request
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"
    }
  }'
Response
{
  "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.

  • okbooleanrequired

    One oftrue

  • flowFlowrequired
    Show 13 fields inside
    • idstringrequired
    • libraryKeystring or nullrequired

      The library flow it was copied from (start runs with it as flowKey); null if made here.

    • namestringrequired
    • descriptionstringrequired
    • callTypestringrequired

      One oftransactionalservicepromotional

    • versionintegerrequired

      The published version runs use.

    • publishedAtstring or nullrequired
    • languagesobjectrequired
      Show 2 fields inside
      • allowedlist of stringrequired
      • defaultstringrequired
    • inputslist of FlowInputrequired
      Show 5 fields inside
      • keystringrequired
      • labelstringrequired
      • typestringrequired

        One oftextphonenumbermoneydatechoiceyes_no

      • requiredbooleanrequired
      • choiceslist of string
    • inputSchemamap of anyrequired

      A JSON Schema for a run’s inputs (every value is a string).

    • answerslist of FlowAnswerrequired
      Show 4 fields inside
      • keystringrequired
      • questionstringrequired

        In the flow’s default language.

      • typestringrequired

        One ofyes_notextchoicedatenumber

      • choiceslist of stringrequired
    • outcomeslist of objectrequired
      Show 2 fields inside
      • keystringrequired
      • labelstringrequired
    • actionslist of stringrequired

      The actions this flow may call.

Request
curl https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0 \
  -H "Authorization: Bearer $ROWCALL_API_KEY"
Response
{
  "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.

  • okbooleanrequired

    One oftrue

  • flowFlowrequired
    Show 13 fields inside
    • idstringrequired
    • libraryKeystring or nullrequired

      The library flow it was copied from (start runs with it as flowKey); null if made here.

    • namestringrequired
    • descriptionstringrequired
    • callTypestringrequired

      One oftransactionalservicepromotional

    • versionintegerrequired

      The published version runs use.

    • publishedAtstring or nullrequired
    • languagesobjectrequired
      Show 2 fields inside
      • allowedlist of stringrequired
      • defaultstringrequired
    • inputslist of FlowInputrequired
      Show 5 fields inside
      • keystringrequired
      • labelstringrequired
      • typestringrequired

        One oftextphonenumbermoneydatechoiceyes_no

      • requiredbooleanrequired
      • choiceslist of string
    • inputSchemamap of anyrequired

      A JSON Schema for a run’s inputs (every value is a string).

    • answerslist of FlowAnswerrequired
      Show 4 fields inside
      • keystringrequired
      • questionstringrequired

        In the flow’s default language.

      • typestringrequired

        One ofyes_notextchoicedatenumber

      • choiceslist of stringrequired
    • outcomeslist of objectrequired
      Show 2 fields inside
      • keystringrequired
      • labelstringrequired
    • actionslist of stringrequired

      The actions this flow may call.

  • isNewbooleanrequired
Request
curl -X POST https://app.rowcall.ai/v1/flows/library/order_verification/install \
  -H "Authorization: Bearer $ROWCALL_API_KEY"
Response
{
  "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.

  • okbooleanrequired

    One oftrue

  • flowFlowDraftrequired
    Show 4 fields inside
    • flowIdstringrequired
    • namestringrequired
    • publishedVersioninteger or nullrequired

      What runs use now; null until published.

    • draftobject or nullrequired

      null when there is no draft (the published version is current).

      Show 5 fields inside
      • versionintegerrequired
      • revisionintegerrequired

        Goes up with every save.

      • definitionFlowDefinitionrequired

        A flow definition (see the docs for every field).

      • problemslist of FlowProblemrequired

        Empty when it can be published.

        Show 2 fields inside
        • pathlist of string or numberrequired
        • messagestringrequired
      • updatedAtstringrequired

        ISO 8601 time.

Request
curl https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0/draft \
  -H "Authorization: Bearer $ROWCALL_API_KEY"
Response
{
  "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

  • definitionFlowDefinitionrequired

    A flow definition (see the docs for every field).

Returns 200

Done.

  • okbooleanrequired

    One oftrue

  • flowFlowDraftrequired
    Show 4 fields inside
    • flowIdstringrequired
    • namestringrequired
    • publishedVersioninteger or nullrequired

      What runs use now; null until published.

    • draftobject or nullrequired

      null when there is no draft (the published version is current).

      Show 5 fields inside
      • versionintegerrequired
      • revisionintegerrequired

        Goes up with every save.

      • definitionFlowDefinitionrequired

        A flow definition (see the docs for every field).

      • problemslist of FlowProblemrequired

        Empty when it can be published.

        Show 2 fields inside
        • pathlist of string or numberrequired
        • messagestringrequired
      • updatedAtstringrequired

        ISO 8601 time.

Request
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"
    }
  }'
Response
{
  "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.

  • okbooleanrequired

    One oftrue

  • flowFlowrequired
    Show 13 fields inside
    • idstringrequired
    • libraryKeystring or nullrequired

      The library flow it was copied from (start runs with it as flowKey); null if made here.

    • namestringrequired
    • descriptionstringrequired
    • callTypestringrequired

      One oftransactionalservicepromotional

    • versionintegerrequired

      The published version runs use.

    • publishedAtstring or nullrequired
    • languagesobjectrequired
      Show 2 fields inside
      • allowedlist of stringrequired
      • defaultstringrequired
    • inputslist of FlowInputrequired
      Show 5 fields inside
      • keystringrequired
      • labelstringrequired
      • typestringrequired

        One oftextphonenumbermoneydatechoiceyes_no

      • requiredbooleanrequired
      • choiceslist of string
    • inputSchemamap of anyrequired

      A JSON Schema for a run’s inputs (every value is a string).

    • answerslist of FlowAnswerrequired
      Show 4 fields inside
      • keystringrequired
      • questionstringrequired

        In the flow’s default language.

      • typestringrequired

        One ofyes_notextchoicedatenumber

      • choiceslist of stringrequired
    • outcomeslist of objectrequired
      Show 2 fields inside
      • keystringrequired
      • labelstringrequired
    • actionslist of stringrequired

      The actions this flow may call.

Request
curl -X POST https://app.rowcall.ai/v1/flows/flw_k3j9x2m4q8w1z7p5n6b0/publish \
  -H "Authorization: Bearer $ROWCALL_API_KEY"
Response
{
  "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"
    ]
  }
}