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

Join the waitlist

Search the docs

Find a docs page

API reference

Test mode

Preview

Build and test your integration with runs that walk their flow without dialling a phone, and send the same events and action requests.

Requests made with a test key (rc_test_…), or a test app's OAuth token, run in test mode. Nothing is dialled, but the rest is real: the run passes the same checks, its flow is walked through, your test webhook endpoints get the same signed events, and your test action URL gets the same signed action requests.

How a test run goes

  1. The same checks

    A test run is refused for missing consent, an opted-out number or a missing input, just like a live one. Calling hours don't apply.

  2. Walked through on RowCall

    Within seconds RowCall walks the flow step by step, as a text call marked as a test. Each question gets the answer you gave it in testAnswers, or a sample for its type. Every confirm step is agreed to.

  3. Actions and events

    Each action goes through the same checks as on a real call. rowcall actions go to your test action URL; http actions get their sample reply. The action's result picks the next step.

  4. The outcome

    The walk ends at the flow's end step, with its outcome. The run settles like any other and sends run.answered, run.completed and the rest to your test endpoints.

Choosing the answers

Add testAnswers to the run request, by question key. Use "yes" or "no" for yes/no questions, one of the choices for a choice, a number, or text. Questions you leave out get a sample. A live key sending testAnswers is refused with INVALID_INPUT.

{
  "flowKey": "order_verification",
  "phone": "+919812345678",
  "name": "Asha Rao",
  "inputs": {
    "customer_name": "Asha",
    "order_id": "4821",
    "items": "a pair of running shoes",
    "order_total": "2499",
    "address": "12 MG Road, Pune"
  },
  "consent": {
    "scope": "service",
    "source": "checkout",
    "givenAt": "2026-10-13T09:20:00+05:30",
    "note": "Ticked \"Call me about this order\" at checkout."
  },
  "testAnswers": { "placed_order": "yes", "address_correct": "no", "new_address": "Tower B, Cyber City, Gurugram" }
}

The question keys are in each flow's answers; see the Flows API. In the finished run, a yes/no answer comes back as true or false.

To hear how a flow sounds, talk to it yourself in the app instead. See Simulate a call.

Kept apart from live

  • A test key sees only test runs and calls; a live key never sees them.
  • Test runs never count in results or analytics.
  • Set a test action URL in Developers → Actions and test endpoints in Developers → Webhooks, pointing at your staging system. Test runs never reach your live ones.

What to test before going live

  • Your webhook handler verifies signatures and ignores duplicate event ids.
  • Every action your flows use answers within its timeout, including refusals (ok: false with say).
  • A 202 pending action finishes with the result endpoint.
  • Runs refused for missing consent or an opted-out number are handled in your store.
Next stepIdempotency

Make sure a retry never calls a shopper twice.