Skip to content

Ledger entryNo. 319619

Least-Cost Routing(LCR)

Also called: Least cost routing · LCR routing · SMS route selection · Quality-weighted routing

Definition
The logic an SMS or voice platform uses to pick an operator route per destination by price, delivery rate and latency, risky if price alone decides.

CPaaS & channels

Mode · router

Work it out

Route ten SMS: check coverage first, or rotate blindly?

10 / 10

Only agents with the required skill are eligible; the least busy of them wins.

Incoming · 0 left

  1. All 10 conversations have been routed.

Conversation 10 of 10 · Skills-based

OTP 4827 · Jio(needs Jio)goes toWaiting queue

Skills: every Jio agent (Direct Jio bind and Aggregator A) is full, so it waits rather than go to someone without Jio.

  • Budget route

    0 of 4 open

    • Unverified
  • Direct Jio bind

    3 of 3 open

    Full
    • Jio
    1. OTP 4821 · Jioneeds Jio
    2. OTP 4823 · Jioneeds Jio
    3. OTP 4825 · Jioneeds Jio
  • Aggregator A

    3 of 3 open

    Full
    • Jio
    • Airtel
    • Vi
    1. OTP 4822 · Airtelneeds Airtel
    2. Alert 914 · Airtelneeds Airtel
    3. Alert 915 · Vineeds Vi
  • Aggregator B

    3 of 3 open

    Full
    • Airtel
    • Vi
    • BSNL
    1. Alert 913 · Vineeds Vi
    2. OTP 4824 · BSNLneeds BSNL
    3. OTP 4826 · Airtelneeds Airtel

Waiting · 1

  1. OTP 4827 · Jioneeds Jio
Same 10 conversations, each strategy
StrategyRoutedWaitingSkill mismatches
Skills-based910
Round-robin1006
Routes stand in for agents, destination networks for skills and spare throughput for capacity. Skills-based routing never touches the unverified budget route and queues rather than misroute; round-robin pushes OTPs onto it.

Conversation 10 of 10, OTP 4827 · Jio: Skills: every Jio agent (Direct Jio bind and Aggregator A) is full, so it waits rather than go to someone without Jio.

What is least-cost routing?

Least-cost routing (LCR) is the decision logic inside an SMS gateway or voice platform that chooses which route carries each message or call. A route is one path to the destination network: a direct bind to the operator, an aggregator that connects onwards, or an international carrier. For every destination — a country and operator, and, because of number portability, the network the number is on today — the platform keeps a table of candidate routes with their price, measured delivery rate, latency and spare capacity, and LCR picks one per message.

The name undersells the hard part. Choosing on price alone is the classic failure: the cheapest route for a destination is often cheap because it terminates through a grey route — SIM boxes or unauthorised interconnects — where delivery reports can be faked, OTPs arrive minutes late or never, and sender IDs are replaced. Mature platforms therefore run quality-weighted LCR. A route must cover the destination network, be compliant for the traffic type, meet a minimum delivery rate and latency and have throughput to spare before price is considered, and the ranking uses cost per delivered message rather than cost per submitted message.

In India the choice is narrower. Domestic commercial SMS must carry a DLT-registered header and content template and travel along a chain of telemarketers the principal entity declared in advance (PE-TM chain binding), so an Indian sender's LCR chooses only among declared, compliant telemarketer and operator paths; anything else is dropped at DLT scrubbing. WhatsApp traffic involves no routing choice at all, which is why messaging teams apply LCR to SMS and voice fallbacks rather than to WhatsApp.

Key takeaways

  • Least-cost routing (LCR) picks, per destination, which operator or aggregator route carries each SMS or call, weighing price against quality.
  • Ranking on price alone drifts traffic onto grey routes that fake delivery reports, delay OTPs or overwrite sender IDs.
  • Sound LCR filters routes on coverage, compliance and minimum delivery rate first, then ranks survivors by cost per delivered message.
  • In India, domestic commercial SMS may only travel declared PE-TM chains, so LCR chooses among compliant paths, not any cheap route.
  • WhatsApp has no route choice: every message goes through Meta's Cloud API, so LCR applies to the SMS and voice legs of a journey.

Why does least-cost routing matter?

Routing decides both the SMS bill and whether OTPs arrive. A route that is a fraction of a paisa cheaper but delivers eight points less costs more per delivered message and loses the sign-ups that never received their code — and because a fake DELIVRD receipt looks identical to a real one, the loss can go unnoticed for weeks. Getting LCR right means a lower effective cost per delivered message, fewer support tickets about missing OTPs and routes that hold up at peak hours.

How does least-cost routing work?

  1. Identify the destination network

    Normalise the number to E.164, then find the operator it is on now. Prefix tables go stale with mobile number portability, so platforms use an HLR lookup or ported-number data for the current network.

  2. Filter to eligible routes

    Keep only routes that cover that network, are compliant for the traffic type (OTP, transactional, promotional), have spare throughput and meet thresholds such as a 95% delivery rate and a 10-second p90 time to delivery report (illustrative values).

  3. Rank by effective cost

    Divide each route's price by its recent delivery rate to get cost per delivered message, and add a latency penalty for time-critical traffic such as OTPs.

  4. Send and read the receipts

    Track SMS delivery report states (DELIVRD, UNDELIV, EXPIRED, REJECTD) and a conversion signal per route. A route whose receipts say delivered while its OTPs are never entered is the signature of fake receipts.

  5. Fail over and rebalance

    When a route's delivery rate drops or it starts timing out, demote it automatically and retry on the next route, with a retry cap so a user never receives the same OTP three times.

In code

Least-cost routing in code

type Route = {
id: string;
networks: string[]; // destination networks this route terminates on
pricePerSms: number; // in your billing currency
dlrRate: number; // delivered ÷ submitted, rolling 24 h
p90DlrSeconds: number; // time to delivery report, 90th percentile
freeTps: number; // spare throughput right now
compliant: boolean; // DLT chain declared / sender ID approved
};
const MIN_DLR = 0.95;
const MAX_P90_OTP = 10;
export function pickRoute(routes: Route[], network: string, isOtp: boolean): Route | null {
const eligible = routes.filter((r) =>
r.compliant &&
r.networks.includes(network) &&
r.freeTps > 0 &&
r.dlrRate >= MIN_DLR &&
(!isOtp || r.p90DlrSeconds <= MAX_P90_OTP));
// Effective cost: what you pay per message that actually arrives,
// plus a small latency penalty for time-critical traffic.
const score = (r: Route) =>
r.pricePerSms / r.dlrRate + (isOtp ? r.p90DlrSeconds * 0.0001 : 0);
return eligible.sort((a, b) => score(a) - score(b))[0] ?? null;
}

Filter on coverage, compliance and quality first; only then rank on price per delivered message.

The figures

Least-cost routing: key facts and limits

Decision unit
Per destination network (country + operator)
Inputs
Price, delivery rate, time to DLR, spare TPS, compliance
Ranking metric
Cost per delivered message = price ÷ delivery rate
Number portability
Prefixes are unreliable; check the current network
India domestic SMS
Declared PE-TM chains only; others rejected since 11 Dec 2024
WhatsApp
No route choice: all traffic goes through Meta's Cloud API

Example: A fintech's OTP routes

A Bengaluru fintech sends about 40,000 OTPs a day to Indian numbers and a few thousand to customers in the Gulf. For India, its SMS gateway chooses between two declared aggregator chains; both are compliant, so the ranking comes down to measured delivery rate and time to delivery report on each operator, refreshed every 15 minutes. For the UAE, a new route quotes a much lower price. The team gives it 5% of traffic as a test and sees 99% DELIVRD receipts but an OTP entry rate 20 points below the incumbent route — the receipts were being generated before termination. The route is removed, and the dashboard switches from cost per sent message to cost per verified OTP.

Costly mistakes

Common mistakes with least-cost routing

  • Ranking on price per sent message

    A route that is cheaper but delivers 85% instead of 98% costs more per delivered message. Rank on price divided by measured delivery rate, and re-measure continuously.

  • Trusting delivery reports blindly

    Grey routes can return DELIVRD for messages that never arrived. Cross-check receipts against a conversion signal such as OTP entry or link clicks, per route and per operator.

  • Routing on number prefixes

    With mobile number portability, a number's original prefix no longer says which operator it is on. Use current network data before choosing a route.

  • Flapping between routes

    Re-ranking on every message with noisy data makes traffic jump between routes and trip operators' throughput limits. Use rolling windows and hysteresis, and test new routes on a small share of traffic first.

Best practices for least-cost routing

  • Report cost per delivered message and cost per verified OTP, not cost per submitted message.
  • Keep at least two compliant routes per major destination so failover has somewhere to go.
  • Give a new route 1–5% of traffic as a canary before trusting it with more.
  • Separate OTP, transactional and promotional traffic: each tolerates latency differently.

LCR FAQs

Is least-cost routing the same as using the cheapest SMS route?
No. Good LCR considers price only after a route passes coverage, compliance and quality checks. Ranking purely on price drifts traffic towards grey routes with fake delivery reports and late OTPs, which raises the real cost per delivered message.
How does least-cost routing work for SMS in India?
It chooses among compliant paths only. Domestic commercial SMS must use a DLT header and template and follow a declared PE-TM chain, so LCR weighs delivery rate and latency across declared telemarketer and operator routes; undeclared paths have been rejected since 11 December 2024.
Does least-cost routing apply to WhatsApp messages?
No. Every WhatsApp Business message goes through Meta's Cloud API and Meta charges per delivered message by category, so there is no route to choose. LCR matters for the SMS or voice legs of a journey, such as an OTP fallback.
Which metrics should an LCR engine track per route?
Delivery rate, time to delivery report, error codes, spare throughput and a downstream conversion signal. The conversion signal, such as OTPs entered or links clicked, is what exposes routes that report delivery without really delivering.

Put LCR to work

InfiQ is an official Meta Business Partner. Start a 7-day free trial — no card needed — and see this running on your own number.