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
| Name | Type | Description |
|---|---|---|
| bankId | string | Method _id or code from Available Banks. |
| processId | string | Your unique transaction id. Repeating the same processId returns the existing transaction (idempotent). |
| amount | number | Deposit amount in IQD, e.g. 25000. |
| userId | string | Your user's id in your system. |
| userName | string | Your user's username. |
| name | string | Your user's full name (used by operators to match the incoming transfer). |
| senderName | string optional | Name on the wallet the user will send from, if different. |
| lang | string optional | Localizes 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
| Name | Type | Description |
|---|---|---|
| transactionId | string | Unique id assigned by IraQPay. Use it for status lookups. |
| bankAccountName | string | Recipient name the user must see. |
| bankAccountIban | string | Recipient wallet number / card number / account number (per identifierKind). Field name kept for DeusaPay compatibility. |
| identifierKind | string | PHONE | CARD_NO | ACCOUNT_NO | IBAN | USERNAME — label the recipient field accordingly. |
| expiresAt | string | null | ISO time after which the request expires if no transfer is matched. Show a countdown. A late transfer can still be approved by operators. |
| url | string | null | Hosted payment page (when enabled for your site). null = render the details in your own UI. |
| hash | string | Signature generated by us: base64(HMAC-SHA256(secret, transactionId + bankId + amount)). |
| alreadyPending | boolean | Optional. 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.