4.7 KiB
Payments: Reload, Raastas & Bill Pay
Pay a Dhiraagu or Ooredoo number from the Fahipay wallet. All four services use the same request; only the path differs.
Endpoints
| Service | Endpoint | Activity subtype |
|---|---|---|
| Ooredoo Raastas (prepaid top-up) | POST https://fahipay.mv/actions/payment/ooredoo/recharge/ |
OORCH |
| Ooredoo Bill Pay | POST https://fahipay.mv/actions/payment/ooredoo/billpay/ |
OOBPY |
| Dhiraagu Reload | POST https://fahipay.mv/actions/payment/dhiraagu/recharge/ |
DHRCH |
| Dhiraagu Bill Pay | POST https://fahipay.mv/actions/payment/dhiraagu/billpay/ |
DHBPY |
Which services a number supports comes from the carrier lookups: Dhiraagu and Ooredoo.
Prerequisites
There's no OTP or PIN step. The single POST moves the money.
Request
Headers
| Header | Value |
|---|---|
authid |
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
Content-Type |
multipart/form-data; boundary=<boundary> |
Cookie |
__Secure-sess=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
The official app also sends a set of x-app-* / x-device-* headers and a FahiPay-App/2.0.2 (...) user agent. Thijooree sends okhttp/4.12.0 like its other data calls.
Body (multipart/form-data)
Thijooree builds it with lowercase content-disposition part headers, the way the app sends them (FahipayForm.body).
| Field | Example | Notes |
|---|---|---|
number |
9198026 |
7-digit phone number |
amount |
11 |
MVR. Whole number for Raastas, Dhiraagu Reload and Dhiraagu Bill Pay. Ooredoo Bill Pay takes decimals (10.1 seen) |
lang |
en |
|
version |
2.0.2 |
App version |
build |
329 |
App build |
platform |
app |
The official app sends app. Thijooree sends thijooree |
device[...] |
The standard device fields |
Amount limits
These are enforced in Thijooree before sending (see Transfer Flows):
| Service | Min | Max | Decimals |
|---|---|---|---|
| Raastas | 11 | none | no |
| Ooredoo Bill Pay | 10 | 50,000 | yes |
| Dhiraagu Reload | 8 | 1,000 | no |
| Dhiraagu Bill Pay | 10 | 5,000 | no |
The full amount is taken from the wallet. Raastas then has 8% GST taken out by Ooredoo, so the number is credited less than amount.
curl Example
curl --request POST \
--url 'https://fahipay.mv/actions/payment/ooredoo/recharge/' \
--compressed \
--header 'authid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Cookie: __Secure-sess=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--form 'number=9198026' \
--form 'amount=11' \
--form 'lang=en' \
--form 'version=2.0.2' \
--form 'build=329' \
--form 'platform=thijooree' \
--form 'device[available]=true' \
--form 'device[platform]=Android' \
--form 'device[uuid]=a1b2c3d4e5f60718' \
--form 'device[model]={model}' \
--form 'device[manufacturer]={manufacturer}' \
--form 'device[isVirtual]=false' \
--form 'device[serial]=unknown'
Response
200 OK, application/json.
Success: reload / Raastas
{"title":"Success!","msg":"Transaction successful.","type":"success","tid":"FP202610021957143XKQ"}
Success: Ooredoo Bill Pay
{"title":"Success!","msg":"Transaction successful.","type":"success"}
Success: Dhiraagu Bill Pay
{"title":"Success!","msg":"Transaction will be processed shortly.","type":"success"}
| Field | Description |
|---|---|
type |
success when the payment went through |
title / msg |
Human-readable outcome |
tid |
Fahipay transaction ID. Only returned by the recharge endpoints. Bill pays have one too, but it's only visible in history |
Failure
Not captured yet. Thijooree treats any type other than success as a refusal and shows msg (or title).
In history
The payment shows up in actions/activity/ straight away, with a negative amount:
{
"date": "2026-10-02 19:57:14",
"name": "Ooredoo Raastas",
"details": "Mobile Recharge - 9198026",
"icon": "https://fahipay.mv/images/app/icons/services/oorch.png",
"transaction": "FP202610021957143XKQ",
"type": "payment",
"subtype": "OORCH",
"number": "9198026",
"amount": -11,
"success": 1,
"status": "Success"
}
name / details per service: Ooredoo Raastas / Mobile Recharge - <number>, Ooredoo BillPay / BillPay - <number>, Dhiraagu Reload / Mobile Recharge - <number>, Dhiraagu BillPay / BillPay - <number>.