Pass FX costs to users when the amount is a balance they hold, such as seller earnings, and absorb them when the amount is a promise, such as a salary or an invoice. Mark up only with a visible fee line. A per-payout cap fits platforms with both kinds.
Every cross-border payout carries a cost, and someone pays it. Below: four models, three worked examples, and how a Lumx quote sets the split.
Pass through, absorb or mark up: the four ways to split an FX cost
The platform can pay the cost (absorb), the payer can pay it on top of the amount sent, the recipient can bear it so less lands, or the platform can pass on more than its cost and keep the difference (mark up).
Who pays under each model, what the recipient sees, and what the platform keeps.
Model | Who pays | What the recipient gets | What the platform keeps | Typical use |
Absorb | The platform | The full promised amount | Its fee minus the cost | Payroll, supplier invoices, refunds |
Payer pays on top | The payer | The full promised amount | Its fee, cost recovered | Invoices where the payer funds the delivery |
Recipient bears it | The recipient | The amount minus the cost | Its fee, cost recovered | Seller earnings, wallet withdrawals |
Mark up | The payer or recipient | Depends on where the line sits | Its fee plus a margin over cost | Remittance-style apps with a disclosed fee |
The last two change someone's number and need a visible fee line. On Lumx, all four are set from the quote the platform requests before it executes and an optional partner fee of its own.
Which costs are you actually deciding about?
A generic provider quote can carry up to four lines. The first three are your cost, the fourth is your revenue.
The cost lines inside a generic cross-border payout quote and where each usually shows. Placement varies by provider.
Cost line | What it is | Where it usually shows (generic provider quote) | Who can move it |
Exchange-rate spread | The gap between the reference rate and the rate you get | Usually the base rate against the final rate | Provider, volume tier, time of day |
Provider fee | The per-transaction fee of the provider | Often a separate fee line | Contract, rail |
Lock fee | The cost of holding a rate for a set window | Priced into the quote or shown as its own line, depending on the provider | You, by lock length |
Your own fee | What the platform adds for itself | A partner fee line | You |
How the first three are built is in how stablecoin API pricing works, and what providers publish is in stablecoin API pricing compared. Start here once you have a cost number.
A Lumx locked quote returns a base and a final target amount and exchange rate, plus a fee breakdown with a Lumx fee, a partner fee and a total, each with its rate in basis points, flat amount and currency (field names are in the exchange rate reference). The final amount includes both fees. The partner fee is your revenue, and the Lumx fee is the visible part of the cost. It is not your whole cost c.
Match the model to the promise you made
Ask what number the recipient saw before the money moved. An amount in their own currency is a promise. A share of something they hold is a balance.
Payout types, the promise behind each and the model that usually fits.
Payout type | Promise to the recipient | Usual model | Quote built on |
Payroll and contractor pay | "You get exactly 8,000 reais" | Absorb, or payer pays on top | Target amount, locked |
Supplier invoices | "The invoice is paid in full" | Absorb, or payer pays on top | Target amount, locked |
Seller earnings | "You hold 412.50 dollars" | Recipient bears it, or hybrid | Source amount |
Consumer remittance | "Send money home" | Mark up with a disclosed line | Locked, full breakdown on screen |
A promised salary that lands a few reais short tends to open support tickets, while a balance that pays out slightly less than shown is a line item the user expected. A Brazilian payout over Pix (Brazil's instant payment system, run by the Central Bank) and a Mexican one over SPEI (Mexico's interbank transfer system, run by Banxico) can be quoted either way, whatever the stablecoin corridor.
On Lumx, a locked rate accepts either a source amount or a target amount, and a floating rate accepts only a source amount. So the promise decides the quote type: fix the local amount with a locked target-amount quote, or quote from what the sender holds and let the recipient's amount follow.
Three worked examples of what absorbing costs
Absorbing is affordable when your revenue per payout is larger than your cost per payout. Call revenue as a share of the amount paid out r, and the all-in payout cost c. Absorbing leaves r minus c on every payout. The examples use a hypothetical c of 1.0%, which is not a Lumx rate, so replace it with the cost in your own quotes.
Monthly economics of absorbing a 1.0% payout cost, in three business models. Hypothetical figures, USD.
Business model | Paid out per month | Platform revenue | Revenue as share of payouts (r) | Cost at 1.0% | Left after absorbing |
Seller platform, 12% take rate on 1,000,000 of sales | 880,000 | 120,000 | 13.6% | 8,800 | 111,200 |
Contractor payouts, 3% platform fee | 2,000,000 | 60,000 | 3.0% | 20,000 | 40,000 |
Remittance-style app, 0.5% fee | 2,000,000 | 10,000 | 0.5% | 20,000 | minus 10,000 |
The seller platform gives up 7.3% of its revenue (8,800 over 120,000) to absorb. The contractor platform gives up a third (20,000 over 60,000). The remittance-style app cannot absorb at all, because r is below c. When r is close to c, raise the fee or add a payer-pays line instead of absorbing.
The spread guide turns base and final rates into a percentage for the cost column. To get r from your own numbers, divide the platform revenue in your ledger by the amount paid out over the same month.
A hybrid caps what you absorb
A hybrid absorbs the cost up to a ceiling per payout and passes the rest on.
A cap of 1.50 dollars absorbed per payout, at a 1.0% cost. Hypothetical figures, USD.
Payout size | Cost at 1.0% | Platform absorbs | Passed on |
50 | 0.50 | 0.50 | 0.00 |
150 | 1.50 | 1.50 | 0.00 |
300 | 3.00 | 1.50 | 1.50 |
1,000 | 10.00 | 1.50 | 8.50 |
If your fee is a flat 3.00 dollars per payout, a cap of 1.50 keeps at least 1.50 of margin at any size. Show the passed-on part as its own line, laid out as in the cross-border quote screen guide. On Lumx, create partner fees by size band and send the partner fee ID that matches each payout, or use a rate-based fee.
I start every payout product with one question: what number did the recipient see before the money moved? If it is an amount in their own currency, I absorb the cost and quote by target amount, because a payout that lands a few cents short is a promise broken, and the platform ends up paying for it in support time anyway. If it is a share of a balance, I pass the cost on as its own line. Either way I cap what I absorb, because an uncapped promise turns the largest payout of the month into the platform's loss.
Who bears the rate move between quote and payout?
Whoever executes at a rate different from the one shown. A floating rate is an estimate, so someone takes whatever the market does before execution. A locked rate removes that move for the length of the lock, and a longer lock costs more because the provider carries the risk.
A 5-minute lock for a user reviewing a screen is a cost you absorb or pass on. What happens when a quote lapses is in how long a payment quote lasts.
On Lumx, a locked rate lasts 30 seconds, 1 minute or 5 minutes. The 30-second lock has no fee, and the longer ones include a fee to cover volatility risk. If the lock expires before the transaction is submitted, the rate ID stops working and the platform requests a new quote.
Does the user have to be told?
Often yes, depending on who the user is.
In the United States, a remittance transfer provider serving consumers must give a pre-payment disclosure under 12 CFR 1005.31(b)(1). It lists the transfer amount, the fees and taxes, the total, the exchange rate used and the amount that will be received. The text was read on November 1, 2026, at Cornell Legal Information Institute. Its structure is the payer-pays-on-top model: the Total is the Transfer Amount plus the fees, so the cost is a line the sender sees before paying. In the European Union, Regulation (EU) 2019/518 of March 19, 2019 covers currency conversion charges, and whether it reaches your corridor is a scope question for counsel. Ask counsel whether your payers are consumers and whether your platform or a provider offers the conversion. EUR-Lex returned a bot wall on November 1, 2026, so it is cited by number and date, with no summary of its articles.
An invisible passed-on cost reads as a hidden fee and a shown one as a price, so show the rate, the fee and the amount received before the user confirms.
On Lumx, the quote supplies those numbers: final amount, final rate and the fee breakdown. Which disclosures apply to your end user stays with your app and your counsel.
When passing the cost on is the wrong call
Passing the cost on is the wrong choice when the recipient was promised an exact amount, when the payout refunds a sale already paid for, or when the payer budgets to the cent. There the shortfall becomes a dispute, and a dispute can cost more than the fee.
Absorbing is the wrong choice when r is not clearly larger than c, when small frequent payouts make a flat cost a large share of each, or when the cost moves and no lock caps it.
Whether a passed-on line costs you users is not answered here, as no sourced figure exists. Test it: show it to half of new users on the quote screen and compare completed payouts.
To change the policy for existing users, give notice and decide whether they keep the old terms for a period. If a payout was quoted at the old terms and the rate then moved, refunds after an FX move covers who takes the difference. On Lumx, a new price is a new partner fee used for new payouts.
Setting the split on Lumx: partner fee and locked quote
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.
The platform's own margin is a partner fee. You configure it in the dashboard or through the API as a rate in basis points, a flat amount in dollars, or both, separately for on-ramp and off-ramp, and name the wallet that receives it. A rate of 75 bps is 0.75%.
With a locked rate, the partner fee ID goes on the exchange-rate request and the fee becomes part of the quote the user sees. With a floating rate, it goes on the transaction. The partner fee prompt walks through both, with a sandbox check.
For an absorbed payout, request a locked quote by target amount so the local amount is fixed. A partner fee applies only when the request carries a partner fee ID, so leave it out to charge nothing. The partner fee comes on top of what the payer funds: on a BRL to USDC payment it raises the reais to send for the same USDC credited, and it has no cap and does not vary by corridor. The final target amount is already all-in, with the Lumx fee and the partner fee. The partner fee is revenue that Lumx sends to your wallet. For a passed-on payout, show the final amount and the fee lines. A marketplace takes its fee on the way in, as in seller payouts in Latin America.
A payout on Pix to Brazil or SPEI to Mexico is then a quote, a destination and a transaction. What the quote shows is what is sent: Lumx does not deduct a fee from the amount that reaches the recipient on a Pix or SPEI payout, and only the recipient's own bank can still charge them. Who bears the cost is decided before the quote, in how the platform builds it. The pricing model is a monthly platform fee plus usage-based per-transaction fees, transparent FX on locked quotes, no pre-funding; no published plans. Rails are on the coverage page, and the quote sits behind Lumx global payments, next to what an off-ramp is.
Methodology and sources
Product facts come from the Lumx docs read on November 1, 2026: Partner fees, Exchange rates, the Get an exchange rate reference, Marketplaces and Set up partner fees. The disclosure rule was read at 12 CFR 1005.31. Regulation (EU) 2019/518 is cited by number and date, linked to EUR-Lex, which was not readable that day.
Verified on November 1, 2026. Operational context, not legal, tax, or investment advice.
Cover photo: Wilhelm Gunkel on Unsplash.
Should you pass FX costs to users or absorb them?
It depends on what the recipient was promised. Absorb the cost when the amount is a promise, such as a salary or an invoice, and pass it on when the amount is a share of a balance, such as seller earnings. If you are unsure, absorb up to a per-payout cap and pass on the rest. On Lumx, a locked quote by target amount fixes what the recipient gets.
Can a platform add its own margin on top of the cost?
Yes. Set a margin as a rate in basis points, a flat amount, or both, and show it as its own line so the user sees what they pay. On Lumx this is a partner fee, configured separately for on-ramp and off-ramp, sent to a wallet you choose and applied only when you pass its ID.
Is absorbing the better choice for payroll and contractor payouts?
Usually, and only when your fee per payout exceeds the payout cost, so set the fee first. On Lumx, a 30-second locked quote by target amount fixes the local amount with no lock fee.
Do I have to show FX costs to users?
It depends on who the user is and where. US consumer remittances fall under the pre-payment disclosure in 12 CFR 1005.31(b)(1), so a business payout may sit outside it, and Regulation (EU) 2019/518 on currency conversion charges is a scope question for counsel. A shown fee beats a hidden one either way. On Lumx, the quote supplies the final amount, the final rate and the fee breakdown, and your app decides what to display.





