Create a withdrawal
POST /withdraw
Pays a bank account. Creation returns SUCCESS and holds amount + fee from your available balance. Insufficient balance returns 400. The hold is released if the withdrawal ends FAILED.
destination is the recipient bank code, not the account number. For JPY that is the 4-digit Zengin code, for example 0005. destinationName is the recipient bank name.
Request
| Field | Type | Required | Notes |
|---|---|---|---|
amount, channel, currency, callbackUrl, referenceId, playerId | yes | Same as deposit. channel is BANK_TRANSFER. | |
destination | string | yes | Recipient bank code. JPY: 4-digit Zengin code, for example 0005. |
destinationName | string | yes | Recipient bank name |
destinationAccount | string | yes | Account number |
destinationAccountName | string | yes | Account holder. Katakana for JPY. |
destinationBranchCode | string | JPY | Branch code, 3 digits |
destinationBranchName | string | JPY | Branch name |
destinationAccountType | string | no | JPY: 1 savings (default), 2 checking |
destinationBranch | string | no | Legacy single field. Digits are read as the branch code; anything else is the branch name. Prefer destinationBranchCode and destinationBranchName. |
timestamp, nonce | yes | See signing |
withdraw.json
{
"amount": 100000,
"channel": "BANK_TRANSFER",
"currency": "JPY",
"callbackUrl": "https://merchant.example.com/callbacks/withdraw",
"referenceId": "WD-20261011-001",
"playerId": "player_abc123",
"destination": "0005",
"destinationName": "MUFG Bank",
"destinationBranchCode": "001",
"destinationBranchName": "Head Office",
"destinationAccountType": "1",
"destinationAccount": "0987654",
"destinationAccountName": "タナカ ユキ",
"timestamp": 1791729147,
"nonce": "c1d2e3f4"
}Samples
withdraw.sh
API_KEY="YOUR_API_KEY"
SECRET_KEY="YOUR_SECRET_KEY"
BASE_URL="https://api-sandbox.inspay.dev/merchant"
CANONICAL='{"amount":"100000","callbackUrl":"https://merchant.example.com/callbacks/withdraw","channel":"BANK_TRANSFER","currency":"JPY","destination":"0005","destinationAccount":"0987654","destinationAccountName":"\u30bf\u30ca\u30ab \u30e6\u30ad","destinationAccountType":"1","destinationBranchCode":"001","destinationBranchName":"Head Office","destinationName":"MUFG Bank","nonce":"c1d2e3f4","playerId":"player_abc123","referenceId":"WD-20261011-001","timestamp":"1791729147"}'
SIG=$(printf '%s' "$CANONICAL" | openssl dgst -sha256 -hmac "$SECRET_KEY" -hex | awk '{print $NF}')
# Expected with YOUR_SECRET_KEY: 874f023bf0f749af00294362657462cb6d926118f91774623d049fc17432644e
curl -sS -X POST "$BASE_URL/withdraw" \
-H "Content-Type: application/json" \
-H "x-api-key: $API_KEY" \
-H "x-signature: $SIG" \
--data-binary "$CANONICAL"Response 200
transactionId, amount, fee, actualAmount (null until completed, then amount + fee), status (SUCCESS), and message.
providerOrderId may be present today. It is an internal routing reference. Coming soonIt will be removed. Do not depend on it.
SUCCESS means the withdrawal was accepted and the hold was placed. Pay the player out of your own books only after COMPLETED.
Last updated on