Whish Money
Whish Money
Partner Integration Guide

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.

Version 1.1WhishJSON over HTTPSAuthor: TecFrac
📱

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.

HeaderDescription
sessionIdValue provided by Whish.
tokenValue provided by Whish.
User-AgentIdentifies 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

EnvironmentBase URLPurpose
Sandboxhttps://api.sandbox.whish.money/itel-service/apiTesting, QA, integration verification.
Productionhttps://api.whish.money/itel-service/apiLive 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.

FieldTypeDescription
statusBooleantrue = success · false = failure.
codeStringOperation-specific failure code; null on success.
dialogObjectOptional title / message to display to the user.
dataObjectResponse payload for the operation; shape varies per endpoint.
actions / extraObjectReserved; typically null.

Get balance

Returns the real balance of the account.

GET/account/balance
ℹ️

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.

Response · 200 success
application/json
{
  "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.

POST/transfer/airtime

Request body

FieldTypeDescription
externalIdLongUnique ID provided by the third party (idempotency).
idStringDenomination of the requested item (provided by the Whish team).
countryCodeStringCountry code of the phone number.
msisdnStringRecipient phone number.
amountDoubleAmount to transfer.
Request
Request body
{
  "externalId": 1234,
  "id": 40000,
  "countryCode": "971",
  "msisdn": "971522222222",
  "amount": 50.0
}
Response · 200 success
application/json
{
  "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
      }
    ]
  }
}
Response failure
application/json
{
  "status": false,
  "code": "fail",
  "dialog": {
    "title": "Error",
    "message": "Failed to direct recharge."
  },
  "actions": null,
  "extra": null,
  "data": null
}

Error codes

CodeDescription
failFailed 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.