> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate caller-ID coverage before launching a campaign

> Run the per-campaign local-presence coverage audit before the first batch ships — read reachability per destination area code, then swap caller IDs, block a destination, or wait for provisioning to settle.

# Validate caller-ID coverage before launching a campaign

A dialer campaign set to local-presence dialing presents the pool number whose
area code matches the contact's area code. When the pool has no number in that
area code, the dialer falls back to the campaign's default caller ID — silent,
and it costs answer rate on every attempt it touches. The coverage audit turns
that hidden fallback into a report you can act on before the first batch
ships.

**Endpoint:** `GET /api/v1/dialer/campaigns/{id}/caller-id-coverage`

**Dashboard:** open the campaign — the coverage card shows the same report.

Local-presence coverage is about which area codes (NANP region codes) your
sender pool can present. If your pool serves non-North-American destinations,
see [Outbound country coverage matrix for agents](/guides/agent-outbound-country-coverage)
for that wider country-level matrix, and [Manage outbound caller IDs](/guides/voice-caller-ids)
for how numbers get into the pool in the first place.

***

## 1. Audit semantics — reachable vs unreachable per destination

The audit cross-references two sets:

* **What the campaign can present** — every NANP number in the campaign's
  sender pool, plus the campaign default `caller_id_e164`. Each contributes
  its area code to the reachable set. The default counts because it is the
  fallback that dials when no pool number matches.
* **Where the contact list points** — the distinct destination area codes of
  the campaign's active list contacts.

A destination area code is **reachable (covered)** when at least one
presentable number matches it, and **unreachable** otherwise. Unreachable
contacts still dial — they just present the default caller ID instead of a
local one, which is the answer-rate leak the report exists to catch.

Inactive (archived) contacts don't skew the report, and non-NANP destinations
land in a single "no area code" bucket: reported in totals with no
recommendation possible (there is no NANP area code to buy for them).

## 2. When to run it

Run the audit per campaign **before the first batch ships**, while remedying
is still cheap — a campaign in `draft` status qualifies. It belongs in the
same pre-flight pass as the [outbound compliance checklist](/guides/send-gates-preflight-checklist):
that checklist covers wallet, opt-out, quiet hours, frequency caps, and TCPA
gates; this one covers presentation. Re-run it after you change the pool or
reload the contact list.

## 3. Reading the report

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/dialer/campaigns/{campaignId}/caller-id-coverage" \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

The response carries:

| Field                      | Meaning                                                                                                                                                |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `strategy`                 | The campaign's caller-ID strategy (`npa_match` is the local-presence mode, default `single`).                                                          |
| `pool_size`                | Number of sender-pool DIDs on the campaign.                                                                                                            |
| `pool_npas`                | Sorted list of area codes the campaign can present (default + pool).                                                                                   |
| `covered_npa_count`        | Distinct destination area codes the pool covers.                                                                                                       |
| `uncovered_lead_npa_count` | Distinct destination area codes with no local match.                                                                                                   |
| `by_npa`                   | One row per destination area code: `lead_count`, `attempts`, `connected`, `answer_rate` (over the last 30 days), and `covered`. Sorted by lead volume. |
| `recommendations`          | Up to 25 highest-volume uncovered area codes — the buy list.                                                                                           |

Coverage is a **percentage of destination area codes**, not of individual
contacts: with 12 covered and 3 uncovered destination codes, coverage is 80%.
The `recommendations` list ranks uncovered codes by lead volume so the fix
goes to where the contacts actually are.

Very large campaigns are sampled: two flags, `leads_scan_capped` and
`attempts_scan_capped`, mark when the underlying scan passed 200,000 rows, in
which case ranking is approximate and relative coverage still holds.

## 4. Remediation — three moves

Take the response's `recommendations` list and, for each uncovered area code
you care about, pick one of three fixes:

1. **Swap / extend the caller-ID pool.** Buy or port a number in the uncovered
   area code (see [Buy numbers](/guides/buy-numbers)) and add it to the
   campaign pool, or re-point the pool to senders already owned in that area
   code. Verify the sender's status — a `pending` verification row is not yet
   presentable.
2. **Carve the destination into a country/area block.** If the uncovered
   destination isn't worth a local presence, keep it on the campaign but treat
   it as default-caller-ID traffic, or drop it from the list — a deliberate
   carve beats a silent fallback.
3. **Wait for provisioning to settle.** If the number you need was recently
   purchased or the verification step is still `pending` / `verifying`, hold
   the campaign until the sender resolves to `verified` / active, then re-run
   the audit before activating.

After any of the three, re-hit the endpoint and confirm the previously
uncovered row flipped to `covered: true`.

## 5. What 0% coverage means

A campaign where every destination area code resolves as unreachable —
`covered_npa_count: 0` — cannot deliver local presence at all. Every attempt
falls back to the default caller ID, so you ship the campaign's full volume at
fallback answer rates. Worse, if the senders are not merely wrong for the
destination but are actually unverified or unprovisioned, the campaign
launches into an all-fail batch. Treat 0% on a live-presence strategy as a
hard pre-launch block until the pool or the destination list is fixed.

## 6. Pair it with the send-gates checklist

Caller-ID coverage is one section of a complete pre-flight. Walk it alongside
[Outbound compliance pre-flight checklist](/guides/send-gates-preflight-checklist):

* The checklist gates the *right to send* — wallet, opt-out, quiet hours,
  frequency caps, destination eligibility, TCPA window.
* This audit gates the *quality of presentation* — the number each answered
  call shows.

A campaign that passes the checklist but fails the coverage audit still dials;
it dials badly. Run both, in the order the checklist lays out, and re-run
coverage whenever the pool or list moves.

<Note>
  Every control on this page is tenant-owned. Orbit reports what your pool
  covers and what it cannot; choosing senders, carving destinations, and the
  compliance posture of how you present caller ID stays in your workspace.
  Outbound calls still egress only through Orbit's wholesale voice path —
  nothing on this page steers carriers.
</Note>

## See also

* [Outbound compliance pre-flight checklist](/guides/send-gates-preflight-checklist) — the companion gate pass.
* [Manage outbound caller IDs](/guides/voice-caller-ids) — verification lifecycle behind pool senders.
* [Outbound country coverage matrix for agents](/guides/agent-outbound-country-coverage) — country-level destination flags.
* [Buy numbers](/guides/buy-numbers) — add local DIDs to close uncovered area codes.
* [Launch an outbound dialer campaign](/guides/outbound-dialer-campaign) — the full campaign flow this audit guards.
