Skip to content

Pakistan Payin ​

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

Country & currency

countryCode and currency are inferred from your merchant account (PK / PKR). Do not send them in the create request body.

notifyUrl

notifyUrl is used only for platform → merchant notifications. It is not forwarded to upstream channels. See Webhook guide.

Create payin ​

Create a Pakistan payin order. merchantOrderNo must be unique per merchant.

Endpoint ​

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

Request body ​

FieldTypeRequiredNotes
merchantOrderNostringyesUnique merchant order id
amountstring/numberyesAmount > 0, max 2 decimals
bankCodestringrecommendedChannel code; see payin bankCode enum
notifyUrlstringnoCompletion webhook; no push if empty
remarkstringnoRemark
payer_mobilestringyesRequired. Payer's real Pakistan mobile: 11 digits starting with 03 (e.g. 03001234567). Platform validates format before routing; do not use placeholders or fake numbers
payer_realnamestringrecommendedPayer name
payer_emailstringrecommendedPayer email
payer_id_nostringnoPayer ID (e.g. CNIC)
extJsonobjectnoExtension object; do not use deprecated metadata

Deprecated fields

Do not send countryCode, currency, or metadata. Use payer_* for payer info and extJson for extensions.

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.

PKR payin · payer_mobile

For Pakistan PKR payin, payer_mobile is required and must be the payer's real, active Pakistan mobile number (03 + 9 digits, 11 digits total). Invalid format or fake numbers may cause create failures or channel rejection.

Response data ​

FieldNotes
orderNoPlatform order id (PI prefix)
merchantOrderNoYour order id
amount / feeAmount / netAmountAmount strings
statusOften created or processing initially
payUrlCheckout URL (when routed upstream)
payQrQR code (some channels)
createdAtCreated time

Request example ​

json
{
  "merchantOrderNo": "PKPAYIN20260622001",
  "amount": "1000.00",
  "bankCode": "QRANDLAUNCH",
  "notifyUrl": "https://merchant.example.com/pk/payin/cb",
  "remark": "pay",
  "payer_mobile": "03001234567",
  "payer_realname": "Jack",
  "payer_email": "[email protected]",
  "payer_id_no": "4220112345678",
  "extJson": {}
}

cURL example ​

bash
API_BASE="https://api.soranopro.com"
BODY='{"merchantOrderNo":"PKPAYIN20260622001","amount":"1000.00","bankCode":"QRANDLAUNCH","notifyUrl":"https://merchant.example.com/pk/payin/cb","payer_mobile":"03001234567","payer_realname":"Jack","payer_email":"[email protected]","extJson":{}}'

curl -X POST "${API_BASE}/api/v1/merchant/payin/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": "PI20260622140000888888",
    "merchantOrderNo": "PKPAYIN20260622001",
    "amount": "1000.00",
    "feeAmount": "10.00",
    "netAmount": "990.00",
    "status": "processing",
    "payUrl": "https://checkout.example.com/pay/xxx",
    "createdAt": "2026-06-22T14:00:00Z"
  }
}

Credits netAmount = amount - fee on completed.

Query payin ​

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

Query (one of): orderNo or merchantOrderNo.

GET signing uses query parameters plus header timestamp and nonce.

Webhook (completed) ​

Full checklist: Webhook guide.

Platform POSTs to your notifyUrl when status=completed.

Headers: Content-Type: application/json, X-Merchant-No, X-Timestamp, X-Nonce, X-Sign (platform RSA2).

json
{
  "orderType": "payin",
  "orderNo": "PI20260622140000888888",
  "merchantOrderNo": "PKPAYIN20260622001",
  "status": "completed",
  "amount": "1000.00",
  "feeAmount": "10.00",
  "netAmount": "990.00",
  "completedAt": 1718202000
}

Respond HTTP 200 with body OK.

  1. Only completed triggers webhooks
  2. Handle duplicates idempotently by merchantOrderNo / orderNo
  3. Verify signature before updating order state

Order status ​

statusNotes
createdCreated
processingIn progress (incl. checkout)
completedSettled + webhook
failedFailed
cancelledCancelled

Released under the MIT License.

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