Telecom & Communications
SMS Delivery Optimisation API
A one-time code that arrives four minutes late has failed, even though the delivery receipt says it succeeded.
- CPaaS providers
- Messaging platforms
- Fintech and banking apps
- Marketplaces
- Notification infrastructure teams
What your customers would see
example interfaceMockupIllustrative mockup of the interface we would build. Figures shown are examples, not results from a live deployment.
The problem this solves
High-volume SMS is a routing business pretending to be an API call. Behind a single send sits a chain of aggregators and carriers whose quality varies by destination, time of day, sender type and content. The same route that performs well to one country collapses on another, and the receipts that come back are inconsistent enough that measuring it properly is real work.
The failure modes are specific and expensive. Codes that arrive after the verification window has expired. Messages silently filtered by a carrier for looking like spam. Routes that return a delivered receipt having never delivered anything. Sender identifiers blocked in a market without notice. Each shows up as a user who could not sign in, and the support ticket rarely names the route.
Measuring route quality is tractable because you already generate the data: every send produces a receipt, a latency and sometimes a downstream user action that proves the message actually arrived. Turning that exhaust into per-route, per-destination quality estimates is the whole product, and it is the thing most messaging stacks never get around to building.
Who buys this
CPaaS providers, Messaging platforms, Fintech and banking apps, Marketplaces, Notification infrastructure teams
What the API returns
What comes back
- Route quality scores by destination, carrier, sender type and hour
- Delivery probability and expected latency prediction before a send
- Route recommendations with the expected cost and latency trade-off stated
- Fallback sequencing: when to retry, when to switch route, when to move channel
- Silent-failure detection where receipts claim delivery but behaviour says otherwise
- Sender identifier health by market, including blocked and throttled registrations
- Content-pattern flags for messages likely to be filtered
- Per-provider reconciliation so receipts from different aggregators are comparable
Endpoints
| Method | Path | Returns |
|---|---|---|
| POST | /v1/route/recommend | Recommend a route for a pending send |
| POST | /v1/predict | Predicted delivery probability and latency for a send |
| POST | /v1/receipts | Ingest delivery receipts and latencies |
| GET | /v1/routes/quality | Route quality by destination and segment |
| GET | /v1/senders/{id}/health | Sender identifier health by market |
| POST | /v1/fallback/plan | Fallback sequence for a critical message |
Request and response
illustrativeRequest
{
"destination": "+2348031234567",
"message_class": "otp",
"sender_id": "YOURAPP",
"max_latency_s": 20,
"candidate_routes": ["agg_a_direct", "agg_b_wholesale", "agg_c_direct"],
"optimise_for": "delivery_within_window"
}Response
{
"destination_country": "NG",
"message_class": "otp",
"evaluated_at": "2026-10-22T13:22:40Z",
"recommendation": {
"route": "agg_a_direct",
"predicted_delivery_probability": 0.967,
"predicted_latency_p50_s": 4.1,
"predicted_latency_p95_s": 16.8,
"relative_cost_index": 1.42
},
"alternatives": [
{ "route": "agg_b_wholesale", "predicted_delivery_probability": 0.883,
"predicted_latency_p95_s": 61.0, "relative_cost_index": 1.00,
"note": "Cheaper, but p95 exceeds your 20s window" }
],
"sender_health": {
"sender_id": "YOURAPP", "status": "registered", "market": "NG",
"throttle_observed": false
},
"fallback_plan": [
{ "step": 1, "action": "send", "route": "agg_a_direct", "wait_s": 18 },
{ "step": 2, "action": "resend", "route": "agg_c_direct", "wait_s": 20 },
{ "step": 3, "action": "switch_channel", "channel": "voice_otp" }
],
"warnings": [
"Silent-failure rate on agg_b_wholesale to NG is 3.4% — receipts report delivery without corresponding user action"
]
}Where the data comes from
| Your delivery receipts | Status, timestamps and error codes from every aggregator you use — the primary input, and already flowing through your stack |
| Your downstream conversion events | Whether a one-time code was actually entered, which is the only reliable proof a message arrived |
| Aggregator route metadata | Route type, declared carrier connections and pricing, from your provider agreements |
| Sender registration records | Registered sender identifiers per market, since unregistered senders are filtered in a growing number of countries |
| Numbering and carrier reference data | To attribute a destination to the right carrier before a route is chosen |
| Regulatory requirements per market | Content, sender and consent rules that differ by country and constrain what may be sent at all |
The intelligence layer
The difference between a demo and a service is mostly in this section. These are the parts that keep the answer trustworthy once real traffic is hitting it.
- Quality estimation segmented by destination, carrier, route, sender type, message class and hour — aggregate route quality hides exactly the failures that matter
- Receipt normalisation across providers, because error taxonomies differ and raw codes are not comparable
- Silent-failure detection by comparing claimed delivery against downstream user action, which is the only way to catch routes that lie
- Latency modelled as a distribution rather than a mean, since a one-time code is governed by the tail not the average
- Delivery prediction with cost and latency both exposed, so route selection remains your commercial decision
- Sender health tracking per market, with throttling inferred from latency and failure pattern changes
- Continuous recalibration, because route quality changes week to week as aggregators reshuffle carrier connections
- Monitoring for route degradation with alerting, since a quietly failing route is the most expensive thing in a messaging stack
What it changes for the business
Verification completion
One-time codes that arrive inside the window convert; ones that do not become support tickets.
Routing spend
Quality data lets cheaper routes be used where they genuinely perform and avoided where they do not.
Earlier degradation detection
Route problems surface as alerts rather than as a rise in failed logins nobody can explain.
Provider negotiation
Measured per-destination quality gives you something concrete to take into an aggregator conversation.
How it fits into your product
How it embeds
- Called synchronously before a send, or consulted periodically if you prefer static routing with scheduled review
- Receipt ingestion by batch or stream from your existing delivery webhook
- Fallback plans returned as an explicit sequence your sending service can execute
- Deployment inside your own infrastructure, which is normal since message content and destinations rarely leave it
- Route and provider configuration kept in your control — the API recommends, your service decides
- Alerting into your existing monitoring for route degradation and sender blocking
Included in every build
- Authentication, scoped API keys and per-customer rate limiting
- Input validation with predictable, documented error responses
- Versioned endpoints so your integration never breaks without notice
- Request and response logging for audit and dispute resolution
- Latency, error-rate and usage monitoring with alerting
- OpenAPI specification, sandbox environment and client examples
- Backups, failover design and a documented recovery procedure
- An agreed support arrangement once the service is live
How we would build it
about 12 weeksDiscovery and data review
Weeks 1–2
We agree the exact question the API answers, review the sources you already hold, check what has to be licensed, and write down the response contract your developers will code against.
Architecture and prototype
Weeks 3–4
You get a written architecture plus a working endpoint on real data — narrow, but genuinely callable — so integration can be tested against something concrete rather than a document.
Production build
Weeks 5–10
Pipelines, models, storage, authentication, rate limiting, logging, tests and documentation. Security and observability are part of this phase, not a later one.
Integration and handover
Weeks 11–12
We support your engineers through their integration, run load tests at your expected volume, and agree how the service is monitored and supported once it is live.
Commercial models
There is no fixed price list, because the cost is driven by data complexity, integration count, model requirements, request volume and the support level you need. Scope is agreed in writing before development starts.
Fixed-scope prototype
A defined slice of the service, built and priced as one piece of work. The usual first step when the business case needs proving internally.
Fixed-price build
An agreed scope against a written architecture, delivered for an agreed price. Best when the requirements are already clear.
Build then retainer
We build the service, then operate and improve it under a monthly agreement covering monitoring, updates and model maintenance.
White-label product
The service runs under your brand, your domain and your pricing, with MLPivot invisible to your customers.
Questions buyers ask
Do you resell routes or messaging capacity?
No. This is an analytics and decision layer over the providers you already have. We have no commercial interest in which route is chosen, which is precisely why the recommendation is worth something. If you want a messaging provider, this is not that.
How much traffic is needed before predictions are useful?
Enough volume per destination and route to estimate quality with confidence — which for a long-tail country might mean weeks. The API returns wide intervals and says the sample is thin rather than producing a confident number from forty messages. For low-volume destinations, honest reporting of uncertainty is more useful than a prediction.
Can you guarantee delivery rates?
No, and nobody honestly can. Delivery depends on carriers, regulatory filtering, handset state and whether the recipient's phone is switched on. What this does is estimate probability and latency from your observed history and route around measurable degradation. A guaranteed delivery rate is a commercial promise, not a technical one.
Why not just trust delivery receipts?
Because some routes report delivery for messages that never arrived. It is a known problem in wholesale SMS and it is invisible if receipts are your only measure. Comparing claimed delivery against downstream user action is how you find it, which is why the conversion event is part of the data model rather than an optional extra.
What about consent and content rules?
They are real constraints and they differ sharply by market — sender registration requirements, content restrictions, time-of-day limits and consent obligations. We build the market rules you must comply with into the routing layer, but whether a given campaign has a lawful basis to send is your decision and your legal team's, not something an optimiser should decide.
Related blueprints
Phone Number Intelligence API
Validity, line type, carrier and permitted portability data for phone numbers, returned as a lookup your signup and messaging flows can call.
Network Quality Intelligence API
Coverage estimates, outage signals and connection quality measures assembled from permitted measurement data and returned as an API.
Call Fraud Detection API
Suspicious calling pattern detection and abuse signals for carriers, CPaaS providers and platforms exposed to telephony fraud.
Want this built for your platform?
Tell us what your product does today and what you want another system to be able to ask it. We will come back with an approach, a scope and a price.