All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 3s
107 lines
3.3 KiB
Markdown
107 lines
3.3 KiB
Markdown
# Dhiraagu API Documentation
|
|
|
|
Reverse-engineered from traffic captures of the Dhiraagu Easy Pay web service (`dhiraagu.com.mv`).
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Dhiraagu exposes a number-lookup API used by their Easy Pay web page to validate mobile numbers before payment. The API uses a two-step flow:
|
|
|
|
1. **Nonce extraction** — fetch the Easy Pay HTML page and extract a one-time nonce token embedded in the page JavaScript.
|
|
2. **Number lookup** — POST the mobile number with the nonce to the IO API endpoint, which returns the account type and owner name.
|
|
|
|
The nonce is single-use and page-session-specific; it must be re-fetched for each lookup.
|
|
|
|
---
|
|
|
|
## Base URL
|
|
|
|
```
|
|
https://www.dhiraagu.com.mv
|
|
```
|
|
|
|
---
|
|
|
|
## Authentication Model
|
|
|
|
| Value | How obtained | How used |
|
|
|---|---|---|
|
|
| `nonce` | Extracted from Easy Pay page HTML | Sent as `nonce` request header on the lookup POST |
|
|
|
|
No persistent session or login is required. The nonce is valid for a single lookup request.
|
|
|
|
---
|
|
|
|
## Common Request Headers
|
|
|
|
```
|
|
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0
|
|
Origin: https://dhiraagu.com.mv
|
|
```
|
|
|
|
The `User-Agent` header is required; requests without it are rejected by the server.
|
|
|
|
---
|
|
|
|
## Number Lookup Flow
|
|
|
|
```
|
|
Client Server
|
|
| |
|
|
| GET /services/easy-pay | ← fetch page to get nonce
|
|
|----------------------------------------->|
|
|
| 200 OK (HTML page) |
|
|
| var nonce = "feb6acb9-a532-428e-..." |
|
|
|<-----------------------------------------|
|
|
| |
|
|
| POST /api/sdk-dhr-webapi.ashx |
|
|
| ?website_id=CA2BB809... |
|
|
| &sub=dhiraaguIO&act=infoUnlisted |
|
|
| nonce: feb6acb9-a532-428e-... |
|
|
| { "number": "7654321" } |
|
|
|----------------------------------------->|
|
|
| { respStatus: "OK", |
|
|
| serviceDetails: [{prepaidIndicator}], |
|
|
| accountOwnerInfo: { name } } |
|
|
|<-----------------------------------------|
|
|
```
|
|
|
|
---
|
|
|
|
## Result Interpretation
|
|
|
|
| `prepaidIndicator` | Meaning |
|
|
|---|---|
|
|
| `"Y"` | Prepaid — use **Dhiraagu Reload** |
|
|
| `"N"` | Postpaid — use **Dhiraagu Bill Pay** |
|
|
| absent / other | Number not found or unsupported |
|
|
|
|
---
|
|
|
|
## Applicable Numbers
|
|
|
|
Dhiraagu numbers in the Maldives typically start with **7**, but due to **mobile number portability (MNP)**, a subscriber may have ported their number from Ooredoo (originally a 9xxx number) to Dhiraagu — or vice versa. The number prefix alone does not reliably identify the current provider.
|
|
|
|
For this reason, both providers should be tried when looking up an unknown number:
|
|
- If the number starts with **7**, try Dhiraagu first; fall back to Ooredoo if Dhiraagu returns a failed status.
|
|
- If the number starts with **9**, try Ooredoo first; fall back to Dhiraagu if Ooredoo returns no match.
|
|
|
|
The API only returns a valid result for numbers currently on the Dhiraagu network, regardless of what prefix they carry.
|
|
|
|
---
|
|
|
|
## Documents
|
|
|
|
| # | File | Description |
|
|
|---|---|---|
|
|
| 1 | [Number Lookup](01-number-lookup.md) | Validate a Dhiraagu number and determine account type |
|
|
|
|
---
|
|
|
|
|
|
|
|
---
|
|
|
|
> **Next →** [Number Lookup](01-number-lookup.md)
|