Connect calls (connect two numbers)

Join any two phone numbers in one call from your own system: Lodgestory rings the first, rings the second the moment the first answers, and connects them — both see one of your business numbers.

TL;DR

  • What it is — an API call that connects two outside numbers. Customer 1 is rung first; as soon as they answer, customer 2 is rung and the two are connected. No agent is involved.
  • Who it's for — teams whose own systems decide who should talk to whom: a booking platform connecting a guest with a host, a sales app connecting a rep's mobile with a lead, a support tool connecting a field technician with a customer.
  • Top outcome — two people talk on your business number, neither sees the other's real number, and the call is logged, recorded and reported like any other call — with what happened on each side.

At a glance

AvailabilitySwitched on per organisation by your account team. Lodgestory Voice numbers.
How calls are placedThrough the public API, or by an AI assistant connected to your workspace. There is no button in the CRM to place one.
Caller IDOne of your Lodgestory Voice numbers — your account's default, or one picked from a list you send with each call: in turn, at random, or the number the same customer 2 saw last time. Both people see it.
RecordingOn by default, from the moment the two are connected. Can be turned off per call. Transcribed when transcription is on for your account.
Talk time limitUp to 4 hours per call (1 hour unless you ask for another limit).
Who sees themAccount Owners and Admins, in Calls, reports, webhooks and the API. Connect calls have no agent, so team members do not see them in their own call list.
AutomationsConnect calls never start an automation and never create a lead.
APIYes — POST /api/wp-crm/voice/{organisationId}/calls/connect.

How to find it

Connect calls are placed from your own system. Once placed, they appear in Calls (sidebar → Calls) with a Connect tag, and under Filters → Call type → Connect calls.

📸 [SCREENSHOT: connect-calls-log.png — Calls list with two connect calls: "Meera Iyer ⇄ Kabir Shah · Connected" and "+91 93111 00006 ⇄ Neha Gupta · Customer 2 didn't answer"]

What are connect calls?

The problem it solves

Some conversations are between two people who are not your agents: a guest and the host of the home they booked, a field technician and the customer whose AC they are fixing, a sales rep on their own mobile and a lead your app just assigned to them. You want them to talk, but you do not want them swapping personal numbers, and you want a record of the call.

Connect calls put your business number in the middle. Your system sends two numbers to Lodgestory. Lodgestory rings the first person; the moment they answer, it rings the second and connects them. Both phones show your business number. When the call ends you get a full record: who answered, who didn't, for how long they talked, who hung up, the recording and the transcript.

What you get

  • One API call, two phones connected. No agent, no app on either phone.
  • Caller ID from a pool of your numbers — rotate through them, pick at random, or keep each customer 2 on the number they already know.
  • What happened on each side. Customer 1 didn't answer, was busy or couldn't be reached; customer 2 didn't answer, was busy, or customer 1 hung up while customer 2 was ringing — every outcome is recorded separately for each person.
  • Your own reference on the call — an order or booking id you send with the call comes back on every webhook and in the call record, and you can look calls up by it.
  • Recording from the moment both are connected, so it holds the conversation and nothing else.
  • A talk-time limit you set per call.
  • Safe retries. Send the same request again with the same Idempotency-Key and you get the same call back instead of a second one.

How it's different

  • From click-to-call — click-to-call rings one of your agents first. A connect call rings two outside numbers; nobody on your team has to be on it.
  • From Masked Connect — Masked Connect connects a customer who calls in to the right person. A connect call is started by your system and goes out to both people.

Customer scenarios

  • Guest and host. A guest of Acme Hotels' holiday homes taps "Call host" in the booking app. The app sends the guest's number as customer 1 and the host's as customer 2. The guest's phone rings showing Acme Hotels' number; the moment they answer, the host's phone rings. Neither sees the other's number. The booking id travels with the call as its reference.
  • Sales rep on their own mobile. A lead fills a form. Your app sends the rep's mobile as customer 1 and the lead as customer 2. The rep answers first and hears the lead's phone ring — exactly like a normal call.
  • Same customer, same number. A delivery partner always sees the same Acme Hotels number for the same customer, because calls use the sticky choice from your pool of numbers.

How it fits with Lodgestory Voice

  • Your numbers are the caller ID, picked from the numbers on your Lodgestory Voice account.
  • The do-not-call list applies to both numbers.
  • Calls, reports, webhooks and the API all show connect calls, with each side's outcome.
  • Your call limits apply: each connect call counts as one call against your daily and monthly caps.

Core concepts

TermMeaning
Customer 1The number rung first (fromNumber). In the call record it is the caller.
Customer 2The number rung once customer 1 answers (toNumber). In the call record it is the called number and the customer.
Number poolThe list of your numbers a call may show (callingNumberIds).
In turn / random / stickyHow one number is picked from the pool: each in turn (ROUND_ROBIN, the default), any at random (RANDOM), or the number customer 2 saw last time from this pool, within 90 days (STICKY).
ReferenceYour own id for the call (reference) — returned on every webhook and searchable.
Talk time limitThe longest the two may talk (maxDurationSec), counted from the moment they are connected.
OutcomeHow the call went, per person: answered, didn't answer, busy, couldn't be reached, call ended while ringing, or not dialled.

How it works

  1. Your system sends the request with the two numbers.
  2. Lodgestory checks it — connect calls on for your organisation, within your call caps, both numbers allowed for your organisation and not on the do-not-call list — and picks the number to call from.
  3. Customer 1's phone rings, showing your number.
  4. Customer 1 answers, and customer 2's phone rings at once. Customer 1 hears what any caller hears: customer 2's ringing or caller tune, or the network's message when that phone is switched off or busy.
  5. Customer 2 answers and the two are connected. Recording starts now. The talk-time limit counts from now.
  6. Either side hangs up (or you end it through the API, or the talk-time limit is reached) and the call record is completed with each side's outcome.

Customer 2 is rung as soon as customer 1's line answers. If customer 1's voicemail answers, customer 2 is connected to that voicemail.

What each outcome looks like

What happenedCall statusCustomer 1Customer 2Ended by
Both talkedCompletedAnsweredAnsweredCustomer 1, customer 2, the API, or the talk time limit
Customer 1 didn't answer, was busy, or couldn't be reachedNo answer / Busy / FailedDidn't answer / Busy / Couldn't be reachedNot dialledSystem or customer 1
You ended the call while customer 1 was ringingCancelledCall ended while ringingNot dialledThe API
Customer 1 hung up while customer 2 was ringingCancelledAnsweredCall ended while ringingCustomer 1
Customer 2 didn't answerNo answerAnsweredDidn't answerSystem
Customer 2 was busy, rejected the call, or couldn't be reachedBusy / FailedAnsweredBusy / Couldn't be reachedCustomer 2 or system
You ended the call while customer 2 was ringingCancelledAnsweredCall ended while ringingThe API

Talk time is the time the two were connected. The call's answered time is when customer 1 answered; customer 2's own answered time is when the two were connected.

Features in depth

Choosing the caller ID

Send nothing, and the call shows your account's default number. Send callingNumberIds — up to 50 numbers from GET /api/wp-crm/voice/{organisationId}/numbers, all on one voice account — and one is picked by callerIdStrategy. A number that is switched off is skipped and listed in the response under skippedCallingNumberIds. If the first number picked can no longer be used, the next one in the pool is tried once.

In the call log

Calls shows a connect call with a Connect tag, the two people as Customer 1 ⇄ Customer 2 (names when they are your contacts), and a line naming the side that decided the outcome — Connected, Customer 2 didn't answer, Customer 1 hung up while customer 2 rang. Filters → Call type lists Connect calls or Other calls. The detail sheet shows both people with their outcome, a timeline (customer 1 rung, customer 1 answered, customer 2 rung, connected, ended), the caller ID, your reference and the talk time limit. There is no Call back on a connect call.

If you send a wpCrmChatsId, the call's cards appear in that conversation as Connect call. Without one, the call is linked to customer 2's conversation when there is one.

Recording and transcripts

The recording starts when both are connected. Transcripts label the two people Customer 1 and Customer 2.

Webhooks

call.answered fires when the two are connected; call.completed (they talked) or call.missed (they didn't) fires when the call ends, followed by call.recording_available and call.transcript_available. On a connect call call_type is connect, reference is your reference, and connect carries each side's outcome. See the Webhooks API reference.

Reports

The Call Log report marks each call Connect or Standard under Call Type, with Reference, Customer 1 Outcome, Customer 2 Outcome and Ended By (Party) columns. See Reports.

What does not apply

Transfer, hold and listening in are for calls with an agent, so they are not available on a connect call. Connect calls never start an automation, never create a lead, and never count as calling back a missed call in Calls → Team day metrics.

Roles & permissions

RoleWhat they can do
Account Owner / AdminPlace connect calls through the API (also as a bot user), see them in Calls, reports and the API.
Team memberDoes not see connect calls in their own call list (they have no agent).

Limits a user will run into

  • Switched on per organisation, with a limit on how many connect calls can be in progress at once. Ask your account team for both.
  • Your daily and monthly call caps — each connect call counts once.
  • Allowed number prefixes — both numbers must start with a prefix allowed for your organisation.
  • The do-not-call list applies to both numbers.
  • Your own numbers cannot be dialled. A number that is one of the business numbers on Lodgestory cannot be customer 1 or customer 2.
  • Ring time: 10 to 120 seconds for each person (30 by default).
  • Talk time: 1 minute to 4 hours (1 hour by default).
  • Rate: connect calls start at a steady pace across Lodgestory; a burst is refused for a second and can be retried.
  • On US numbers, your telephony provider can present the number set on your account instead of the one picked from your pool.

Errors & FAQ

ErrorWhat it meansWhat to do
CONNECT_CALLS_DISABLEDConnect calls are not on for your organisation.Ask your account team.
INVALID_NUMBER, SAME_NUMBERA number is not a full international number, or both are the same.Send numbers like +919876543210.
NUMBER_NOT_ALLOWEDThe number's prefix is not allowed for your organisation (side says which).Ask your account team to allow it.
NUMBER_ON_DNCThe number is on your do-not-call list (side says which).Remove it from the list if the person agreed to be called.
NUMBER_IS_PLATFORM_DIDThe number is a business number on Lodgestory.Use the person's own number.
CALLING_NUMBER_NOT_FOUND, POOL_SPANS_ACCOUNTS, CALLER_ID_NOT_OWNEDThe caller-ID numbers are unknown, on different voice accounts, or no longer yours.Use ids from GET …/numbers, all on one account.
CONNECT_CONCURRENCY_LIMITYour organisation has its limit of connect calls in progress.Retry when one ends.
CONNECT_RATE_LIMITToo many connect calls are starting at this moment.Retry after a second.
VOICE_TIMEOUT, VOICE_ERRORLodgestory Voice did not confirm the call. It may still happen.Follow it with the callLogId in the error, or retry with the same Idempotency-Key — you get that call back, never a second one.
CONNECT_CALLS_UNAVAILABLEConnect calls are not available on your voice service yet. Nothing was dialled.Ask your account team.
IDEMPOTENCY_KEY_REUSEDThe Idempotency-Key was already used for a different request in the last 24 hours.Use a new key for a new call.

Can I place a connect call from the CRM? No — connect calls are placed by your systems through the API, or by an AI assistant connected to your workspace.

Does customer 1 hear ringing while customer 2's phone rings? Yes — they hear what any caller hears: customer 2's ringing or caller tune, or the network's message if that phone is off or busy.

What if customer 1's voicemail answers? Customer 2 is then connected to that voicemail. Keep the first number one that is likely to be answered by a person — for example your team member's phone.

Can customer 2 call back? Yes. If customer 2 calls the number they saw, the call follows that number's normal routing.

API

Place a connect call — POST /api/wp-crm/voice/{organisationId}/calls/connect (Account Owner, Admin or bot user). Send an Idempotency-Key header (1–255 printable characters, no spaces) to make retries safe: the same key with the same request returns the same call for 24 hours (HTTP 200 with Idempotent-Replayed: true); the same key with a different request is refused.

FieldRequiredDescription
fromNumberYesCustomer 1, rung first. International format.
toNumberYesCustomer 2, rung once customer 1 answers.
callingNumberIdsNo1–50 of your numbers to show as caller ID, all on one voice account. Your account's default number when left out.
callerIdStrategyNoROUND_ROBIN (default), RANDOM or STICKY.
callingAccountIdNoThe voice account to call from. Needed when your organisation has more than one and you send no callingNumberIds.
fromRingTimeout, toRingTimeoutNoSeconds each phone rings, 10–120 (default 30).
maxDurationSecNoLongest talk time in seconds, 60–14400 (default 3600).
recordNofalse to skip the recording.
referenceNoYour id for the call: letters, digits, : . _ -, up to 64 characters.
wpCrmChatsIdNoA conversation to show the call in.
{
  "fromNumber": "+919876543210",
  "toNumber": "+919812345678",
  "callingNumberIds": ["b1b2c3d4-0000-0000-0000-000000000001", "b1b2c3d4-0000-0000-0000-000000000002"],
  "callerIdStrategy": "STICKY",
  "maxDurationSec": 1800,
  "reference": "booking-4821"
}

The response (HTTP 201):

{
  "callLogId": "d1e2f3a4-0000-0000-0000-000000000001",
  "status": "INITIATED",
  "callerId": "+918045600001",
  "reference": "booking-4821",
  "skippedCallingNumberIds": []
}

Follow the call with GET /api/wp-crm/voice/{organisationId}/calls/{callLogId} or the call.* webhooks. GET …/calls?callType=connect lists connect calls and GET …/calls?reference=booking-4821 finds one by your reference. End it with POST …/calls/{callLogId}/hangup. The full request and response schemas are in the API reference.

Changelog

  • Oct 2026 — Launch: connect two outside numbers through the API, caller ID from a pool of numbers (in turn, random or sticky), outcomes for each side, recording from the connection, talk-time limit, your own reference, safe retries, and connect calls in Calls, reports, webhooks and AI assistants.

Related modules


Did this page help you?