API reference
Number lookup
Validate a number and see its country, line type, network, risk and cheapest live price. Prefix-based, free.
BrowseNumber lookup
Look up a phone number
GET/
- Access
- Key optional. A key or token personalises the answer.
- Rate limit
- 60 requests per minute
Validates and formats an E.164 number and tells you what its prefix is on the exchange: country, line type (mobile, fixed, toll free, premium), the network where the rate decks agree, whether it is a blocked or high-risk destination, and the cheapest live public price to reach it by voice and by SMS (the same logic as GET /routes/price-number).
SMS prices are by destination network where the route prices per network: pricing.sms.network says which network the price is for and pricing.sms.countryRate is the price for other or unknown networks. The network is determined from the number's range (ported numbers may be priced at the network the range belongs to).
Prefix-based. No carrier HLR query is made, so the answer cannot tell you whether the number is in service or has been ported. It is free, needs no key (a scoped key needs routes:read), and is limited to 60 lookups a minute per caller. Send the number in international format (+447700900123 or 00447700900123; spaces and dashes are ignored). A malformed number answers 200 with valid: false and a reason.
Parameters
numberrequiredpath · string
Response 200
datarequiredobject
inputrequiredstring · data.input
What you sentvalidrequiredboolean · data.valid
Whether the input is a well-formed E.164 numberreasonrequiredstring | null · data.reason
Why it is not valid, when it is note164requiredstring | null · data.e164
+ followed by digits, e.g. +447700900123internationalFormatrequiredstring | null · data.internationalFormat
+<country code> <rest>, e.g. +44 7700900123countryrequiredobject | null · data.country
isorequiredstring | null · data.country.iso
ISO 3166 alpha-2. null for a shared dial code the decks do not resolve (+1, +7)namerequiredstring · data.country.name
dialCoderequiredstring · data.country.dialCode
basisrequiredstring · data.country.basis
rate_decks when the matching destinations name the country; dial_code otherwiseOne ofrate_decks,dial_codenumberTyperequiredstring · data.numberType
Inferred from the destination names on the rate decks that match the number (prefix-based, not an HLR query)One ofmobile,fixed,toll_free,premium,unknownnumberTypeConfidencerequirednumber · data.numberTypeConfidence
0 to 1: the share of matching decks that agree on numberTypeoperatorrequiredstring | null · data.operator
The network, only when at least three different sellers' decks name the same one for this prefix. Prefix-based: a ported number keeps its original network herenetworkrequiredobject | null · data.network
The mobile network the number's RANGE belongs to, from public number-range data. A ported number keeps its range's network here. null when the range is not knownmccMncrequiredstring | null · data.network.mccMnc
Mobile network code (MCC-MNC), when known, e.g. "234-58"operatorrequiredstring | null · data.network.operator
The network the number range was allocated to, e.g. "Manx Telecom"sourcerequiredstring · data.network.source
range = public number-range dataOne ofrange,hlrmatchedPrefixrequiredstring | null · data.matchedPrefix
The longest dial prefix any live deck matchedriskrequiredobject · data.risk
blockedrequiredboolean · data.risk.blocked
A destination we do not carry (embargoed or platform-blocked)sanctionedrequiredboolean · data.risk.sanctioned
highRiskrequiredboolean · data.risk.highRisk
Premium-rate, or a prefix on our high-risk list (satellite, remote and high-cost destinations often abused for revenue-share fraud)reasonsrequiredstring[] · data.risk.reasons
pricingrequiredobject · data.pricing
voicerequiredobject | null · data.pricing.voice
The cheapest live public route for the number, or null when none serves itraterequiredstring · data.pricing.voice.rate
USD, 6 decimals: per minute for voice, per message for SMScurrencyrequiredstring · data.pricing.voice.currency
One ofUSDunitrequiredstring · data.pricing.voice.unit
One ofmin,msgbillingIncrementrequiredstring | null · data.pricing.voice.billingIncrement
e.g. "60/60"; null when the listing does not state onedestinationrequiredstring · data.pricing.voice.destination
The destination the number matched on that route, e.g. "United Kingdom-Mobile"routeIdrequiredstring (uuid) · data.pricing.voice.routeId
The cheapest public route that serves the number (see GET /routes/{id})routesServingrequiredinteger · data.pricing.voice.routesServing
How many public routes serve the numbernetworkobject | null · data.pricing.voice.network
SMS only: the networkrateis for, when the route prices per network; null otherwisemccMncrequiredstring | null · data.pricing.voice.network.mccMnc
Mobile network code (MCC-MNC) the price is for, e.g. "234-10"; null when unknownoperatorrequiredstring | null · data.pricing.voice.network.operator
Network name from public number-range data, e.g. "O2"sourcerequiredstring · data.pricing.voice.network.source
range = number-range data; none = not determinedOne ofrange,hlr,nonerateBasisrequiredstring · data.pricing.voice.network.rateBasis
network = that network's own rate; all_operators = the route's rate for networks it does not list separately; country = the route's price for other or unknown networksOne ofnetwork,all_operators,countrycountryRatestring | null · data.pricing.voice.countryRate
SMS only: the route's price for other or unknown networks (USD, 6 decimals), when it prices per networksmsrequiredobject | null · data.pricing.sms
The cheapest live public route for the number, or null when none serves itraterequiredstring · data.pricing.sms.rate
USD, 6 decimals: per minute for voice, per message for SMScurrencyrequiredstring · data.pricing.sms.currency
One ofUSDunitrequiredstring · data.pricing.sms.unit
One ofmin,msgbillingIncrementrequiredstring | null · data.pricing.sms.billingIncrement
e.g. "60/60"; null when the listing does not state onedestinationrequiredstring · data.pricing.sms.destination
The destination the number matched on that route, e.g. "United Kingdom-Mobile"routeIdrequiredstring (uuid) · data.pricing.sms.routeId
The cheapest public route that serves the number (see GET /routes/{id})routesServingrequiredinteger · data.pricing.sms.routesServing
How many public routes serve the numbernetworkobject | null · data.pricing.sms.network
SMS only: the networkrateis for, when the route prices per network; null otherwisemccMncrequiredstring | null · data.pricing.sms.network.mccMnc
Mobile network code (MCC-MNC) the price is for, e.g. "234-10"; null when unknownoperatorrequiredstring | null · data.pricing.sms.network.operator
Network name from public number-range data, e.g. "O2"sourcerequiredstring · data.pricing.sms.network.source
range = number-range data; none = not determinedOne ofrange,hlr,nonerateBasisrequiredstring · data.pricing.sms.network.rateBasis
network = that network's own rate; all_operators = the route's rate for networks it does not list separately; country = the route's price for other or unknown networksOne ofnetwork,all_operators,countrycountryRatestring | null · data.pricing.sms.countryRate
SMS only: the route's price for other or unknown networks (USD, 6 decimals), when it prices per networkmethodrequiredstring · data.method
Always prefix: no carrier network query is madeOne ofprefixcachedAtrequiredstring · data.cachedAt
When this answer was computed. Answers are cached for up to 10 minutes
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.