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

send-usd-eur.tstypescript
// 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

Related