Supported Currencies
Learn about currency support, exchange rates, multi-currency payments, and settlement options.
Primary Currencies
Inkress currently supports the following currencies for payments and payouts:
Jamaican Dollar
Code: JMD
Symbol: $
Decimals: 2 (cents)
Example: $1,250.50
Payment Methods:
- Credit/Debit Cards (Visa, Mastercard)
- Bank Transfers (Local)
- Digital Wallets
United States Dollar
Code: USD
Symbol: $
Decimals: 2 (cents)
Example: $12.50
Payment Methods:
- Credit/Debit Cards (International)
- ACH Transfers
- Digital Wallets (PayPal, Stripe)
Setting Payment Currency
When creating a payment link or order, specify the currency using the currency_code field:
1const response = await admin.paymentLink.create({2 title: "Premium Subscription",3 total: 9900, // Amount in cents (JMD 99.00)4 currency_code: "JMD", // or "USD"5 description: "Monthly premium plan"6});⚠️ Amount Format
Always provide amounts in the smallest currency unit (cents). For example, $99.00 JMD should be passed as 9900.
Amount Formatting Best Practices
Store as Integers
Always store and transmit amounts as integers in cents to avoid floating-point precision issues:
1// ✓ Good - using integers2const amount = 2550; // $25.5034// ✗ Bad - using floats5const amount = 25.50; // Can cause precision errorsDisplay to Users
Convert to decimal format when displaying to users:
1function formatCurrency(cents: number, currency: string): string {2 const amount = cents / 100;3 4 const formatters = {5 JMD: new Intl.NumberFormat('en-JM', {6 style: 'currency',7 currency: 'JMD'8 }),9 USD: new Intl.NumberFormat('en-US', {10 style: 'currency',11 currency: 'USD'12 })13 };14 15 return formatters[currency].format(amount);16}1718// Usage19formatCurrency(9900, 'JMD'); // "$99.00"20formatCurrency(2550, 'USD'); // "$25.50"User Input Handling
Convert user input to cents before sending to the API:
1function parseCurrencyInput(input: string): number {2 // Remove currency symbols and commas3 const cleaned = input.replace(/[$,]/g, '');4 5 // Parse as float and convert to cents6 const dollars = parseFloat(cleaned);7 8 if (isNaN(dollars)) {9 throw new Error('Invalid amount');10 }11 12 return Math.round(dollars * 100);13}1415// Usage16parseCurrencyInput("$99.99"); // 999917parseCurrencyInput("1,250.50"); // 125050Multi-Currency Payments
Merchants can accept payments in multiple currencies, but each payment link must specify a single currency. Customers see prices in that currency throughout the checkout flow.
Example: Serving International Customers
1// Create separate payment links for different currencies2const jmdLink = await admin.paymentLink.create({3 title: "Premium Plan",4 total: 9900,5 currency_code: "JMD"6});78const usdLink = await admin.paymentLink.create({9 title: "Premium Plan", 10 total: 6500, // ~$65 USD equivalent11 currency_code: "USD"12});1314// Show appropriate link based on customer location15function getPaymentLink(countryCode: string) {16 return countryCode === 'US' ? usdLink : jmdLink;17}Exchange Rates
Inkress does not automatically convert between currencies. If you need to support multiple currencies, you must:
- Fetch current exchange rates from a service (e.g., exchangerate-api.com)
- Calculate equivalent amounts in each currency
- Create separate payment links for each currency
- Display appropriate links to customers based on their preference
Example Implementation
1async function getExchangeRate(from: string, to: string): Promise<number> {2 const response = await fetch(3 `https://api.exchangerate-api.com/v4/latest/${from}`4 );5 const data = await response.json();6 return data.rates[to];7}89async function createMultiCurrencyLinks(10 baseAmount: number, 11 baseCurrency: string12) {13 const links = [];14 15 // Create JMD link16 links.push(await admin.paymentLink.create({17 title: "Premium Plan",18 total: baseCurrency === 'JMD' ? baseAmount : 19 Math.round(baseAmount * await getExchangeRate(baseCurrency, 'JMD')),20 currency_code: "JMD"21 }));22 23 // Create USD link24 links.push(await admin.paymentLink.create({25 title: "Premium Plan",26 total: baseCurrency === 'USD' ? baseAmount : 27 Math.round(baseAmount * await getExchangeRate(baseCurrency, 'USD')),28 currency_code: "USD"29 }));30 31 return links;32}Settlement & Payouts
Your merchant account has a primary settlement currency (usually JMD). Payments received in different currencies are handled as follows:
Same Currency Settlement
If you receive payments in JMD and your settlement currency is JMD, no conversion occurs. Funds go directly to your available balance.
Cross-Currency Settlement
If you receive payments in USD but your settlement currency is JMD, the funds are converted at the daily exchange rate (minus a 1% conversion fee).
1Payment: $100.00 USD2Exchange Rate: 1 USD = 155 JMD3Gross: JMD 15,5004Conversion Fee: JMD -155 (1%)5Transaction Fee: JMD -310 (2%)6────────────────────────────────7Net to Balance: JMD 15,035Payout Currency
Payouts are always processed in your settlement currency. You cannot request payouts in a different currency than your account's settlement currency.
Fee Structure by Currency
Transaction fees vary slightly by currency and payment method:
| Currency | Payment Method | Transaction Fee | Flat Fee |
|---|---|---|---|
| JMD | Card | 2.0% | - |
| JMD | Bank Transfer | 1.5% | - |
| USD | Card | 2.9% | $0.30 |
| USD | ACH | 0.8% | $5.00 |
Note: These fees are deducted automatically before funds are added to your available balance. The actual fees may vary based on your subscription plan.
Requesting Additional Currencies
We're actively expanding our currency support. If you need to accept payments in a currency not currently supported, please contact our sales team.
Currencies Under Consideration:
Enterprise customers: Custom currency support and preferential exchange rates are available. Contact us to learn more.