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:
const response = await admin.paymentLink.create({
title: "Premium Subscription",
total: 9900, // Amount in cents (JMD 99.00)
currency_code: "JMD", // or "USD"
description: "Monthly premium plan"
});⚠️ 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:
// ✓ Good - using integers
const amount = 2550; // $25.50
// ✗ Bad - using floats
const amount = 25.50; // Can cause precision errorsDisplay to Users
Convert to decimal format when displaying to users:
function formatCurrency(cents: number, currency: string): string {
const amount = cents / 100;
const formatters = {
JMD: new Intl.NumberFormat('en-JM', {
style: 'currency',
currency: 'JMD'
}),
USD: new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
})
};
return formatters[currency].format(amount);
}
// Usage
formatCurrency(9900, 'JMD'); // "$99.00"
formatCurrency(2550, 'USD'); // "$25.50"User Input Handling
Convert user input to cents before sending to the API:
function parseCurrencyInput(input: string): number {
// Remove currency symbols and commas
const cleaned = input.replace(/[$,]/g, '');
// Parse as float and convert to cents
const dollars = parseFloat(cleaned);
if (isNaN(dollars)) {
throw new Error('Invalid amount');
}
return Math.round(dollars * 100);
}
// Usage
parseCurrencyInput("$99.99"); // 9999
parseCurrencyInput("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
// Create separate payment links for different currencies
const jmdLink = await admin.paymentLink.create({
title: "Premium Plan",
total: 9900,
currency_code: "JMD"
});
const usdLink = await admin.paymentLink.create({
title: "Premium Plan",
total: 6500, // ~$65 USD equivalent
currency_code: "USD"
});
// Show appropriate link based on customer location
function getPaymentLink(countryCode: string) {
return countryCode === 'US' ? usdLink : jmdLink;
}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
async function getExchangeRate(from: string, to: string): Promise<number> {
const response = await fetch(
`https://api.exchangerate-api.com/v4/latest/${from}`
);
const data = await response.json();
return data.rates[to];
}
async function createMultiCurrencyLinks(
baseAmount: number,
baseCurrency: string
) {
const links = [];
// Create JMD link
links.push(await admin.paymentLink.create({
title: "Premium Plan",
total: baseCurrency === 'JMD' ? baseAmount :
Math.round(baseAmount * await getExchangeRate(baseCurrency, 'JMD')),
currency_code: "JMD"
}));
// Create USD link
links.push(await admin.paymentLink.create({
title: "Premium Plan",
total: baseCurrency === 'USD' ? baseAmount :
Math.round(baseAmount * await getExchangeRate(baseCurrency, 'USD')),
currency_code: "USD"
}));
return links;
}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).
Payment: $100.00 USD
Exchange Rate: 1 USD = 155 JMD
Gross: JMD 15,500
Conversion Fee: JMD -155 (1%)
Transaction Fee: JMD -310 (2%)
────────────────────────────────
Net 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.