Variable Topup
Directly top up a destination phone line with a variable amount. Supported for du and Etisalat topups.
REST over HTTPS with JSON requests and responses. Intended for authorized distributors.
Synchronous operation: the response returns the result directly. Provide a unique externalId; resending the same one returns retrieved: true without re-charging.
Authentication & headers
Every request must include the HTTP headers below, plus Content-Type: application/json on requests that send a body.
| Header | Description |
|---|---|
sessionId | Value provided by Whish. |
token | Value provided by Whish. |
User-Agent | Identifies your app. Use your own details, not Whish's. Format: AppName/version (website; contact-email). Example: AcmeStore/2.1 (https://acme.example; dev@acme.example). |
Environments
| Environment | Base URL | Purpose |
|---|---|---|
| Sandbox | https://api.sandbox.whish.money/itel-service/api | Testing, QA, integration verification. |
| Production | https://api.whish.money/itel-service/api | Live environment for real transactions. |
Response format
All endpoints return HTTP 200 with Content-Type: application/json and a shared envelope. Always branch on the status field in the body, not the HTTP status code.
| Field | Type | Description |
|---|---|---|
status | Boolean | true = success · false = failure. |
code | String | Operation-specific failure code; null on success. |
dialog | Object | Optional title / message to display to the user. |
data | Object | Response payload for the operation; shape varies per endpoint. |
actions / extra | Object | Reserved; typically null. |
Get balance
Returns the real balance of the account.
No parameters. Each session (sessionId) is tied to a single currency, so the balance is always returned in that session's currency. To work in both AED and USD, use a separate session for each.
{
"status": true,
"code": null,
"dialog": null,
"actions": null,
"extra": null,
"data": {
"balance": 999890.646
}
}Post variable topup
Tops up a destination phone line directly. Supported for du and Etisalat topups.
Request body
| Field | Type | Description |
|---|---|---|
externalId | Long | Unique ID provided by the third party (idempotency). |
id | String | Denomination of the requested item (provided by the Whish team). |
countryCode | String | Country code of the phone number. |
msisdn | String | Recipient phone number. |
amount | Double | Amount to transfer. |
{
"externalId": 1234,
"id": 40000,
"countryCode": "971",
"msisdn": "971522222222",
"amount": 50.0
}{
"status": true,
"code": null,
"dialog": {
"title": "Direct Topup",
"message": "The line +971522222222 will be recharged in a bit. Thank you."
},
"actions": null,
"extra": null,
"data": {
"listOfSoldItems": [
{
"transactionId": "20242196",
"service": "DU",
"denomination": "DU MORE TIME (5-500)",
"phone": "+971522222222",
"amount": "50",
"originalAmount": "50 USD",
"help": "Dial *135*xxxxxxxxxxxxxxx# and press ok",
"time": "09:53",
"date": "2026-05-14",
"voided": false
}
]
}
}{
"status": false,
"code": "fail",
"dialog": {
"title": "Error",
"message": "Failed to direct recharge."
},
"actions": null,
"extra": null,
"data": null
}Error codes
| Code | Description |
|---|---|
fail | Failed to direct recharge. |
Sandbox test (id 40000): phone 971522222222 → success; 971544444444 → failure.
Postman & tools
Import the ready-made Postman collection for this API, set your credentials as collection variables (or attach a sandbox / production environment), and call every endpoint without writing code.
⤓ Download collectionAll downloads & environments
In Postman: Import → select the file → choose the Sandbox or Production environment → fill in your credentials. Requests use {{baseUrl}} and the credential variables provided.