The Number Verifier service is designed to validate mobile phone numbers by checking their live status, current serving operator, country and number portability indicator.
Integration is available via two methods: HTTP API and ENUM API.
The service supports IP- and port-based authentication and offers test endpoints to verify integration correctness.
HTTP API queries require authentication to identify the client, return appropriate results and ensure security.
Authentication is based on the client's IP address, as specified in their profile, and the port used during the query.
Prior to using the HTTP API for Number Verifier queries (in both test and production environments), the client should submit a list of IP addresses to their account manager for authentication purposes.
| Method: | GET / POST |
Production:
| Domain: | hlr.bsg.world |
| Port: | 5011 |
| URL syntax: | https://hlr.bsg.world:5011/msisdn/{NUMBER} |
| URL syntax (optional)*: | https://hlr.bsg.world:5011/msisdn/{NUMBER}/tariff/{TARIFF_ID} |
*HTTP API also allows selecting a tariff by sending its code in the query (optional, only for clients with multiple tariffs).
Testing:
| Domain: | hlr-test.bsg.world |
| Port: | 5013 |
| URL syntax: | https://hlr-test.bsg.world:5013/msisdn/{NUMBER} |
{NUMBER} represents the MSISDN (telephone number in international format) without the “+” sign.
{TARIFF_ID} represents the code of the tariff in the BSG system.
Description:Returns information about a mobile number including its country, MCC/MNC, current serving operator, number portability indicator, live status and additional attributes (refer to Section 5 for details).
Standard query:
https://hlr.bsg.world:5011/msisdn/380123456789
Optional query (with tariff ID):
https://hlr.bsg.world:5011/msisdn/380123456789/tariff/22
https://hlr-test.bsg.world:5013/msisdn/380123456789
Success:
{
"tn": "380123456789"
"cc": "UA"
"cn": "lifecell"
"mcc": "255"
"mnc": "06"
"sii": 1
"npi": false
"nt": "mobile"
"ls": "000"
"rc": "000"
}
Error (only for Reason Code ranges 100 - 199):
{
"tn": "380123456789"
"cc": "UA"
"cn": "lifecell"
"mcc": "255"
"mnc": "06"
"sii": 1
"npi": false
"nt": "mobile"
"ls": "201"
"rc": "120"
}
Error (only for Reason Code ranges 010 - 070):
{
"rc": "010"
}
Note: Refer to Sections 5–7 for details on the definition of the response fields.
ENUM API queries require authentication to identify the client, return appropriate results and ensure security.
Authentication is based on the client's IP address, as specified in their profile, and the port used during the query.
Prior to using the ENUM API for Number Verifier queries (in both test and production environments), the client should submit a list of IP addresses to their account manager for authentication purposes.
Production:
| Server IP address: | 141.95.255.235 |
| Port: | 5001 |
| Query syntax: | dig @141.95.255.235 -p 5001 -t naptr {NUMBER}.enum |
Testing:
| Server IP address: | 141.95.255.235 |
| Port: | 5003 |
| Query syntax: | dig @141.95.255.235 -p 5003 -t naptr {NUMBER}.enum |
{NUMBER} represents the MSISDN (telephone number in international format) without the “+” sign.
Note: Queried MSISDN must be reversed and dot-separated (e.g., 380123456789 → 9.8.7.6.5.4.3.2.1.0.8.3).
Description: Returns information about a mobile number including its country, MCC/MNC, current serving operator, number portability indicator, live status and additional attributes (refer to Section 5 for details).
dig @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
dig @141.95.255.235 -p 5003 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
Success:
; <<>> DiG 9.20.4-3ubuntu1.2-Ubuntu <<>> @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38477
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;9.8.7.6.5.4.3.2.1.0.8.3.enum. IN NAPTR
;; ANSWER SECTION:
9.8.7.6.5.4.3.2.1.0.8.3.enum. 300 IN NAPTR 100 10 "U" "E2U+pstn:tel" "!^.*$!tn:380123456789;cc:UA;cn:lifecell;mcc:255;mnc:06;sii:1;npi:false;nt:mobile;ls:000;rc:000!" .
;; Query time: 32 msec
;; SERVER: 141.95.255.235#5001(141.95.255.235) (UDP)
;; WHEN: Tue Aug 11 11:11:11 EEST 2025
;; MSG SIZE rcvd: 174
Error (only for Reason Code ranges 100 - 199):
; <<>> DiG 9.20.4-3ubuntu1.2-Ubuntu <<>> @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44972
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;9.8.7.6.5.4.3.2.1.0.8.3.enum. IN NAPTR
;; ANSWER SECTION:
9.8.7.6.5.4.3.2.1.0.8.3.enum. 300 IN NAPTR 100 10 "U" "E2U+pstn:tel" "!^.*$!tn:380123456789;cc:UA;cn:lifecell;mcc:255;mnc:06;sii:1;npi:false;nt:mobile;ls:201;rc:120!" .
;; Query time: 38 msec
;; SERVER: 141.95.255.235#5001(141.95.255.235) (UDP)
;; WHEN: Tue Aug 11 11:11:11 EEST 2025
;; MSG SIZE rcvd: 174
Error (only for Reason Code ranges 010 - 070):
; <<>> DiG 9.20.4-3ubuntu1.2-Ubuntu <<>> @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 80127
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;9.8.7.6.5.4.3.2.1.0.8.3.enum. IN NAPTR
;; ANSWER SECTION:
9.8.7.6.5.4.3.2.1.0.8.3.enum. 300 IN NAPTR 100 10 "U" "E2U+pstn:tel" "!^.*$!rc:013!" .
;; Query time: 51 msec
;; SERVER: 141.95.255.235#5001(141.95.255.235) (UDP)
;; WHEN: Tue Aug 11 11:11:11 EEST 2025
;; MSG SIZE rcvd: 78
Note: Refer to Sections 5–7 for details on the definition of the response fields.
Test endpoints are available for verifying your HTTP and ENUM API integration. They let you check authorization, connectivity, and correct query/response formatting.
As in production, access to the test environment is granted only to pre-submitted client IPs.
Note: Refer to Sections 2.2. and 3.2. for details about the test endpoints.
Note: The test responses do not contain real subscriber data and include the following information:
cc — real, provided based on the prefix of the queried number;
the rest of the parameters (cn, mcc, mnc, sii, npi, nt, ls, rc, etc) – not real, test values.
| Field | Type | Description |
|---|---|---|
| tn | string | Telephone Number for which the query was made |
| cc | string | Carrier Country (country code) in ISO 3166-1 alpha-2 format (e.g., UA) |
| cn | string | Carrier Name (operator name) |
| mcc | string | Mobile Country Code |
| mnc | string | Mobile Network Code |
| sii | integer |
Source Information Indicator1 – tn has been queried via an hlr lookup; both live status and live routing information can be provided2 – tn has been queried via an mnp lookup; only live routing information can be provided3 – tn has been queried via BSG routing information data; only routing information from the global numbering database can be provided
|
| npi | boolean |
Number Portability Indicatortrue – the number has been portedfalse – the number has not been ported
|
| nt | string |
Number Type • mobile• landline
|
| ls | string | Live Status (refer to Section 6 for details) |
| rc | string | Reason Code (refer to Section 7 for details) |
The Live Status ls field indicates whether a mobile number is currently active on the network. This service dynamically queries the HLR (Home Location Register) of the target operator via the SS7 network to verify the status of the mobile number and retrieve information about the associated subscriber.
The table below lists current field values and supports future expansion as new live statuses or services become available.
| Code | Description | Comment |
|---|---|---|
| 000 | STATUS: ACTIVE | Queried number is an active mobile subscriber which was confirmed by the HLR of its serving mobile network operator. |
| 201 | STATUS: ABSENT | Queried number is not currently available due to technical troubles on the mobile network, long-term absence due to radio coverage issues or its mobile device is turned off. This is a temporary status and it might change in the future. |
| 202 | STATUS: BARRED | The queried number has service limitations due to billing or technical issues on the network or is not capable of receiving SMS at the moment. This is a temporary status and it might change in the future. |
| 203 | STATUS: INVALID | The queried number is not an active mobile subscriber which was confirmed by the HLR of its serving mobile network operator. |
| 204 | STATUS: ERROR | Query message got no response from the subscriber's serving network operator or response waiting timeout has been reached. This might be both permanent or temporary status depending on the case. |
| 205 | STATUS: UNKNOWN | The query message received an unexpected error from the HLR of the subscriber's serving network operator or specific status of the subscriber cannot be clearly defined at the moment. This might be both permanent or temporary status depending on the case. |
The Reason Code rc field provides additional information relating to how a query was processed within the BSG system. These codes may indicate failure reasons (such as an invalid number length) or provide other relevant information.
The table below lists current field values and supports future expansion as new reason codes or services become available.
| Code | Description | Comment |
|---|---|---|
| 000 | ACTIVE | Successful query |
| 010 | ERROR_AUTH | Authorisation error, check parameters |
| 011 | ERROR_SYSTEM | Internal BSG system error. Typically this is a temporary event |
| 012 | ERROR_INVALID_ MSISDN | Invalid number sequence; unknown country and operator |
| 013 | ERROR_INVALID_ MSISDN_LENGTH | The number length does not match the standard length for the specified country |
| 014 | ERROR_INVALID_ MSISDN_MCC | The number check returned a result with an unexpected MCC for the specified country |
| 015 | ERROR_INVALID_ BY_WRONG_PREFIX | The number is a part of an invalid or unallocated numbering range |
| 016 | ERROR_INVALID_ USER_TARIFF | The query referenced a tariff code that is not assigned to the client, or no tariff is assigned for the service |
| 110 | BARRED | The query returned a "BARRED" live status for the subscriber; a status indicating that a subscriber is blocked from accessing network services due to reasons such as non-payment, fraud, etc. |
| 111 | BARRED_NO_SMS_ SERVICE | The query returned a "BARRED" live status, indicating that the subscriber's SMS service is currently blocked |
| 112 | BARRED_NO_SMS_ SERVICE_SUBSCRIBER_ BLOCKED | The query returned a "BARRED" live status, indicating that the subscriber's SMS service or the subscriber itself is currently blocked |
| 113 | BARRED_SUBSCRIBER_ BLOCKED_OR_UNAVAILABLE_ ROAMING | The query returned a "BARRED" status, meaning the subscriber is blocked or roaming without active service |
| 120 | ABSENT | The query returned an "ABSENT" live status, indicating that the subscriber's device is not currently registered on the network (e.g., switched off or out of coverage) |
| 121 | ABSENT_SUBSCRIBER_ UNAVAILABLE_OR_DEVICE_ SWITCHED_OFF | The query returned an "ABSENT" live status, indicating that the subscriber's device is unavailable, likely due to the phone being switched off |
| 122 | ABSENT_BAD_CONNECTION_ OR_CURRENTLY_UNAVAILABLE | The query returned an "ABSENT" live status, indicating that the subscriber's device is unavailable, likely due to bad radio access |
| 123 | ABSENT_SUBSCRIBER_IS_ IN_BAD_CONNECTION_OR_ CURRENTLY_UNAVAILABLE | The query returned an "ABSENT" live status, indicating that the subscriber's device is unavailable, likely due to network issues |
| 124 | ABSENT_DEVICE_CANNOT_ RECEIVE_SMS_FAILURE_OR_ NETWORK_IS_BUSY | The query returned an "ABSENT" live status, indicating that the subscriber's device failed to receive the message, likely due to network issues |
| 125 | ABSENT_DEVICE_CANNOT_ RECEIVE_SMS_FAILURE_OR_ NO_SPACE_FOR_SMS | The query returned an "ABSENT" live status, indicating that the subscriber's device failed to receive the message, likely due to a device-related issue (e.g., no space for SMS) |
| 126 | ABSENT_DEVICE_CANNOT_ RECEIVE_SMS_DEVICE_FAILURE | The query returned an "ABSENT" live status, indicating that the subscriber's device failed to receive the message, likely due to mobile device issues |
| 127 | ABSENT_MAP_UNEXPECTED_ DATA_VALUE | The query returned an "ABSENT" live status, indicating a MAP protocol error caused by a network issue |
| 128 | ABSENT_INVALID_MSC | The query returned an "ABSENT" live status, indicating a temporary subscriber registration error |
| 129 | ABSENT_SUBSCRIBER_IN_ POOR_COMMUNICATION_CONDITIONS_ OR_CURRENTLY_UNAVAILABLE | The query returned an "ABSENT" live status, indicating that the subscriber's device is unavailable, likely due to network issues or poor radio conditions |
| 130 | ABSENT_GSM_MAPERR_ ABSENT_SUBSC_SM_V2P | The query returned an "ABSENT" live status, indicating a MAP protocol error caused by a network issue |
| 150 | ERROR | The query returned an "ERROR" live status, indicating a subscriber-related issue; BSG routing information provided |
| 151 | ERROR_TIMEOUT_NO_ RESPONSE_FROM_HLR | The query returned an "ERROR" live status, indicating an HLR-related issue; BSG routing information provided |
| 152 | ERROR_TIMEOUT_NO_ RESPONSE_FROM_MSC | The query returned an "ERROR" live status, indicating an MSC-related issue; BSG routing information provided |
| 170 | UNKNOWN | The query returned an "UNKNOWN" live status due to a temporary SS7 network issue preventing subscriber live status determination; BSG assigns "UNKNOWN" whenever it cannot determine the subscriber’s live status as "ACTIVE", "BARRED", "ABSENT", or "INVALID" |
| 171 | UNKNOWN_NO_RESOURCES_ ON_SMSC | The query returned an "UNKNOWN" live status caused by a temporary SMSC issue preventing subscriber live status determination |
| 172 | UNKNOWN_RECEIVED_ SCCP_TCAP_ABORT | The query returned an "UNKNOWN" live status caused by a temporary SS7 protocol issue preventing subscriber live status determination |
| 173 | UNKNOWN_DELIVERY_ ERROR_OF_SMS_EQUIPMENT_ NOT_SM_EQUIPPED | The query returned an "UNKNOWN" live status due to a mobile equipment issue (typically inability to receive SMS) preventing subscriber live status determination |
| 174 | UNKNOWN_ERROR_OF_ SMS_DELIVERY_UNKNOWN_ SERVICE_CENTRE | The query returned an "UNKNOWN" live status due to a mobile network firewall issue preventing subscriber live status determination |
| 175 | UNKNOWN_SMS_DELIVERY_ ERROR_SC_CONGESTION | The query returned an "UNKNOWN" live status caused by a temporary SMSC congestion issue preventing subscriber live status determination |
| 176 | UNKNOWN_SMS_DELIVERY_ ERROR_INVALID_SME_ADDRESS | The query returned an "UNKNOWN" live status caused by a temporary SMSC firewall issue preventing subscriber live status determination |
| 177 | UNKNOWN_SMS_DELIVERY_ ERROR_SUBSCRIBER_NOT_ SC_SUBSCRIBER | The query returned an "UNKNOWN" live status due to a mobile equipment issue (typically inability to receive SMS) preventing subscriber live status determination |
| 179 | UNKNOWN_SYSTEM_ FAILURE_HLR | The query returned an "UNKNOWN" live status due to an HLR issue in the mobile network preventing subscriber live status determination |
| 180 | UNKNOWN_SYSTEM_ FAILURE_MSC | The query returned an "UNKNOWN" live status due to an MSC issue in the mobile network preventing subscriber live status determination |
| 190 | INVALID | The query returned an "INVALID" live status for the subscriber; a status indicating that the queried number is not associated with any subscriber or is missing from the network’s HLR database |
| 191 | INVALID_UNKNOWN_ SUBSCRIBER | The query returned an "INVALID" live status for the subscriber; a status indicating that the queried number is not associated with any subscriber or is missing from the network’s HLR database |