International payments

Cross-border money movement via our issuing partner's Payments API. 10+ destination currencies via SWIFT, SEPA, FPS, and local rails. T+0 within UTC+8 banking window.

POST /api/payments/international/quote

Bearer apk_
{
"sourceAsset": "USDC",
"amountUsdCents": 100000,
"destinationCurrency": "HKD",
"destinationCountry": "HK"
}

Returns { quote: { destination_amount, rate, fee, rail, estimated_settlement } }.

POST /api/payments/international

Bearer apk_ · write:payments · Idempotent · Live: KYB approved

{
"sourceAsset": "USDC",
"sourceChain": "polygon",
"amountUsdCents": 100000,
"destinationCurrency": "HKD",
"destinationCountry": "HK",
"beneficiary": {
  "name": "Acme HK Ltd",
  "iban": "HK00...",
  "swiftBic": "HSBCHKHH",
  "countryCode": "HK"
},
"description": "Q2 contractor payout"
}

Posts source-side hold via recordDebit. On failed webhook, the hold is reversed.

GET /api/payments/international/[id]

Bearer apk_

Single payment status.

GET /api/payments/international

Bearer apk_

List recent intl payments.

Supported corridors

See src/lib/reap/payment-api.ts SUPPORTED_CORRIDORS. Common ones:

| From | To | Rail | ETA | |---|---|---|---| | USD | HKD | SWIFT | T+0 (banking window) | | USD | EUR | SEPA | ~1 hr | | USD | GBP | FPS | ~30 min | | EUR | USD | SEPA + correspondent | T+0 | | USD | MXN | Local | ~4 hr | | USD | SGD | Local | ~4 hr |

Webhook

/api/webhooks/reap-intl-payment — HMAC-verified status updates. On failed, posts a reversal credit to restore the source-side hold.