4.0 KiB
Number Lookup
Validate a Dhiraagu mobile number and determine whether it is prepaid (reload) or postpaid (bill pay).
This is a two-step process: first fetch the Easy Pay page to extract the nonce, then POST the number to the IO API.
Step 1 — Fetch Nonce
Endpoint
GET https://www.dhiraagu.com.mv/services/easy-pay
Request Headers
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0
curl Example
curl --request GET \
--url 'https://www.dhiraagu.com.mv/services/easy-pay' \
--header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0'
Response
The server returns an HTML page. The nonce is embedded in a <script> block:
<script>
var nonce = "feb6acb9-a532-428e-a4d6-c4e5515b4bc3";
...
</script>
Extraction regex:
var nonce = "([^"]+)"
The nonce is a UUID (36-char string). It is tied to this page load and must be used immediately in Step 2.
Step 2 — Number Lookup
Endpoint
POST https://www.dhiraagu.com.mv/api/sdk-dhr-webapi.ashx?website_id=CA2BB809-3A22-485B-A518-DA6B6DE653A5&sub=dhiraaguIO&act=infoUnlisted
Request Headers
| Header | Value |
|---|---|
Content-Type |
application/json |
User-Agent |
Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0 |
nonce |
UUID extracted from Step 1 |
Origin |
https://dhiraagu.com.mv |
Request Body
{
"number": "7654321"
}
| Field | Type | Notes |
|---|---|---|
number |
string |
7-digit Dhiraagu mobile number (local format, no country code) |
curl Example
curl --request POST \
--url 'https://www.dhiraagu.com.mv/api/sdk-dhr-webapi.ashx?website_id=CA2BB809-3A22-485B-A518-DA6B6DE653A5&sub=dhiraaguIO&act=infoUnlisted' \
--header 'Content-Type: application/json' \
--header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0' \
--header 'nonce: feb6acb9-a532-428e-a4d6-c4e5515b4bc3' \
--header 'Origin: https://dhiraagu.com.mv' \
--data '{"number":"7654321"}'
Responses
Success — Prepaid (Reload)
{
"respStatus": "OK",
"serviceDetails": [
{
"prepaidIndicator": "Y",
"serviceType": "GSM"
}
],
"accountOwnerInfo": {
"name": "Ahmed Mohamed",
"accountNo": "7654321"
}
}
| Field | Type | Description |
|---|---|---|
respStatus |
string |
"OK" on success |
serviceDetails[0].prepaidIndicator |
string |
"Y" = prepaid (reload), "N" = postpaid (bill pay) |
accountOwnerInfo.name |
string |
Account holder's full name |
Success — Postpaid (Bill Pay)
Same structure as above, with prepaidIndicator: "N".
{
"respStatus": "OK",
"serviceDetails": [
{
"prepaidIndicator": "N",
"serviceType": "GSM"
}
],
"accountOwnerInfo": {
"name": "Fatima Ali",
"accountNo": "7123456"
}
}
Failure — Number Not Found
{
"respStatus": "FAILED",
"respMessage": "Number not found"
}
respStatus is not "OK". Treat any non-OK status as unsupported.
Failure — Invalid / Expired Nonce
If the nonce is missing, invalid, or has already been used, the server returns an error response (non-OK status or HTTP 4xx). Re-fetch the Easy Pay page to get a fresh nonce.
Result Mapping
prepaidIndicator |
Service |
|---|---|
"Y" |
Dhiraagu Reload |
"N" |
Dhiraagu Bill Pay |
absent / respStatus != "OK" |
Unsupported — fall back to Ooredoo lookup |
Number Portability
Due to mobile number portability (MNP) in the Maldives, a subscriber can port their number between Dhiraagu and Ooredoo while keeping the same number. This means:
- A number starting with 9 (typically Ooredoo) may now be on the Dhiraagu network.
- A number starting with 7 (typically Dhiraagu) may now be on the Ooredoo network.
Always fall back to the other provider's lookup if this API returns a failed/unsupported result, regardless of the number prefix.