Launch offer Get 50% off every monthly plan for a limited time. View plans →

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.

  1. Register a webhook for call.incoming and call.missed events.
  2. Share your provisioned number with the customer (e.g. "Call +91XXXXXXXXXX to verify your number").
  3. Receive call.incoming — the caller's number is in data.from.
  4. 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: initiating

3. Receive webhook events

Register a webhook for call.* events. You will receive:

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.

© 2026 ReachCell · Terms · Privacy · AUP · API v1 · support@reachcell.com