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

Primary

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

Supported

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 integers
2const amount = 2550; // $25.50
3
4// ✗ Bad - using floats
5const amount = 25.50; // Can cause precision errors

Display 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}
17
18// Usage
19formatCurrency(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 commas
3 const cleaned = input.replace(/[$,]/g, '');
4
5 // Parse as float and convert to cents
6 const dollars = parseFloat(cleaned);
7
8 if (isNaN(dollars)) {
9 throw new Error('Invalid amount');
10 }
11
12 return Math.round(dollars * 100);
13}
14
15// Usage
16parseCurrencyInput("$99.99"); // 9999
17parseCurrencyInput("1,250.50"); // 125050

Multi-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 currencies
2const jmdLink = await admin.paymentLink.create({
3 title: "Premium Plan",
4 total: 9900,
5 currency_code: "JMD"
6});
7
8const usdLink = await admin.paymentLink.create({
9 title: "Premium Plan",
10 total: 6500, // ~$65 USD equivalent
11 currency_code: "USD"
12});
13
14// Show appropriate link based on customer location
15function 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:

  1. Fetch current exchange rates from a service (e.g., exchangerate-api.com)
  2. Calculate equivalent amounts in each currency
  3. Create separate payment links for each currency
  4. 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}
8
9async function createMultiCurrencyLinks(
10 baseAmount: number,
11 baseCurrency: string
12) {
13 const links = [];
14
15 // Create JMD link
16 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 link
24 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 USD
2Exchange Rate: 1 USD = 155 JMD
3Gross: JMD 15,500
4Conversion Fee: JMD -155 (1%)
5Transaction Fee: JMD -310 (2%)
6────────────────────────────────
7Net to Balance: JMD 15,035

Payout 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:

CurrencyPayment MethodTransaction FeeFlat Fee
JMDCard2.0%-
JMDBank Transfer1.5%-
USDCard2.9%$0.30
USDACH0.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:

EUR - Euro
GBP - British Pound
CAD - Canadian Dollar
TTD - Trinidad & Tobago Dollar
BBD - Barbadian Dollar
XCD - Eastern Caribbean Dollar

Enterprise customers: Custom currency support and preferential exchange rates are available. Contact us to learn more.