BDT interface (Bangladesh)
- Details
- Category: BDT interface (Bangladesh)
This API supports withdrawals to bKash and Nagad wallets.
A successful synchronous response only confirms that the request has been accepted. Confirm the final transfer result using an asynchronous notification or an order inquiry.
Environment: The supplied withdrawal implementation currently uses a sandbox environment. Complete production configuration and integration verification before live use. Use the merchant endpoint and payment_code assigned for your environment.
Endpoint: https://{request-host}/Payment_AddOrder
Method: POST
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Request Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
| mchid | Yes | string | Merchant ID assigned by the payment platform. |
| applydate | Yes | string | Withdrawal request time in yyyy-MM-dd HH:mm:ss format. |
| out_trade_no | Yes | string | Unique merchant order ID. Avoid duplicate submissions. |
| payment_code | Yes | string | Assigned BDT withdrawal product code. Contact support to obtain it. |
| money | Yes | string | Amount in BDT with two decimal places and no thousands separators. Allowed amounts depend on the channel configuration. |
| bankname | Yes | string | Recipient wallet code: "060" for bKash or "280" for Nagad. Send it as a string and preserve leading zeros. |
| accountnumber | Yes | string | Recipient wallet account, maximum 16 characters. Preserve the original value and leading zeros. |
| userid | Yes | string | Transaction user ID. If unavailable, use an alternative such as the player's mobile number. |
| notifyurl | Yes | string | Merchant server URL for asynchronous notifications. See the Withdrawal callback documentation. |
| accountname | Yes | string | Name of the recipient account holder. |
| pay_md5sign | Yes | string | Merchant MD5 signature. The signature field itself is excluded from signing. |
Wallet Codes
| bankname | Wallet |
|---|---|
| 060 | bKash Limited |
| 280 | Nagad Limited |
Use the wallet codes listed above. Send both wallet codes and account numbers as strings to preserve leading zeros.
Signature Rules
- Include the non-empty request parameters, excluding
pay_md5sign. - Sort them by parameter name in ascending ASCII order. Parameter names are case-sensitive.
- Concatenate the parameters as
key=value&key=value. - Append
&key={merchant-md5-key}. - Calculate the MD5 digest of the complete string and convert it to uppercase.
- Send the resulting value as
pay_md5sign.
Use the merchant MD5 key assigned in the merchant portal.
Request Example — bKash
The following JSON illustrates the fields only. Submit the actual request as form data.
Replace assigned values and recalculate the signature. For Nagad, change bankname to "280" and supply the corresponding wallet account.
{
"mchid": "{merchant-id}",
"applydate": "2026-10-13 12:00:00",
"out_trade_no": "BDTOUT202610130001",
"payment_code": "{assigned-withdrawal-product-code}",
"money": "1000.00",
"bankname": "060",
"accountnumber": "01321123456",
"userid": "USER0001",
"notifyurl": "https://merchant.example.com/bdt/withdrawal-notify",
"accountname": "Example User",
"pay_md5sign": "{32-character-uppercase-md5-signature}"
}
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| success | boolean | true: request accepted. false: submission failed. This is not the final transfer status. |
| errCode | string | "0" when accepted. The submission failure response returns "-100". |
| errMsg | string | "Success" when accepted. The submission failure response returns the literal value "faild". |
Accepted Response Example
{
"success": true,
"errCode": "0",
"errMsg": "Success"
}
Submission Failure Example
{
"success": false,
"errCode": "-100",
"errMsg": "faild"
}
Result Confirmation and Integration Notes
- After receiving
success=true, keep the order in a processing state. Do not mark it as paid immediately. - Confirm the final result using the Withdrawal callback notification or the Withdrawal inquiry API.
- Verify notification signatures according to the callback documentation.
- Process
out_trade_noidempotently to prevent duplicate processing. - If a request times out or the result is unknown, inquire about the original order before deciding what to do next. Avoid creating a duplicate transfer.
- Transfer fees are charged to the merchant balance under the current configuration. Actual fees and balance requirements depend on the merchant channel settings.
- Details
- Category: BDT interface (Bangladesh)
This API supports deposits through Nagad and bKash wallets. Choose the wallet using the pay_bankcode assigned in the merchant portal. Both wallets use the same request parameters.
Minimum order amount: 1000.00 BDT
Endpoint: https://{request-host}/Pay_AddOrder.html
Method: POST
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Request Parameters
| Parameter | Required | Included in Signature | Description |
|---|---|---|---|
| pay_memberid | Yes | Yes | Merchant ID assigned by the payment platform. |
| pay_orderid | Yes | Yes | Unique merchant order ID. This is distinct from the platform order ID returned as order_sn. |
| pay_applydate | Yes | Yes | Request time in yyyy-MM-dd HH:mm:ss format. |
| pay_bankcode | Yes | Yes | Assigned Nagad or bKash deposit channel code from Channel Management → Channel Rates in the merchant portal. |
| pay_notifyurl | Yes | Yes | Merchant server URL for asynchronous notifications. See the Deposit callback documentation. |
| pay_callbackurl | Yes | Yes | Merchant browser return URL. A browser redirect does not confirm payment success. |
| pay_userid | Yes | Yes | Transaction user ID. If unavailable, use an alternative such as the player's mobile number. |
| pay_amount | Yes | Yes | Amount in BDT, at least 1000.00. Use a string with two decimal places and no thousands separators. |
| pay_md5sign | Yes | No | Merchant MD5 signature generated using the rules below. |
| type | No | No | json: return the platform checkout URL. string: return the wallet checkout URL. Any other value or omitted: redirect to the wallet checkout page. |
Signature Rules
- Include only non-empty parameters marked Yes in the signature column.
- Sort their names in ascending ASCII order. Parameter names are case-sensitive.
- Concatenate the parameters as
key=value&key=value. - Append
&key={merchant-md5-key}. - Calculate the MD5 digest of the complete string and convert it to uppercase.
- Send the resulting value as
pay_md5sign.
Use the merchant MD5 key assigned in the merchant portal.
Request Example
The following JSON illustrates the fields only. Submit the actual request as form data.
Replace the merchant ID, channel code and notification URLs, then recalculate the signature.
{
"pay_memberid": "{merchant-id}",
"pay_orderid": "BDTIN202610130001",
"pay_applydate": "2026-10-13 12:00:00",
"pay_bankcode": "{assigned-deposit-channel-code}",
"pay_notifyurl": "https://merchant.example.com/bdt/notify",
"pay_callbackurl": "https://merchant.example.com/bdt/return",
"pay_userid": "USER0001",
"pay_amount": "1000.00",
"pay_md5sign": "{32-character-uppercase-md5-signature}",
"type": "json"
}
Response Parameters
Both type=json and type=string return JSON on successful order creation.
| Parameter | Type | Description |
|---|---|---|
| code | string / integer | 1 on success. type=json returns the string "1"; type=string returns the integer 1. Order creation failures use 0. |
| msg | string | Success on successful order creation. Error messages include pay_amount最小金额为1000 (minimum amount is 1000) or 下单失败 (order creation failed). |
| money | string | Order amount in BDT with two decimal places, for example "1000.00". |
| order_sn | string | Order ID generated by the payment platform. |
| payUrl | string | For type=json, the platform checkout URL uses /Pay_Pay_pay.html?orderid={platform-order-id}. For type=string, this is the wallet checkout URL. |
Successful Response Example — type=json
{
"code": "1",
"msg": "Success",
"money": "1000.00",
"order_sn": "20261013120000000001",
"payUrl": "https://{request-host}/Pay_Pay_pay.html?orderid=20261013120000000001"
}
Payment Confirmation and Integration Notes
- A successful order creation response and
payUrlonly confirm that the deposit order has been created. - Confirm payment using the merchant server notification or the Deposit inquiry API.
- Verify notification signatures according to the Deposit callback documentation.
- Process each order idempotently to prevent duplicate credits.
- This API returns
code,moneyandorder_sn. Do not usestatus,pay_amountorpay_orderidto parse the order creation response. - Merchant requests use the MD5 rules above. Merchant notifications follow the callback specification.