Skip to content

Pakistan Payout ​

Merchant API prefix: /api/v1/merchant. Auth: Signature.

Country & currency

countryCode and currency are inferred from your merchant account. Do not send them on create.

notifyUrl

notifyUrl is for platform → merchant notifications only. See Webhook guide.

Create payout ​

Creates a Pakistan payout. On success, freezes wallet netAmount (amount + fee).

Endpoint ​

ItemValue
MethodPOST
Path/api/v1/merchant/payout/create

Request body ​

FieldTypeRequiredNotes
merchantOrderNostringyesUnique
amountstring/numberyesBeneficiary amount
pay_typestringnoPayout method: BANK_TRANSFER or EWALLET; defaults to BANK_TRANSFER when omitted
bankCodestringyesUppercase channel code; see payout bankCode enum
payee_realnamestringyesPayee name
payee_accountstringyesBank account or wallet number
payee_mobilestringrecommendedPayee mobile
payee_emailstringrecommendedPayee email
payee_id_nostringrecommendedPayee ID (CNIC)
notifyUrlstringnoCompletion webhook; falls back to default callbackUrl
remarkstringnoRemark
extJsonobjectnoExtensions; do not use metadata

Deprecated fields

Do not send countryCode, currency, metadata, or legacy receiverName, receiverAccount, receiverBankCode, receiverBankName, receiverPhone.

Compatibility

The legacy bankName field is still accepted for compatibility, but it is ignored for routing, fee matching, and upstream requests. New integrations should send bankCode only.

Wallet payouts require pay_type

For e-wallet payouts such as JAZZCASH and EASYPAISA, send "pay_type":"EWALLET". The platform matches bankCode against an enabled EWALLET payment tool that supports payouts. For bank transfers, omit pay_type or send "pay_type":"BANK_TRANSFER".

pay_type is part of the request JSON and must be included in the exact request body used to generate X-Sign.

Payee field rules ​

bankCode typePrimary fieldNotes
Wallet (JAZZCASH, EASYPAISA)payee_mobileMust send pay_type=EWALLET; payee_account may duplicate wallet number
Bank (all other codes)payee_accountOmit pay_type or send BANK_TRANSFER; payee_mobile still recommended

Full bankCode list: Appendix.

Response data ​

FieldNotes
orderNoPlatform order id (PO prefix)
merchantOrderNoYour order id
amount / feeAmount / netAmountAmount strings
payoutMethodActual payout method: BANK_TRANSFER or EWALLET
payoutTaskIdLinked payout task (P2P mode)
statusMay be created, processing, market_available, etc.
createdAtCreated time

Request example (wallet) ​

json
{
  "merchantOrderNo": "PKPAYOUT20260622001",
  "amount": "500.00",
  "pay_type": "EWALLET",
  "bankCode": "JAZZCASH",
  "payee_realname": "Ali Khan",
  "payee_account": "03001234567",
  "payee_mobile": "03001234567",
  "payee_email": "[email protected]",
  "payee_id_no": "8220296123456",
  "notifyUrl": "https://merchant.example.com/pk/payout/cb",
  "remark": "payout",
  "extJson": {}
}

Request example (bank) ​

json
{
  "merchantOrderNo": "PKPAYOUT20260622002",
  "amount": "50000.00",
  "pay_type": "BANK_TRANSFER",
  "bankCode": "HBL",
  "payee_realname": "Ali Khan",
  "payee_account": "0123456789012",
  "payee_mobile": "03001234567",
  "payee_email": "[email protected]",
  "payee_id_no": "4220112345678",
  "notifyUrl": "https://merchant.example.com/pk/payout/cb",
  "extJson": {}
}

cURL example ​

bash
API_BASE="https://api.soranopro.com"
BODY='{"merchantOrderNo":"PKPAYOUT20260622001","amount":"500.00","pay_type":"EWALLET","bankCode":"JAZZCASH","payee_realname":"Ali Khan","payee_account":"03001234567","payee_mobile":"03001234567","payee_email":"[email protected]","payee_id_no":"8220296123456","notifyUrl":"https://merchant.example.com/pk/payout/cb","extJson":{}}'

curl -X POST "${API_BASE}/api/v1/merchant/payout/create" \
  -H "Content-Type: application/json" \
  -H "X-Merchant-No: M42" \
  -H "X-Timestamp: 1718198400" \
  -H "X-Nonce: $(uuidgen)" \
  -H "X-Sign: ${SIGN}" \
  -d "${BODY}"

Response example ​

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "orderNo": "PO20260622120000999999",
    "merchantOrderNo": "PKPAYOUT20260622001",
    "amount": "500.00",
    "feeAmount": "5.00",
    "netAmount": "505.00",
    "payoutMethod": "EWALLET",
    "status": "processing",
    "createdAt": "2026-06-22T14:00:00Z"
  }
}

Common errors ​

msg (example)Cause
merchant balance insufficientInsufficient wallet balance
merchant order no already existsDuplicate merchantOrderNo
pay_type must be BANK_TRANSFER or EWALLETUnsupported pay_type value
bankCode is required when pay_type is EWALLETMissing bankCode for an e-wallet payout
EWALLET payment tool not found or payout is disabled for bankCodeNo enabled payout-capable EWALLET tool matches bankCode
upstream bank mapping not foundUnsupported bankCode

Check merchant wallet before create: balance >= netAmount.

Query payout ​

ItemValue
MethodGET
Path/api/v1/merchant/payout/query

Query: orderNo or merchantOrderNo.

Webhook (completed) ​

See Webhook guide.

On status=completed, platform POSTs to notifyUrl or default callbackUrl.

json
{
  "orderType": "payout",
  "orderNo": "PO20260622120000999999",
  "merchantOrderNo": "PKPAYOUT20260622001",
  "status": "completed",
  "amount": "500.00",
  "feeAmount": "5.00",
  "netAmount": "505.00",
  "completedAt": 1718198400
}

Respond HTTP 200 + body OK.

Order status ​

statusNotes
createdCreated
market_availableListed on task market (P2P)
processingIn progress
completedPaid + webhook
failedFailed
cancelledCancelled, freeze released

Released under the MIT License.

2-1-2 Nihonbashi-Hongokucho,Chuo-ku,Tokyo