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

Join the waitlist

API reference

RowCall API

Start calls to shoppers with your flows, read what they said, and keep your contacts in step. Use an API key (Authorization: Bearer rc_…) for your own org, or OAuth 2 when your app acts for merchants. Test credentials never call anyone.

New to RowCall? Start with the developer guides: what a flow, a run and an action are, and how they fit together.

Base URL

https://app.rowcall.ai/v1

Requests and responses are JSON. Every response has ok; times are ISO 8601 and ids carry a prefix (run_…, flw_…).

Authentication

Send a credential as a bearer token. Use an API key for your own org (Developers → API keys in the dashboard), or OAuth 2 when your app acts for merchants. Test credentials (rc_test_…) walk flows without calling anyone.

Authorization: Bearer rc_live_…

OAuth 2

Authorization code with PKCE. Send the merchant to https://app.rowcall.ai/oauth/authorize, then trade the code at https://app.rowcall.ai/v1/oauth/token. Access tokens last an hour; refresh tokens rotate.

Scopes

ScopeAllows
runsStart, read and cancel calls to shoppers
flowsRead, make and publish flows
contactsAdd and update contacts and their consent
callsRead calls, transcripts and recordings
actionsDefine, change and delete actions, and finish pending ones

Errors

A refused or failed request has ok: false, a sentence you can log or show (error) and a stable code to branch on (errorCode). Codes never change meaning; treat one you don’t know as a generic failure.

{ "ok": false, "error": "Fill in Order.", "errorCode": "INVALID_INPUT" }
StatusCodeMeaningWhat to do
400INVALID_INPUTA field is missing or wrong (error names it), or a required flow input is missing.Fix the request. Don’t retry it as it is.
401UNAUTHENTICATEDNo credential, or the key or token is revoked or expired.Check the Authorization header; refresh an OAuth token.
402NO_CREDITThe org’s balance can’t cover a minute of calling. Test runs are never refused for credit.Top up in Settings → Billing.
403FORBIDDENThe credential lacks the route’s scope.Use a key, or ask for a connection, with the right scope.
403NOT_VERIFIEDRowCall hasn’t approved the business yet, so live calls can’t start. Test runs aren’t affected.Send the business details for approval.
403ORG_SUSPENDEDThe org is suspended.Contact RowCall support.
403OPTED_OUTThe shopper asked not to be called.Don’t call them. The opt-out stays until they ask to be called again.
404NOT_FOUNDNo such flow, run, call, contact or action, or it belongs to the other mode (live or test).Check the id and the credential’s mode.
409CONFLICTThe change clashes with what’s there, such as finishing an action that already has its result.Read the current state first.
409NOT_PUBLISHEDThe flow has no published version.Publish it, or start the run with a published flow.
409OUTSIDE_CALLING_HOURSIt’s outside calling hours and the run asked to be refused then (whenClosed: "refuse").Try again when calling hours open, or let the run wait (the default).
409NO_NUMBERThe org has no phone number for this kind of call yet. RowCall assigns one when it approves the business.Wait for approval. Promotional flows never get a number.
409IDEMPOTENCY_IN_PROGRESSA request with this Idempotency-Key is still running.Wait a moment, then retry.
422IDEMPOTENCY_MISMATCHThe same Idempotency-Key came with a different request.Use a new key for a new request.
422FLOW_INVALIDThe draft still has problems, so it can’t be published.Fix each problem the draft lists, then publish.
413PAYLOAD_TOO_LARGEThe body is over 64 KB.Send less.
429RATE_LIMITEDToo many requests for this credential.Wait, then retry with backoff.
501NOT_CONFIGUREDThe first attempt couldn’t be placed: nothing is set up to place it. The run ends as gave_up.Contact RowCall support.
503PHONE_UNAVAILABLEThe first attempt couldn’t be placed: no phone line was free. The run ends as gave_up.Retry with backoff.
500INTERNALSomething failed on RowCall’s side.Retry with backoff; contact support if it persists.

Sections