Quick start: call detection
ReachCell calls are used for signal, not audio. The two primary patterns are inbound missed-call verification and outbound missed-call delivery.
Pattern A — Inbound missed-call verification
Give the customer your provisioned number. When they call, ReachCell fires a webhook — no answer needed — and your system marks their number as verified at zero cost to the caller.
- Register a webhook for
call.incomingandcall.missedevents. - Share your provisioned number with the customer (e.g. "Call +91XXXXXXXXXX to verify your number").
- Receive
call.incoming— the caller's number is indata.from. - Receive
call.missed— mark the number verified in your system.
No API call is needed to trigger this flow — the customer initiates it.
Pattern B — Outbound missed-call delivery
Your system dials the customer. They see your number on their screen. You receive confirmation when the call rings or is missed — no answer required.
1. Provision a number
Call POST /v1/numbers/provision with the target country_code. The number must be in the same country as the destination.
2. Dial
import requests
r = requests.post(
"https://api.reachcell.com/v1/calls/dial",
headers={
"Authorization": "Bearer ak_your_api_key",
"Content-Type": "application/json",
},
json={
"from": "+91XXXXXXXXXX", # your provisioned number
"to": "+91YYYYYYYYYY", # same-country destination
},
)
call = r.json()["data"]
print(call["call_id"], call["status"]) # status: initiating<?php
$ch = curl_init('https://api.reachcell.com/v1/calls/dial');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ak_your_api_key',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'from' => '+91XXXXXXXXXX',
'to' => '+91YYYYYYYYYY',
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$callId = $body['data']['call_id'];
// status: initiating — monitor via webhook or GET /v1/calls/{callId}const res = await fetch('https://api.reachcell.com/v1/calls/dial', {
method: 'POST',
headers: {
Authorization: 'Bearer ak_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
from: '+91XXXXXXXXXX',
to: '+91YYYYYYYYYY',
}),
});
const { data } = await res.json();
const callId = data.call_id; // status: initiating3. Receive webhook events
Register a webhook for call.* events. You will receive:
call.incoming— device is ringing on the destination's handsetcall.connected— destination answered (if they pick up)call.missed— destination did not answer (most common for verification)call.ended— call connected and then ended
4. Hang up (optional)
For missed-call delivery you typically let the call ring and disconnect naturally. To end it early call POST /v1/calls/{call_id}/hangup.