Multi-Currency

Price in one currency and let the customer pay in another, converted at the day's mid-market rate.

Presentment vs Payment

Every order has two currencies:

  • Presentment currency (currency) — the currency you priced the order in.
  • Payment currency (paymentCurrency) — what the customer is actually charged in. May be the same, or a different currency the customer chooses at checkout.

When the two differ, we convert the total at the locked daily rate and store both amounts plus the rate on the transaction, so the charged amount can never drift between checkout and settlement.

Supported Currencies

CodeCurrencyDecimals
htgHaitian Gourde2
usdUS Dollar2
dopDominican Peso2
clpChilean Peso0

Exchange Rates

Rates are mid-market (no markup), refreshed once per day and applied at the moment the payment currency is finalized. Conversion uses the stored daily rate, so the customer always pays exactly what they saw.

Fixing the Currency

Pass paymentCurrency at init to charge in a specific currency (the rate is locked immediately). Omit it to let the customer pick at checkout among the currencies your enabled methods support — the rate is locked when they choose.

await icone.initPayment({
  action: "purchase",
  referenceId: "order_88",
  currency: "htg",        // priced in gourdes
  paymentCurrency: "usd", // charged in USD at today's rate
  amount: 13000,
  items: [{ name: "Course", quantity: 1, unitPrice: 13000 }],
  successUrl: "https://yourstore.com/thanks",
  cancelUrl: "https://yourstore.com/cart",
});