Caller ID
Each call shows a number from your caller ID pool that is local to the lead. The lead sees the same number on every call. Caller name and branded caller ID are set on your numbers before their first call. Every call is signed for STIR/SHAKEN at no charge.
Local presence selection
For each call we pick the first match in this order:
- The number this lead saw on an earlier call.
- A number in the lead's area code.
- A number in the lead's state.
- The number in the nearest area code.
Ties go to the number with the fewest calls today. Numbers that are resting, over their daily cap or flagged by number reputation are skipped. Toll-free numbers are not picked by local presence. To call from a toll-free number, set from on the call. Pools and daily caps are set up in Numbers.
Each lead keeps the same number
The first number a lead sees becomes that lead's number. Every later call to the lead uses it, and a callback to it reaches the agent who last spoke with them. caller_id on the lead shows the number.
{
"id": "led_44Hc2",
"object": "lead",
"phone": "+15125550147",
"state": "TX",
"caller_id": "+15125550199",
"caller_id_since": "2026-10-21T15:12:40Z"
} A lead gets a new number only when their number is resting, labeled or retired. The next call then uses another number in the same area code, and that number becomes the lead's number from then on. We do not rotate numbers to get around spam labels.
State call limits count calls from all your numbers. In Florida, Oklahoma and Maryland that is 3 sales calls in 24 hours.
Caller name (CNAM)
Caller name is the business name shown on landlines and many mobile phones. It is up to 15 characters of letters, numbers and spaces, and must be your business name. Set it when you buy a number or change it later. Caller name is part of number reputation.
PATCH/v1/numbers/{id}
curl -X PATCH https://api.liveleg.dev/v1/numbers/num_5Tq81 \
-H "Authorization: Bearer $LIVELEG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caller_name": "RIDGELINE ROOF"
}'const res = await fetch('https://api.liveleg.dev/v1/numbers/num_5Tq81', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
caller_name: "RIDGELINE ROOF"
}),
});
const data = await res.json();import os, requests
data = requests.patch(
"https://api.liveleg.dev/v1/numbers/num_5Tq81",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
json={
"caller_name": "RIDGELINE ROOF",
},
).json() {
"id": "num_5Tq81",
"object": "number",
"phone_number": "+15125550199",
"caller_name": "RIDGELINE ROOF",
"caller_name_status": "pending",
"branded_caller_id": "approved",
"stir_shaken": "A"
} A new or changed name is filed the same day. caller_name_status is pending until the filing is accepted, then registered. Each carrier reads the name from its caller name database on its own schedule, so the old name can show on some phones for a few days. The number keeps calling during that time.
| Number reputationDaily spam label monitoring, caller name (CNAM), branded caller ID, registration with the call analytics engines, daily caps, resting and replacement. | $3/ number / month |
Branded caller ID
Branded caller ID shows your business name, logo and a call reason on supported mobile phones. It is set for the account and applies to calls from all its numbers that carry A attestation. We register it after your business is verified at setup. Each change is reviewed again before it shows.
PATCH/v1/branded_caller_id
| Parameters | Type | Description |
|---|---|---|
display_namerequired | string | Your business name as it should appear, up to 32 characters. |
logo_url | string | A square PNG of your logo, at least 256 by 256 pixels. |
call_reason | string | A short reason shown under the name, up to 40 characters. |
curl -X PATCH https://api.liveleg.dev/v1/branded_caller_id \
-H "Authorization: Bearer $LIVELEG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Ridgeline Roofing",
"logo_url": "https://ridgeline.example/logo.png",
"call_reason": "Your roof inspection"
}'const res = await fetch('https://api.liveleg.dev/v1/branded_caller_id', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
display_name: "Ridgeline Roofing",
logo_url: "https://ridgeline.example/logo.png",
call_reason: "Your roof inspection"
}),
});
const data = await res.json();import os, requests
data = requests.patch(
"https://api.liveleg.dev/v1/branded_caller_id",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
json={
"display_name": "Ridgeline Roofing",
"logo_url": "https://ridgeline.example/logo.png",
"call_reason": "Your roof inspection",
},
).json() branded_caller_id on each number is pending, approved or rejected. Phones without branded caller ID support show the caller name.
STIR/SHAKEN attestation
Every call is signed for STIR/SHAKEN at no charge. It is not part of number reputation and has no line on your invoice. Calls from numbers we assigned to your verified account get A attestation. Ported numbers get A after the port completes. stir_shaken on each number shows the attestation its calls carry.
You can use only numbers assigned to your account as caller ID. Every number you call from takes calls back and do-not-call requests. See Inbound calls and callbacks.
Free Caller Registry
The Free Caller Registry must be filed by the business that makes the calls. We prepare the filing and the numbers file, and you submit it. Each new number is added to the next filing. Number reputation also registers your numbers with the call analytics engines.
Subaccounts
Each subaccount has its own numbers. Caller name, branded caller ID and the Free Caller Registry filing use the client's business name. The client files the registry entry for its own business. Liveleg does not appear on caller ID.