Number Lookup / HLR API
Query live Home Location Register (HLR) data for any phone number. Resolve carrier, network type, portability, roaming, and reachability before you send SMS, place calls, or onboard users.
Live HLR Queries
Real-time Home Location Register lookups return current carrier, MCC/MNC, and subscriber status from the network.
Carrier & Type Detection
Identify mobile, fixed, VoIP, or unknown network types with the serving carrier name and country context.
Portability Aware
Detect ported numbers so you route SMS, voice, and OTP traffic to the correct destination network.
Roaming & Reachability
Know whether a handset is roaming and whether the number is currently reachable before you send.
Bulk Validation
Clean up to 1,000 numbers per request — ideal for list hygiene, campaign prep, and fraud screening.
Credit-Safe Billing
Every response includes the lookup cost so you can track spend and only pay for successful HLR queries.
<400ms
Single lookup P95
1,000
numbers per request
50/s
per API key
Global
MNO & MVNO networks
Authentication
Authorization: Basic <token>. Auth guide →Look up a single number in one request. Use your dashboard Base64 token with HTTP Basic Auth.
curl -X POST 'https://api.sendexa.co/v1/lookup' \-H 'Content-Type: application/json' \-H 'Authorization: Basic YOUR_DASHBOARD_TOKEN' \-d '{"msisdn": "0244123456","countryCode": "GH"}'
Success response
{"success": true,"code": "LOOKUP_OK","message": "Number lookup completed successfully.","requestId": "REQ-1782001122334","timestamp": "2026-07-12T10:15:22.104Z","data": {"lookupId": "LKP-9f3a2c1b-4e8d-4a71-b2c0-1d9e8f7a6b5c","msisdn": "0244123456","e164": "233244123456","country": "Ghana","countryCode": "GH","carrier": "MTN","networkType": "mobile","ported": false,"roaming": false,"reachable": true,"hlrStatus": "ACTIVE","mcc": "620","mnc": "01","cost": {"amount": 0.008,"currency": "USD"}}}
API Endpoints
/v1/lookupLook up one MSISDN and receive full HLR, carrier, and reachability data in a single response.
/v1/lookup/bulkValidate and enrich up to 1,000 numbers in one request with per-number results and summary stats.
Response fieldsComplete reference for msisdn, e164, carrier, networkType, ported, roaming, hlrStatus, and more.
QuickstartAuthenticate, format numbers correctly, run your first lookup, and integrate into your stack.
Normalized e164, original msisdn, country, and ISO countryCode for consistent storage and routing.
carrier, networkType (mobile | fixed | voip | unknown), mcc, mnc, and ported status.
hlrStatus, reachable, roaming, and per-lookup cost for operational decisions and billing reconciliation.
Full field definitions, enums, and examples are on the Response Fields page.
| hlrStatus | Meaning | Typical action |
|---|---|---|
| ACTIVE | Number is allocated and known active on the network | Safe to message or call |
| ABSENT | Subscriber temporarily not available (handset off/out of coverage) | Retry later; do not permanently drop |
| INACTIVE | Number not currently active or deactivated | Flag for re-verification or suppress |
| INVALID | Number not allocated or format invalid at network layer | Remove from lists; do not send |
| UNKNOWN | HLR could not return a definitive status | Use with other signals; optional retry |
| HTTP | Code | Cause |
|---|---|---|
| 400 | INVALID_MSISDN | Phone number missing, empty, or not parseable |
| 400 | INVALID_COUNTRY_CODE | countryCode is not a valid ISO 3166-1 alpha-2 value |
| 400 | BULK_LIMIT_EXCEEDED | Bulk request contains more than 1,000 numbers |
| 401 | UNAUTHORIZED | Missing or invalid Authorization header |
| 403 | INSUFFICIENT_CREDITS | Account balance too low for the lookup(s) |
| 422 | LOOKUP_FAILED | Upstream HLR provider could not complete the query |
| 429 | RATE_LIMIT_EXCEEDED | Exceeded 50 req/s — implement exponential backoff |
Clean contact databases
Drop invalid and inactive numbers before SMS or voice campaigns to cut cost and improve deliverability.
Carrier-aware routing
Use ported and MCC/MNC data to select the best SMS or voice route and avoid wrong-network fees.
Onboarding checks
Reject VoIP or unreachable numbers during signup, OTP, or payment flows before costly verification steps.
Best Practices
- Prefer E.164 input when you already know the country; otherwise pass local
msisdnwithcountryCode - Cache lookup results for a short TTL (for example 24–72 hours) — HLR data can change when users port or roam
- Use
POST /v1/lookup/bulkfor list cleaning instead of looping single lookups - Gate high-cost channels (international SMS, voice) on
reachable === trueandhlrStatus === "ACTIVE" - Store
lookupIdandrequestIdfor support and billing reconciliation - Implement exponential backoff on HTTP 429 and retry
LOOKUP_FAILEDwith a short delay