Multi-currency Operations
Quick Reference
The problem — why currency conversion causes chargebacks
When a merchant settles only in BRL, international cardholders (EUR/USD) experience a conversion chain: A55 rate → card network rate → issuer markup. Each layer adds cost. If the rate drifts between quote time and settlement, the cardholder's statement shows a higher amount than expected — triggering Mastercard reason code 4834 ("Transaction Amount Differs").
The root cause is not the FX rate itself. It is the gap between the rate shown to the customer and the rate the issuing bank applies on the statement.
Three strategies exist to address this, each with different trade-offs.
Option A — Direct EUR/USD wallet (recommended)
Eliminate the conversion chain entirely. Configure a wallet in EUR or USD. Charges settle natively in the cardholder's currency. The issuing bank sees a domestic-currency transaction — no cross-border markup, no rate drift, no 4834 chargebacks.
How it works
Setup
- Request a EUR or USD wallet from your A55 account manager.
- Use the wallet UUID when creating charges.
- Set
currencytoEURorUSDin the charge request.
Example
- cURL
- Python
curl -X POST 'https://core-manager.a55.tech/api/v1/bank/wallet/charge/' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"wallet_uuid": "YOUR_EUR_WALLET_UUID",
"merchant_id": "YOUR_MERCHANT_ID",
"payer_name": "Customer Name",
"payer_email": "customer@example.com",
"installment_value": 100.00,
"currency": "EUR",
"due_date": "2026-04-30",
"description": "Order #12345",
"type_charge": "credit_card",
"installment_count": 1
}'
import requests
BASE = "https://core-manager.a55.tech/api/v1"
headers = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json",
}
charge_resp = requests.post(f"{BASE}/bank/wallet/charge/", json={
"wallet_uuid": "YOUR_EUR_WALLET_UUID",
"merchant_id": "YOUR_MERCHANT_ID",
"payer_name": "Customer Name",
"payer_email": "customer@example.com",
"installment_value": 100.00,
"currency": "EUR",
"due_date": "2026-04-30",
"description": "Order #12345",
"type_charge": "credit_card",
"installment_count": 1,
}, headers=headers)
charge = charge_resp.json()
print(f"Charge UUID: {charge['charge_uuid']}")
print(f"Amount: €{charge['local_currency']}")
Why this is the best option
| Factor | Direct EUR/USD wallet | BRL wallet with FX conversion |
|---|---|---|
| Conversion chain | None — charge and settlement in same currency | A55 rate → network rate → issuer markup |
| Chargeback risk (4834) | Zero | Low with fresh rates, high with stale rates |
| Cardholder statement | Exact amount shown at checkout | May differ 1.6–4.4% due to bank fees |
| FX API calls needed | None | Yes — must fetch rate before every charge |
| Integration complexity | Same as any charge — just set currency: "EUR" | Additional FX logic, rate caching, re-fetch at confirm |
To enable a EUR or USD wallet, contact your A55 account manager. Wallet provisioning typically takes 1–2 business days.
Option B — FX API conversion
If your settlement currency is BRL but your customers pay in EUR or USD, use the A55 FX API to get real-time mid-market rates, display the converted price, and create the charge in BRL.
This approach works well when combined with best practices (re-fetch rate at confirm, transparent disclosure). The cardholder's issuing bank may still add 1–3% foreign transaction fee — this is standard across Visa and Mastercard networks and rarely triggers disputes.
For the complete FX API guide, see FX Rates.
Key points
- Mid-market rates with zero A55 markup — 8 currencies, 56 pairs.
- ~17-minute cache — re-fetch at the moment of payment confirmation to minimize drift.
- Record the rate in the charge
descriptionfield for audit and dispute defense. - Issuer markup risk: even with a perfect rate, the cardholder's bank adds 1–3% over mid-market. This is disclosed in the cardholder's bank agreement and rarely causes disputes. The critical risk is stale rates creating large discrepancies.
When to use Option B
- Your existing infrastructure settles in BRL and migration to EUR/USD wallet is not immediate.
- You serve customers in multiple currencies beyond EUR/USD (MXN, ARS, CLP, COP, PEN).
- You want to display prices in the customer's currency while keeping BRL settlement.
Option C — Strategic multi-currency diversification
Combine Options A and B. Use direct EUR/USD wallets for your primary international markets and the FX API for other currencies. This approach transforms the chargeback problem into a competitive advantage.
Why learn FX quoting
BRL is one of the most liquid currencies in Latin America. But if you expand to Mexico (MXN), Chile (CLP), Colombia (COP), Peru (PEN), or Argentina (ARS), every currency will have its own conversion dynamics. Learning to manage FX quoting now — while solving the EUR/USD chargeback problem — prepares your platform for multi-country operations.
Recommended architecture
Implementation steps
- Immediately: Request EUR and USD wallets — eliminates chargebacks for your primary international customers.
- In parallel: Integrate the FX API for BRL settlement when serving LATAM customers.
- Over time: As you add MXN, CLP, or COP customers, the FX quoting infrastructure is already in place.
Comparison
| Option A: Direct EUR/USD | Option B: FX API | Option C: Diversification | |
|---|---|---|---|
| Chargeback risk | Zero | Low (with fresh rates) | Zero for EUR/USD, low for others |
| Integration effort | Minimal — same charge API | Moderate — FX logic + re-fetch | Both combined |
| FX cost | None — no conversion | FX fee 1.0–2.5% on settlement | None for EUR/USD, FX fee for others |
| Scalability | EUR/USD only | Any of the 8 supported currencies | Full multi-currency platform |
| Time to implement | 1–2 days (wallet provisioning) | Already available | Phased rollout |
| Best for | Merchants with EUR/USD customers | LATAM multi-currency pricing | Global platforms with diverse customer base |
Best practice recommendations
- Start with Option A if your customers primarily pay in EUR or USD. It eliminates the root cause of chargebacks with zero integration overhead.
- Add Option B when you need to serve customers in other currencies (MXN, CLP, COP, PEN, ARS).
- Always re-fetch the rate at the moment of payment confirmation when using the FX API. See FX Rates.
- Display both currencies at checkout — the original price and the converted amount — regardless of which option you choose.
- Record everything — rate value, fetch timestamp, displayed amount, charged amount — for reconciliation and dispute defense.