IQIraQPayAPI Reference

Deposit

Create a deposit request using the _id (or code) you received from Available Banks. The response tells you which account the user must pay to.

POST/v1/transactions/deposit

Required attributes

NameTypeDescription
bankIdstringMethod _id or code from Available Banks.
processIdstringYour unique transaction id. Repeating the same processId returns the existing transaction (idempotent).
amountnumberDeposit amount in IQD, e.g. 25000.
userIdstringYour user's id in your system.
userNamestringYour user's username.
namestringYour user's full name (used by operators to match the incoming transfer).
senderNamestring optionalName on the wallet the user will send from, if different.
langstring optionalLocalizes bankName.

Request

curl -X POST "https://api.deuspay.co/v1/transactions/deposit" \
  -H "appKey: $APP_KEY" -H "sign: $SIGN" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "bankId=FIB" --data-urlencode "processId=ORDER-1001" \
  --data-urlencode "amount=25000" --data-urlencode "userId=u-42" \
  --data-urlencode "userName=ahmed77" --data-urlencode "name=Ahmed Al-Jubouri"
const body = new URLSearchParams({ bankId: "FIB", processId: "ORDER-1001", amount: "25000", userId: "u-42", userName: "ahmed77", name: "Ahmed Al-Jubouri" }).toString();
const sign = createHmac("sha256", APP_SECRET).update(body).digest("base64");
const r = await fetch("https://api.deuspay.co/v1/transactions/deposit", { method: "POST", headers: { appKey: APP_KEY, sign, "content-type": "application/x-www-form-urlencoded" }, body });
const { data } = await r.json();
// show data.bankAccountName + data.bankAccountIban + data.amount to the user

Response

{
  "data": {
    "transactionId": "cmv2lqvyn000clzqua7arrfxj",
    "bankId": "cmv2lm9yb00017pn0fvwxdb7z", "bank": "FIB", "bankName": "FIB",
    "amount": 25000, "userId": "u-42", "name": "Ahmed Al-Jubouri", "userName": "ahmed77",
    "processId": "ORDER-1001", "type": "deposit", "convertedName": "ahmedaljubouri",
    "status": "pending",
    "bankAccountName": "Ali Hassan Kareem",
    "bankAccountIban": "07701234567",
    "identifierKind": "PHONE",
    "expiresAt": "2026-10-10T16:52:01.294Z",
    "url": null,
    "hash": "n8+9K3ye9LcCClzpIVLh6DIf4UqrJUGjWmj47UlhXME="
  },
  "status": 200, "responseTime": "82ms", "app_version": "iraqpay-v0.1.0"
}

The deposit model

NameTypeDescription
transactionIdstringUnique id assigned by IraQPay. Use it for status lookups.
bankAccountNamestringRecipient name the user must see.
bankAccountIbanstringRecipient wallet number / card number / account number (per identifierKind). Field name kept for DeusaPay compatibility.
identifierKindstringPHONE | CARD_NO | ACCOUNT_NO | IBAN | USERNAME — label the recipient field accordingly.
expiresAtstring | nullISO time after which the request expires if no transfer is matched. Show a countdown. A late transfer can still be approved by operators.
urlstring | nullHosted payment page (when enabled for your site). null = render the details in your own UI.
hashstringSignature generated by us: base64(HMAC-SHA256(secret, transactionId + bankId + amount)).
alreadyPendingbooleanOptional. true when the user already had a pending deposit: no new request was created and the existing one is returned. Show the same details again.
Tell the user to send exactly amount in a single transfer from their own wallet. Different amounts are matched manually and may be approved for the received amount — your callback's amount is always the final approved value.