Ledger entryNo. 319619
Least-Cost Routing(LCR)
Also called: Least cost routing · LCR routing · SMS route selection · Quality-weighted routing
- CPaaS & channels
- Expert
- Business owners
- Developers
- 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?
Only agents with the required skill are eligible; the least busy of them wins.
Incoming · 0 left
- 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
- Full
Direct Jio bind
3 of 3 open
- Jio
- OTP 4821 · Jioneeds Jio
- OTP 4823 · Jioneeds Jio
- OTP 4825 · Jioneeds Jio
- Full
Aggregator A
3 of 3 open
- Jio
- Airtel
- Vi
- OTP 4822 · Airtelneeds Airtel
- Alert 914 · Airtelneeds Airtel
- Alert 915 · Vineeds Vi
- Full
Aggregator B
3 of 3 open
- Airtel
- Vi
- BSNL
- Alert 913 · Vineeds Vi
- OTP 4824 · BSNLneeds BSNL
- OTP 4826 · Airtelneeds Airtel
Waiting · 1
- OTP 4827 · Jioneeds Jio
| Strategy | Routed | Waiting | Skill mismatches |
|---|---|---|---|
| Skills-based | 9 | 1 | 0 |
| Round-robin | 10 | 0 | 6 |
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?
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.
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).
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.
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.
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 onpricePerSms: number; // in your billing currencydlrRate: number; // delivered ÷ submitted, rolling 24 hp90DlrSeconds: number; // time to delivery report, 90th percentilefreeTps: number; // spare throughput right nowcompliant: 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
- 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.