Send USD → EUR / HKD / GBP in T+0
International payments via SWIFT, SEPA, FPS, and local rails — 30 bps fee, T+0 settlement within the UTC+8 banking window.
Why this is fast
Legacy SWIFT takes 2-5 days because of correspondent banking hops. Soren Pay bridges via USDC: your source amount converts to USDC on chain, our issuing partner then pushes the destination-currency leg to the recipient bank via the local rail. The on-chain hop is the trick — it eliminates the 2-3 correspondent hops.
| Corridor | Rail | ETA | |---|---|---| | USD → EUR | SEPA | ~1 hour | | USD → GBP | FPS | ~30 min | | USD → HKD | FPS (HKD) | ~30 min | | USD → SGD | LOCAL | ~4 hr | | USD → MXN | LOCAL | ~4 hr | | USD → BRL | LOCAL | ~4 hr | | Anywhere → anywhere | SWIFT | T+0 (UTC+8 banking window) |
Quick example
// 1. Get a quote
const quote = await fetch("https://api.sorenpay.com/api/payments/international/quote", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SOREN_API_KEY}` },
body: JSON.stringify({
sourceAsset: "USDC",
amountUsdCents: 1000000, // $10,000
destinationCurrency: "EUR",
destinationCountry: "DE",
}),
}).then(r => r.json());
console.log(`Recipient gets EUR ${(quote.quote.destination_amount / 100).toFixed(2)}`);
console.log(`Fee: $${(quote.quote.fee / 100).toFixed(2)} (${quote.quote.rail})`);
// 2. Confirm + originate
const payment = await fetch("https://api.sorenpay.com/api/payments/international", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SOREN_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
sourceAsset: "USDC",
sourceChain: "polygon",
amountUsdCents: 1000000,
destinationCurrency: "EUR",
destinationCountry: "DE",
beneficiary: {
name: "Acme GmbH",
iban: "DE89370400440532013000",
countryCode: "DE",
},
description: "Q2 vendor payment — Acme GmbH",
}),
}).then(r => r.json());
console.log(`Payment ${payment.payment.id} initiated, ETA ${payment.payment.estimated_settlement_at}`);Quote vs originate
| | Quote | Originate |
|---|---|---|
| Endpoint | /api/payments/international/quote | /api/payments/international |
| Auth | apk_ | apk_ + write:payments |
| Idempotent | No | Yes |
| Ledger impact | None | Source-side hold (debit) |
| Live mode KYB gate | No | Yes |
| Reversible | N/A | On failed webhook → automatic reversal credit |
Supported destination countries
10+ today, growing with our issuing partner's Payments API coverage:
US, GB, EU (DE, FR, NL, ES, IT, …), HK, SG, JP, AU, CA, CH, IN, MX, BR, PH, ID, ZA.
Compliance
- Travel Rule for crypto leg: our issuing partner exchanges originator + beneficiary info per FATF guidance
- AML screening: at each payment, our issuing partner re-screens the beneficiary against OFAC + sanctions
- Tax reporting: your bookkeeping; we export ledger CSV at
/dashboard/treasury