Create a deposit
POST /deposit
Opens a bank-transfer deposit. The response status is SUCCESS, which means the order was created, not that it was paid. Send the payer to address, or show them the receiver bank details yourself.
JPY players must already be registered. An unregistered player fails with 502 and code: "KYC_NOT_REGISTERED".
Request
| Field | Type | Required | Notes |
|---|---|---|---|
amount | number or string | yes | Whole yen for JPY |
channel | string | yes | BANK_TRANSFER |
currency | string | yes | For example JPY |
callbackUrl | string | yes | Receives the final status |
referenceId | string | yes | Your unique order id |
playerId | string | yes | Your player id |
payerAccountName | string | no | Payer name. Katakana is recommended for JPY. |
payerAccount | string | no | |
payerBankCode | string | no | Thai bank codes only (BBL, KBANK, SCB, and others). Omit for JPY. |
timestamp, nonce | yes | See signing |
{
"amount": 50000,
"channel": "BANK_TRANSFER",
"currency": "JPY",
"callbackUrl": "https://merchant.example.com/callbacks/deposit",
"referenceId": "TXN-20261011-001",
"playerId": "player_abc123",
"payerAccountName": "ヤマダ タロウ",
"timestamp": 1791729147,
"nonce": "b9ea6ab75157aa21"
}Samples
The Node.js and Python samples use the current time, so you can run them against sandbox after you replace the placeholder keys and allow-list your IP. The curl sample is the worked example with a fixed timestamp. Refresh timestamp and re-sign before a live call.
API_KEY="YOUR_API_KEY"
SECRET_KEY="YOUR_SECRET_KEY"
BASE_URL="https://api-sandbox.inspay.dev/merchant"
CANONICAL='{"amount":"50000","callbackUrl":"https://merchant.example.com/callbacks/deposit","channel":"BANK_TRANSFER","currency":"JPY","nonce":"b9ea6ab75157aa21","payerAccountName":"\u30e4\u30de\u30c0 \u30bf\u30ed\u30a6","playerId":"player_abc123","referenceId":"TXN-20261011-001","timestamp":"1791729147"}'
SIG=$(printf '%s' "$CANONICAL" | openssl dgst -sha256 -hmac "$SECRET_KEY" -hex | awk '{print $NF}')
curl -sS -X POST "$BASE_URL/deposit" \
-H "Content-Type: application/json" \
-H "x-api-key: $API_KEY" \
-H "x-signature: $SIG" \
--data-binary "$CANONICAL"Response 200
| Field | Notes |
|---|---|
transactionId | InsPay transaction id (UUID) |
providerOrderId | Internal routing reference. Do not depend on it. Coming soonRemoved from merchant responses. |
amount, fee | fee is known at creation |
actualAmount | null until the deposit completes, then amount − fee |
status | SUCCESS (created, not paid) |
message | Informational text |
address | Payment page for the payer: https://pay.inspay.dev/pay/{token} |
receiverAccount, receiverName, receiverBank, receiverBankCode, receiverBankBranch | Bank details the payer transfers to. The payment page shows the same details. |
{
"transactionId": "4598b99d-0e13-4536-926b-a662bb34ac42",
"amount": 50000,
"fee": 2250,
"actualAmount": null,
"status": "SUCCESS",
"message": "Deposit created",
"address": "https://pay.inspay.dev/pay/C6OKm4FR6vVo3XaDn_p6Fn",
"receiverAccount": "1234567",
"receiverName": "カ)エグザンプル",
"receiverBank": "Example Bank(0000)",
"receiverBankCode": null,
"receiverBankBranch": "Example Branch(000)"
}Redirect the payer to address, or render receiverAccount, receiverName, receiverBank, and receiverBankBranch in your own UI. Wait for a COMPLETED callback, or poll POST /transactions, before you credit the player.