Skip to main content

Known limitations

What the platform does not do today. Each item says what to do instead.

Calling into a Flow (the API)​

No rate limits are enforced. Not per key, not per account. A key's maxCallsPerMinute / maxCallsPerDay values are stored but not checked. Every accepted request rings a real phone and is billed. Throttle on your side, pin each key to one flow and set Allowed IPs.

The key's role is not checked. A key with flows:call can call any flow its own flow pins allow, whatever the Runs as user's role says — including a user without the Flows permission. Narrow the key itself: flow pins, Allowed IPs, a short expiry.

No call id, no status, no cancel. The response's data.call.id identifies the stored params, not the call; status is always queued; nothing looks a call up or stops it once accepted. There is no scheduling and no idempotency key — a retried request places a second call. Learn the outcome from a step URL carrying your own id, or from Flow Data in a Call History alert.

params expire, even mid-call. They are readable for ttlSec seconds after your request (default 900). A step that runs later sees none of them: its spoken placeholders are read out as written, and its URL receives the literal {name}. Set ttlSec to cover ringing plus the longest possible call.

No answering-machine detection. The flow starts when the call is answered by anyone or anything, so voicemail hears the first step and keypad steps get no input. Call Logs show how fast an outbound call was answered — an instant answer usually means voicemail. Write the first step to make sense as a voicemail message, and send no-input to a polite closing step.

params are not stored on the call. They are not in Call History, Flow Data or alert payloads. Echo what you need through a step URL, or keep it on your side keyed by number and time.

Call values describe the outbound leg. On an API call, {callerid}, {dnid} and similar do not hold the numbers involved, and Contact tags routing does not identify the person you called. Send numbers and ids in params.

One number per request, and no destination restrictions beyond what your account can dial.

Step URLs​

Values in a step URL are not URL-encoded. A space, &, =, #, ? or / in a value breaks the URL or adds parameters. Use URL-safe values, encode them before sending params, or move them to a POST Body (which is encoded). Referenced call values, earlier answers and saved values are also appended to the query string under their own names.

No request signature, no published source addresses. Authenticate with a Request Profile (Bearer, API key header or Basic) and keep the credential in a Secret variable.

8 seconds, no retries. A slow or failed request fails the step, which then takes On error — hang up unless you change it. The step as a whole — your reply plus producing its speech — must finish in about 10 seconds; very long text can push it over.

A step cannot use its own answer in its URL. The URL is called before the step collects anything. Collect in one step, call the URL in the next.

Flows​

No API to build or change flows. Flows are created and edited in the admin center only.

No API for results. Flow Data reaches you only through Call History alerts (email, SMS, webhook, SFTP) — not through the public REST API's call endpoints or webhooks. Flow call logs are in the admin center only.

Spoken text cannot use call values or earlier answers. {callerid} and {step_id} are not filled in text-to-speech. Read an answer back with Read the answer back, or have your step URL return it in text or params.

Recorded sounds are fixed. {placeholders} are filled only in text-to-speech spoken live, not in uploaded, recorded or library sounds.

Loops are capped. At most 20 steps per call and 3 visits to any one step; past that the call goes to the last Default routing destination.

Flow Data is short. Names and values are cut to 64 characters, and it is written when the flow finishes — not while the call is in progress.