Connect Two Numbers

Ring fromNumber (customer 1); as soon as they answer, ring toNumber (customer 2) and connect the two. Both see one of your numbers as caller ID — a fixed one, or one picked from callingNumberIds (callerIdStrategy ROUND_ROBIN, RANDOM or STICKY). No agent is involved.

While customer 2 rings, customer 1 hears what a normal call sounds like (customer 2's ringing or caller tune, or the operator's message when that phone is off or busy). The conversation is recorded from the moment both are connected (record: false to skip). If customer 1's voicemail answers, customer 2 is connected to it.

The call is a normal call record: follow it with GET /calls/{callLogId} or the call.* webhooks — call_type is connect and connect says what happened on each side. Hang it up with POST /calls/{callLogId}/hangup. Transfer, hold and monitoring do not apply.

Connect calls are off until your account team enables them for your organisation. Subject to the daily/monthly call caps, the allowed number prefixes (both numbers), the do-not-call list, a limit on connect calls in progress, and a platform-wide rate. Requires CRM_ADMIN/ACCOUNT_OWNER/CRM_BOT.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required

Your organisation UUID (returned as org from the /token endpoint).

Body Params
string
required

Customer 1 — rung first. Full international number (a leading + is added if missing; spaces, brackets and dashes are ignored).

string
required

Customer 2 — rung as soon as customer 1 answers, then the two are connected.

callingNumberIds
array of strings

The number(s) both customers see, as ids from GET /numbers — one fixed number, or several to rotate through (callerIdStrategy). All must be on one active voice account. Omitted: the account default number. Inactive numbers are skipped (see skippedCallingNumberIds in the response).

callingNumberIds
string
enum

How a number is picked from callingNumberIds: ROUND_ROBIN (default) takes each in turn, RANDOM any, STICKY the one toNumber last saw from this list (90 days), else the next in turn.

Allowed:
string

Which voice account to call through. Optional — inferred from callingNumberIds, or your single active voice account (see GET /accounts).

number

Seconds customer 1 rings (10–120, default 30).

number

Seconds customer 2 rings (10–120, default 30).

number

Longest the two may talk, in seconds, counted from customer 2 answering (60–14400, default 3600).

boolean

Record the conversation (default true). Recording starts once both are connected; a call that never connects has no recording.

string

Your own id for this call (an order number…): returned on every call payload and webhook, and searchable with GET /calls?reference=. Letters, digits, : . _ - only, at most 64 characters.

string

A chat of yours to thread the call into. Optional — otherwise the call is linked to customer 2's chat when one matches.

Headers
string

Optional. Send the same key again (within 24 hours) and you get the same call back instead of a second call — safe retries. 1–255 printable ASCII characters, no spaces.

Responses
200

Idempotent replay — the call this Idempotency-Key placed (header Idempotent-Replayed: true)

400

Not placed: INVALID_NUMBER, SAME_NUMBER, NUMBER_NOT_ALLOWED (prefix), NUMBER_IS_PLATFORM_DID, NUMBER_ON_DNC, CALLING_NUMBER_NOT_FOUND, POOL_SPANS_ACCOUNTS, VOICE_ACCOUNT_INACTIVE, CALLER_ID_NOT_OWNED, CHAT_NOT_FOUND, INVALID_*

401

Unauthorized

403

Forbidden — role not permitted, voice API not enabled, or CONNECT_CALLS_DISABLED for your organisation

422

The Idempotency-Key was used for a different request

429

Call cap reached, CONNECT_CONCURRENCY_LIMIT, CONNECT_RATE_LIMIT, or too many requests

503

CONNECT_CALLS_UNAVAILABLE — not available on the voice service yet

504

VOICE_TIMEOUT — the voice service did not answer in time; the call may still be placed (the body carries callLogId)

Language
Credentials
Bearer
JWT
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json