Billing and surcharges
Calls cost $0.12 per answered minute, all in. You pay only while a live person is connected to your agent.
What is billed
Billing starts when a live person is connected to your agent and ends when either side hangs up. Each call is rounded up to the next 6 seconds. A 262-second call is billed as 264 seconds, which is $0.528.
Callbacks to your numbers are billed at the inbound rates in the price list. Numbers, number reputation, messaging lines and add-ons are billed as listed.
What is never billed
- Dials that are not answered
- Ringing
- Voicemail, phone trees and screeners dropped by detection
- Canceled and abandoned attempts
- The agent's session and waiting time between calls
What the rate pays for
Each answered minute covers the parts below. None of them is a separate line on your invoice.
| Per answered minute | Amount |
|---|---|
| Carrier voice | $0.030 |
| Mobile termination | $0.015 |
| Answering machine detection | $0.025 |
| Agent phone line | $0.020 |
| Pre-dial checks Before every dial we check the number's line type and whether it is disconnected, your do-not-call list, the lead's local calling hours and state call limits, and that a consent record exists. | $0.020 |
| Smart Recording with 1-year storage | $0.010 |
| Total | $0.12 |
Price list
| SetupKYC and account review, number provisioning, number transfer (porting), caller ID and branded caller ID registration, carrier approval, compliance review, and API and webhook setup with your named engineer. | $2,500one time |
| Subaccount setupThe same setup for each client account. Each subaccount has its own numbers, number reputation, recordings and billing view. | $1,000one time, per subaccount |
| Minimum spendCounts toward usage. | $2,000/ month |
| Inbound call to a local numberRouting to the right agent, agent phone line and Smart Recording included. | $0.06/ min |
| Inbound call to a toll-free numberRouting to the right agent, agent phone line and Smart Recording included. | $0.08/ min |
| Phone tree navigationBilled in 6-second increments. Answering call screeners is part of navigation time. Once a person is connected to your agent, the per-answered-minute rate applies. | $0.08/ min navigating or on hold |
| Local number | $3/ number / month |
| Toll-free number | $6/ number / month |
| 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 |
| Spam cleaningDispute with the analytics engines, re-registration, rest and recheck. Free replacement number if the label is not cleared within 14 days. | $50/ number, one time |
| Transcript, after the callSpeaker-labelled, with summary and outcome fields. | $0.02/ min |
| Live transcript, during the callStreamed in real time. | $0.04/ min |
| Tonality analysisTone, energy, sentiment and talk/listen ratio per speaker. | $0.03/ min analyzed |
| Messaging lineA dedicated number for messaging, separate from your calling numbers. Unlimited iMessage, SMS, MMS and WhatsApp. Calls from the line and number reputation on it are included. | $500/ line / month |
Custom rates from $25,000 a month in usage. Talk to sales.
Surcharges
Carrier charges are passed through at cost with no markup. Taxes and fees are added where the law requires them. Each surcharge is a separate line on the call record and the invoice. Calls to mobile numbers have no surcharge. Mobile termination is part of the per-minute rate.
High-cost destinations
| Price | At carrier cost |
|---|---|
| What it is | Calls to numbers in Alaska, Hawaii and the US territories (Puerto Rico, the US Virgin Islands, Guam, the Northern Mariana Islands and American Samoa), and to a small set of rural exchanges where the local carrier charges more to complete a call. |
| When it applies | The number being called belongs to one of those areas or exchanges. This is known from the number before the call is placed. |
| Example | A 4-minute call to a number in Anchorage is billed at $0.12 per minute, plus the carrier's extra charge for those 4 minutes on its own invoice line. |
Taxes and the Universal Service Fund
| Price | Where they apply |
|---|---|
| What it is | State and local taxes on telecom services, and the federal Universal Service Fund (USF) contribution. The FCC sets the USF rate every quarter. |
| When it applies | On invoices where the law requires them, based on your billing address and the calls on the invoice. |
| Example | An invoice shows calling, numbers and messaging lines, then separate lines for USF and for state tax. |
Invoices
You get one invoice a month, issued on the first day of the month for the month before. Usage counts toward the minimum spend of $2,000 / month. When usage is lower, the difference is on the invoice as minimum_spend_balance. Platforms can also get a separate invoice per subaccount. See Subaccounts.
Each invoice lists every usage line item with its quantity, unit price and amount, then surcharges and taxes on their own lines. pdf_url links to the PDF for 1 hour. Retrieve the invoice again for a new link. status is open, paid, past_due or void. You get invoice.created, invoice.paid and invoice.payment_failed on your webhook.
GET/v1/invoices
curl "https://api.liveleg.dev/v1/invoices?limit=12" \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/invoices?limit=12', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const data = await res.json();import os, requests
data = requests.get(
"https://api.liveleg.dev/v1/invoices",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
params={
"limit": 12,
},
).json() {
"id": "inv_9Lm20Vd",
"object": "invoice",
"account_id": "acc_ridgeline",
"number": "LL-2026-10-0388",
"status": "open",
"period_start": "2026-10-01",
"period_end": "2026-10-31",
"currency": "usd",
"lines": [
{"item": "outbound_minutes", "quantity": 41820.5, "unit": "minute", "unit_price": "0.12", "amount": "5018.46"},
{"item": "local_numbers", "quantity": 120, "unit": "number_month", "unit_price": "3.00", "amount": "360.00"},
{"item": "number_reputation", "quantity": 120, "unit": "number_month", "unit_price": "3.00", "amount": "360.00"},
{"item": "messaging_lines", "quantity": 2, "unit": "line_month", "unit_price": "500.00", "amount": "1000.00"},
{"item": "transcript", "quantity": 38110.2, "unit": "minute", "unit_price": "0.02", "amount": "762.20"}
],
"surcharges": [
{"id": "high-cost", "amount": "3.84"}
],
"minimum_spend": "2000.00",
"minimum_spend_balance": "0.00",
"subtotal": "7504.50",
"tax_lines": [
{"item": "usf", "description": "Universal Service Fund", "amount": "151.20"},
{"item": "state_tax", "description": "Texas telecom tax", "amount": "61.20"}
],
"taxes": "212.40",
"total": "7716.90",
"pdf_url": "https://files.liveleg.dev/invoices/inv_9Lm20Vd.pdf?token=a72Lp4Qx",
"issued_at": "2026-11-01T06:00:00Z",
"due_at": "2026-11-15T00:00:00Z",
"paid_at": null
} Read one invoice with GET /v1/invoices/{id}. The fields are in the Billing API reference.
Usage
Usage is available at any time for the current month and earlier ones, with the same line items as the invoice. Group it by line item, by day or by subaccount. Each billable item also sends usage.recorded when it is recorded.
GET/v1/usage
| Query | Type | Description |
|---|---|---|
fromrequired | date | First day, inclusive, YYYY-MM-DD. |
torequired | date | Last day, inclusive. |
group_by | item | day | account | How rows are grouped. Default item. |
account_id | string | One subaccount. Leave it out for the whole account, subaccounts included. |
item | string | One line item, such as outbound_minutes or transcript. |
curl "https://api.liveleg.dev/v1/usage?from=2026-10-01&to=2026-10-31&group_by=item" \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/usage?from=2026-10-01&to=2026-10-31&group_by=item', {
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const usage = await res.json();import os, requests
usage = requests.get(
"https://api.liveleg.dev/v1/usage",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
params={"from": "2026-10-01", "to": "2026-10-31", "group_by": "item"},
).json() {
"object": "usage",
"from": "2026-10-01",
"to": "2026-10-31",
"data": [
{
"item": "outbound_minutes",
"quantity": 41820.5,
"unit": "minute",
"amount": "5018.46"
},
{
"item": "local_numbers",
"quantity": 120,
"unit": "number_month",
"amount": "360.00"
},
{
"item": "transcript",
"quantity": 38110.2,
"unit": "minute",
"amount": "762.20"
}
],
"has_more": false
} Cost per call
Every call record shows its billed seconds and the rate. amount is the talk time at the per-minute rate. charges lists every charge for the call, including that one and add-ons such as transcripts. total is the sum of charges and surcharges. Unanswered legs are listed on the record with no charge. List call records by date range, agent, dial session or subaccount to match a bill to the calls behind it. See Call records.
GET/v1/call_records/{id}
curl https://api.liveleg.dev/v1/call_records/cal_8Jq2mT4x \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/call_records/cal_8Jq2mT4x', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const data = await res.json();import os, requests
data = requests.get(
"https://api.liveleg.dev/v1/call_records/cal_8Jq2mT4x",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
).json() {
"id": "cal_8Jq2mT4x",
"object": "call",
"account_id": "acc_ridgeline",
"billed_seconds": 264,
"rate_per_minute": "0.12",
"amount": "0.528",
"charges": [
{"item": "outbound_minutes", "quantity": 4.4, "amount": "0.528"},
{"item": "transcript", "quantity": 4.4, "amount": "0.088"}
],
"surcharges": [],
"total": "0.616"
} Included with every account
- A named account engineer
- A shared Slack channel with our team
- Carrier-block escalations answered within 15 minutes during US calling hours
- Recordings kept for 1 year