A cross-border refund after the exchange rate moves is a new conversion at the rate on the day you send it, not an undo of the first payment. The card-network convention, which Stripe documents, refunds the exact local amount paid and leaves the FX difference with the business. You choose which currency stays fixed.
The sale ran weeks ago at one rate and the refund runs today at another, so someone carries the gap. Which side is a policy decision made once, in the terms. This guide shows the arithmetic, the three cases and the steps on Lumx.
Why does a refund cost a different amount than the sale?
Because the refund converts at the refund-day rate. Take a marketplace that sold an item for R$ 54,000 and converted it at 5.40 reais per USDC, so the sale was worth 10,000 USDC (assumed round rates, fees left out). The buyer asks for the money back, and the real has moved by the time the refund is sent. The table shows both ways of fixing the amount, in the two directions the rate can go.
A R$ 54,000 sale worth 10,000 USDC, refunded at a refund-day rate that moved 2%, 5% or 10% either way. Illustrative rates, no fees. Results use the exact rate shown.
Refund-day rate (BRL per USDC) | Local fixed: USDC you pay | Against the sale | USD fixed: reais the customer gets | Against R$ 54,000 |
5.508 (rate up 2%, real weaker) | 9,803.92 | You keep 196.08 | R$ 55,080 | Customer gets R$ 1,080 more |
5.292 (rate down 2%, real stronger) | 10,204.08 | You pay 204.08 more | R$ 52,920 | Customer gets R$ 1,080 less |
5.67 (rate up 5%, real weaker) | 9,523.81 | You keep 476.19 | R$ 56,700 | Customer gets R$ 2,700 more |
5.13 (rate down 5%, real stronger) | 10,526.32 | You pay 526.32 more | R$ 51,300 | Customer gets R$ 2,700 less |
5.94 (rate up 10%, real weaker) | 9,090.91 | You keep 909.09 | R$ 59,400 | Customer gets R$ 5,400 more |
4.86 (rate down 10%, real stronger) | 11,111.11 | You pay 1,111.11 more | R$ 48,600 | Customer gets R$ 5,400 less |
Two things follow. The local-fixed column is lopsided: a 10% fall costs 1,111.11 USDC while a 10% rise saves 909.09, because you divide by the rate. The USD-fixed column is symmetric and passes the whole move to the customer, who gets R$ 5,400 less than they paid on the 10% row. The same kind of gap opens between an invoice rate and a payout rate, which is the subject of PTAX or live quote.
Which amount should a refund keep fixed?
The one the customer agreed to pay in. If the price was shown in reais, refund reais. If the invoice named dollars, refund dollars. Everything else follows from that choice, and three policies cover most cases.
Three refund policies, what each fixes, and who absorbs the FX move.
Policy | Fixed amount | Who absorbs the FX move | Fits |
Destination amount | What the customer paid, in their currency | The business | Consumer checkout, marketplaces, anything priced in local currency |
Source amount | What the business received, in dollars or USDC | The customer | B2B invoices issued in USD, contracts that name a dollar amount |
Original rate with a band (a contract construct, not a standard) | The sale's rate, up to a stated move (for example 3%) | The business inside the band, shared beyond it | Negotiated enterprise contracts |
A customer who paid R$ 54,000 and receives R$ 51,300 writes to support whatever the terms say. Carrying FX on the sale itself is a separate decision, covered in pass FX costs or absorb them.
On Lumx the policy maps to a field, because a locked quote takes either the amount to send or the amount to deliver. Destination amount means quoting with the reais as the target. Source amount means quoting with the USDC as the source. A floating rate takes the source amount only, so an exact local refund needs a locked quote. Every refund quote on Lumx is new: a lock lasts at most 5 minutes, so the sale's rate cannot be reused, and a band like the third policy is settled between the parties outside the quote.
Three refund cases and what each does to the rate
"Refund" covers three different events, and only one of them is a new conversion at today's rate.
What happened to the money in each case, and whether the FX move applies.
Case | What happened to the money | Does the FX move apply? | What to do |
Stopped before delivery | The payment has not reached the bank, or the deposit was never converted | Not if nothing converted | Read the transaction status before anything else |
Returned by the bank | The recipient's bank sent the money back after delivery | Only if the return is converted back | Ask the provider which currency and rate apply to the return |
Voluntary refund | The business decides to give the money back after delivery | Yes, at the refund-day rate | Send a new payment with a fresh quote |
The first case is the cheapest, because nothing converted. The second is the least predictable: a returned transfer arrives in local currency and the rate that converts it back is a term of the provider. Whether a stablecoin transfer can be reversed at all is in are stablecoin payments reversible, and why payouts bounce is in why stablecoin payouts get rejected.
On Lumx a voluntary refund is a new payment with its own price. An on-ramp deposit that lands after the transaction expired is not processed and is returned to the original sender on the same rail, with no conversion in between.
A payout that does not complete ends as FAILED and sends an offramp.failed webhook, and the transaction id identifies it for support. Keep the requestId only for a failed API call, where the error response carries it. If the recipient's bank sends a payout back after delivery, treat it as a case for support, since the payout status and the webhook tell you which state the transaction is in.
What card processors do, and why customers expect it
Card processors fix the customer's side. Stripe's localized pricing documentation says that when a currency-converted payment is refunded, the amount the merchant received is converted back at the current rate, so the amount deducted from the merchant balance "might be more or less than the original payment." It also says Stripe always refunds the customer the exact amount they paid, in the currency they paid in.
Buyers know this convention from cards, so a dollar-value refund feels worse to them even when the terms allow it. On Lumx you can follow it by choice: quote the refund with the local amount as the target.
How fast a refund lands, by rail
A refund moves over a payout rail like any other payout, so the rail sets the clock. The timelines are Lumx's published processing targets, not commitments.
Cut-off and settlement by payout rail for the rails used in the examples (BRL, MXN, GBP, USD).
Currency | Rail | Cut-off (local time) | Settlement |
BRL | Pix | None | Instant, 24/7/365 |
MXN | SPEI | None | Instant, 24/7/365 |
GBP | Faster Payments | None | Instant, up to GBP 1M per payment |
USD | ACH | 2:00 PM ET | 1 to 2 business days |
USD | FEDWIRE | 3:00 PM ET | Same business day, typically within hours |
USD | SWIFT | 3:00 PM ET | 1 to 5 business days |
A refund over Pix (Brazil's instant payment system) or SPEI (Mexico's interbank transfer system) can be quoted and sent inside one lock, which is 30 seconds, 1 minute or 5 minutes on Lumx. A USD refund locks the rate for the same window, but the money arrives on the rail's calendar, and a request after 3:00 PM ET waits for the next US business day. A first refund to a new recipient also needs a verified destination, which can add time. A refund over SWIFT is a second wire, with its own correspondent-bank fees on top of the first one.
On Lumx, Pix and SPEI have no cut-off in the published table, so a refund requested on a Sunday is processed on the rail that day, subject to compliance review.
The four lines of a refund policy
Write the policy before the first refund, in four lines. Fixed currency: "Refunds return the amount you paid, in the currency you paid in", or the dollar version for USD invoices. Rate: "Refunds convert at the rate on the day we send them." Fees: the refund is a new off-ramp with its own quote and fees, so say who pays them, and say whether the fees on the original sale are returned. Timing: how many days after approval the refund is sent, and over which rail.
A partial refund is the same quote logic on a smaller target amount. Set a refund window in the terms. Refund only to the verified original payer: a transfer to a third party is a new payout, not a return. Chargebacks are a card-network process, and this guide does not cover how Pix or SPEI handle disputed payments. Refund duties and deadlines come from the contract and local consumer law.
Give finance a separate ledger line for refund FX gains and losses.
I would fix the customer's side and say so in the terms, because the gap on a refund is small next to the support ticket a short refund creates. My default for anything priced in reais or pesos is to refund the exact local amount, quoted with the local amount as the target, and to book the dollar difference as its own FX line. I would fix the dollar side only when the contract names a dollar amount and the customer signed it.
When a refund at today's rate is the wrong policy
A contract that fixes a rate. If the terms name a rate or a benchmark, the refund follows the clause and the quote is only the way to move the money.
A large refund weeks after the sale. A quote locks the rate for minutes, so longer exposure belongs to treasury policy.
What a refund looks like on Lumx
Lumx is stablecoin payments infrastructure for businesses that move money between Latin America and the rest of the world: one API to collect, hold, convert, and pay out in BRL, MXN, COP, USD, EUR, and GBP or in USDC and USDT, over local rails such as PIX, SPEI, PSE, Bre-B, ACH, FEDWIRE, SEPA, and Faster Payments, with SWIFT and on-behalf-of payments and collections (POBO and COBO) in USD, EUR, and GBP, plus named virtual accounts, custodial wallets, and KYB/KYC built in. Fintechs, neobanks, payment providers, marketplaces, payroll, and treasury platforms embed Lumx to serve their own users across borders without opening a local entity in each country. Brazil, Mexico, Colombia, the United States, the Eurozone, and the United Kingdom are live with local rails; SWIFT reaches the rest. Founded in 2022 in Brazil, backed by BTG Pactual and Bitso, FinCEN-registered MSB. More than $2B in annualized payment volume (as of September 2026); PIX and SPEI settle in under 60 seconds.
A refund of a collected payment is a new off-ramp from the business's custodial wallet to a destination for the paying customer. The customer's bank details must be registered and approved as a destination first, with the holder relationship CUSTOMER, which the destinations documentation describes as the customer's clients for refunds and rebates. That approval is what delays a real refund, so register the destination early.
The off-ramp also carries a required purpose, and a mismatch can hold the transaction or trigger an RFI (request for information). The docs list no refund code and say to pick by the economic substance of the original transaction, which for a refunded purchase of goods or services points to TRADE_TRANSACTIONS.
The steps are short. Request a locked rate for the pair, for example USDC to BRL over Pix, passing the reais as the target when the policy fixes the local amount. Submit the off-ramp with the returned exchangeRateId before the lock expires. A quote works once: an expired or already-used lock is rejected and you re-quote, and so is a request from a wallet that is short. The 30-second lock carries no fee and the 1-minute and 5-minute locks include one for volatility. Lumx does not take a fee out of the amount that reaches the recipient on a Pix or SPEI payout, so the refund is quoted so that R$ 54,000 reaches the recipient, and only the recipient's bank can charge them. A partner fee applies only when the request carries a partnerFeeId, since there is no default. It comes on top of what the payer funds, so it raises the USDC debited for the same reais delivered, and finalTargetAmount is all-in.
Status follows the off-ramp path of TRANSFERRING_STABLECOIN, TRADING, TRANSFERRING_FIAT and SUCCESS, with offramp.success or offramp.failed at the end. The quote shows the base and final rate, and the success receipt breaks out the fee lines for the refund FX ledger line. The Pix path is in sending USDC to Brazilian banks, and the pairs are on the USDC to BRL and USDC to MXN pages. What an off-ramp is in general is in what a stablecoin off-ramp is, the full flow is on the global payments page, and the routes each currency supports are in the Lumx coverage.
A late deposit needs no refund quote, because it is returned on the same rail. Quote timing is in how long a payment quote lasts, and the lane between two countries in what a stablecoin corridor is.
Methodology and sources
Card processor behavior comes from Stripe's localized pricing documentation, read on November 1, 2026.
Product behavior comes from the Lumx documentation on transactions, exchange rates, destinations, partner fees, error codes, webhooks and payment rail cut-off times, all read on November 1, 2026. The reais and USDC figures are arithmetic on assumed round rates, marked as illustrative, with fees left out. No live Lumx quote was pulled. Tax and accounting treatment, and the legal basis of refund duties, were not researched.
Verified on November 1, 2026. Operational context, not legal, tax, or investment advice.
Cover photo: Laura Ockel on Unsplash.
How do I refund a cross-border payment?
Decide which currency stays fixed, then send the refund as a new payment priced at the rate on the day you send it. The card convention fixes the customer's side and returns the exact local amount paid. On Lumx the refund is an off-ramp to a destination with the holder relationship CUSTOMER, quoted with a locked rate that takes the local amount as the target.
Who pays the difference when the exchange rate moves before a refund?
Whoever's currency is not fixed. Refund the local amount and your dollar cost moves; refund the dollar amount and the customer's local amount moves. Write the choice into the terms. On Lumx, the locked quote shows the base and final rate and amount before you submit, and the success receipt breaks out the Lumx and partner fee lines, so you can price the refund before you send it.
Is the original fee returned when I refund?
That is a term you set, not a default of the rail. The refund is a new off-ramp with its own fees, so state in the policy whether the original fees come back. On Lumx the refund quote carries a partner fee only if you pass a partnerFeeId, and there is no default. The 30-second lock has no lock fee.
How long does a refund take?
It depends on the payout rail. Pix, SPEI and Faster Payments have no cut-off, and USD over ACH, FEDWIRE or SWIFT follows the rail's calendar, as in the rail table above. On Lumx these are processing targets, not commitments, and a first refund to a new recipient needs a verified destination.
Is a refund a new quote or a reversal of the original?
A new quote and a new transaction, because the original quote has expired or been used. On Lumx an expired or spent lock is rejected, so each refund starts with a fresh locked rate and a new off-ramp.





