Skip to main content
Gcashier Pay’s international remittance API lets you send funds to overseas bank accounts in local currencies across a wide range of corridors. Like currency exchange, remittances follow a two-step quote-and-confirm pattern: you first call sp1302 to get a locked rate and a quoteId, then confirm the transfer with sp1303 before the quote expires. Before you can send any remittance, the destination account must be registered as an overseas payee via sp1401.

Overview

1

Register an overseas payee (sp1401)

Submit the beneficiary’s bank account details for compliance review.
2

Get a remittance quote (sp1302)

Lock in a rate specifying either the debit amount or the arrival amount.
3

Confirm the remittance (sp1303)

Execute the transfer using the quoteId before it expires.
4

Receive the result webhook (sp3302)

Gcashier Pay posts the final SUCC or FAIL status to your callback URL.
5

Query remittance history (sp2302)

Look up past transfers by quoteId, order reference, or time range.

Step 1 — Register an Overseas Payee

Call POST /api/sp1401 with payeeType set to OVERSEAS_PAYEE to register the beneficiary’s bank account. Gcashier Pay’s compliance team reviews the registration before issuing a payeeId.
{
  "merOrderNo": "PAYEE20240601010",
  "payeeType": "OVERSEAS_PAYEE",
  "payeeName": "Beijing Supplier Ltd",
  "bankName": "Industrial and Commercial Bank of China",
  "bankAccountNo": "6222021234567890123",
  "swiftCode": "ICBKCNBJ",
  "currency": "CNY",
  "countryCode": "CN",
  "bankAddress": "55 Fuxingmennei Avenue, Xicheng District, Beijing 100032",
  "payeeAddress": "Building A, 10 Zhongguancun Street, Haidian District, Beijing",
  "callbackUrl": "https://api.acme-trade.com/webhooks/gcashier/payee-result"
}

sp3401 Webhook — Payee Approval Result

{
  "bizFlowNo": "BF20240601000801",
  "merOrderNo": "PAYEE20240601010",
  "code": "S00000",
  "message": "Overseas payee approved.",
  "payeeId": "PYE0000567",
  "payeeName": "Beijing Supplier Ltd",
  "status": "ACTIVE"
}
Store the payeeId securely — you’ll need it for every remittance to this beneficiary.

Step 2 — Get a Remittance Quote

Call POST /api/sp1302 to lock in a remittance rate. You can specify either the debitAmount (how much you want to send from your balance) or the arriveAmount (how much the beneficiary must receive). If you provide both, arriveAmount takes precedence.
FieldRequiredDescription
merOrderNoMYour unique reference for this remittance
arriveCurrencyMCurrency the beneficiary receives
debitCurrencyMCurrency debited from your Gcashier Pay balance
payTypeOLOCAL for local bank rails; SWIFT for international SWIFT network
feeDirectionC (SWIFT only)SHA = fees shared; OUR = you bear all fees
accountTypeM1 = bank account
debitAmountCAmount to debit (required if arriveAmount not provided)
arriveAmountCAmount beneficiary receives (takes precedence over debitAmount)
purposeMPayment purpose code (1–31 or 99; see Purpose Codes section)
payeeIdMApproved payee identifier from sp3401
poboFlagOPayment on behalf of indicator
tradeCommentsOFree-text trade description
purposeRemarkOAdditional remarks for custom purpose code 99

Request / Response Example

{
  "merOrderNo": "REM20240601001",
  "arriveCurrency": "CNY",
  "debitCurrency": "USD",
  "payType": "SWIFT",
  "feeDirection": "SHA",
  "accountType": "1",
  "arriveAmount": "72000.00",
  "purpose": "1",
  "payeeId": "PYE0000567",
  "tradeComments": "Payment for goods - Invoice INV-2024-0601"
}
The expireTime is a Unix timestamp in milliseconds. Quotes expire quickly (typically within 30 seconds). Call sp1303 immediately after receiving the quote to avoid expiry.

debitAmount vs arriveAmount

  • Use debitAmount when you know exactly how much you want to spend from your balance and you accept the resulting arrival amount.
  • Use arriveAmount when the beneficiary must receive a precise amount (e.g., to settle a specific invoice in their local currency). If you supply both fields, arriveAmount always takes precedence.

Step 3 — Confirm the Remittance

Once you have a valid quoteId, call POST /api/sp1303 to execute the transfer. The synchronous response confirms acceptance; the definitive settlement result arrives via webhook.
{
  "quoteId": "QT20240601000901",
  "callbackUrl": "https://api.acme-trade.com/webhooks/gcashier/remittance-result"
}
A status of PROCESS is the expected initial state. Your bizFlow is the tracking reference for all subsequent queries and webhook correlation.

Step 4 — Receive the Result Webhook (sp3302)

Gcashier Pay posts the final settlement outcome to your callbackUrl once the transfer is completed or rejected. Return HTTP 200 to acknowledge receipt.
{
  "bizFlow": "BF20240601000902",
  "quoteId": "QT20240601000901",
  "merOrderNo": "REM20240601001",
  "payeeId": "PYE0000567",
  "arriveCurrency": "CNY",
  "debitCurrency": "USD",
  "arriveAmount": "72000.00",
  "debitAmount": "9972.30",
  "rate": "7.2201",
  "status": "SUCC",
  "code": "S00000",
  "message": "Remittance completed. Funds credited to beneficiary.",
  "completedTime": "2024-06-01 18:22:45"
}
StatusMeaning
SUCCFunds have been credited to the beneficiary’s account
FAILTransfer failed — debited amount has been refunded to your balance

Step 5 — Query Remittance History

Use POST /api/sp2302 to retrieve past remittance records. You can query by quoteId, merOrderNo, or a time range.
{
  "quoteId": "QT20240601000901"
}

Payment Purpose Codes

The purpose field is mandatory on every remittance. Select the code that best describes the underlying transaction:
CodePurpose
1Payment for goods
2Payment for services
3Dividend / profit repatriation
4Loan repayment
5Capital injection
6Royalties and licensing fees
7Rental payment
8Consulting fees
9Construction and engineering services
10Insurance premium
11Freight and transport
12Travel and accommodation
13Education fees
14Medical services
15Software and IT services
16Financial services
17Advertising and marketing
18Personal remittance
19Salary and wages
20Commission fees
21Research and development
22Legal and professional fees
23Membership and subscription fees
24E-commerce platform settlement
25Maintenance and repair services
26Telecommunications services
27Cultural and sporting activities
28Government payment
29Donation and aid
30Intellectual property acquisition
31Real estate acquisition
99Other — provide details in purposeRemark
When using purpose code 99, the purposeRemark field becomes mandatory. Provide a clear English description of the payment purpose to avoid compliance delays.

SWIFT Fee Direction

When payType is SWIFT, you must specify feeDirection to determine how correspondent bank charges are allocated:
ValueWho pays correspondent bank fees
SHAShared — you pay the sending bank’s fees; the beneficiary pays receiving bank fees. The beneficiary may receive slightly less than arriveAmount.
OURYou bear all — you cover all fees end-to-end. The beneficiary receives the full arriveAmount.
Use OUR when settling invoices for a precise amount — this guarantees the beneficiary receives exactly what you specified. Use SHA for general transfers where a small fee deduction on arrival is acceptable.

Sandbox Testing

In the Gcashier Pay sandbox, the remittance outcome is determined by a single digit of the amount in your sp1302 request:
Single digit of amountSimulated result
03SUCC — remittance completes successfully
46FAIL — remittance rejected
79No action — transfer stays in PROCESS state
For example, an arriveAmount of 72000.00 (last non-zero digit relevant for testing) — use amounts like 1000.00, 2000.00, or 3000.00 to reliably trigger success in the sandbox.