The FX gap between a sale and a payout: who absorbs it on a marketplace?

A seller earns at one exchange rate and gets paid days later at another. Who absorbs the difference, what ledger currency to use, how to shrink the gap.

The FX gap is the exchange rate move between the moment a seller earns money and the moment you pay it out. A Brazilian seller who sells on Monday and gets paid in two weeks is exposed to two weeks of BRL/USD moves. Your ledger currency decides who absorbs that gap: the platform or the seller.

Most marketplaces never decide this on purpose. The choice gets made by whoever wrote the balances table, and finance discovers it at month-end when the numbers don't tie.

Key takeaways

  • The gap runs from sale to payout. A payout quote only covers the last 5 minutes of it.
  • Seller balances in local currency: the platform carries the FX risk.
  • Seller balances in dollars: the seller carries it.
  • Paying out more often shrinks the gap more cheaply than any hedge.
  • Log the rate at sale and the quote's rate at payout. The difference is your FX gain or loss.

Where does the FX gap come from?

From time. Three dates matter in a marketplace payout:

  1. Sale date. The buyer pays and the seller earns. You record a balance.
  2. Payout date. Days or weeks later, you send the seller's money.
  3. Quote moment. At payout you request a quote, which locks the rate and fees for 5 minutes (payout quotes).

The quote protects you inside that 5-minute window. Everything from the sale to the quote is open exposure. Who carries FX risk in a stablecoin payout maps the window step by step, and how to read an FX quote explains which way the quoted rate points.

For a LatAm marketplace the exposure is real, not theoretical. How live quotes handle volatile currencies shows how much BRL, MXN, COP, and ARS can move between reference fixings.

Which ledger currency should you use for seller balances?

Pick one per seller and write it into your seller terms. The two clean models:

Model A: local-currency ledgerModel B: dollar ledger
Seller balance recorded inBRL (or MXN, COP, ...)USD or USDC
What the seller is promisedA fixed local amountA fixed dollar amount
Who carries the gapThe platformThe seller
Payout quote settingcurrency_type: receiver, local amount in minor unitscurrency_type: sender, USDC amount in minor units
Seller experiencePredictable, matches local invoicesAmount in local currency changes with the rate
Good fitConsumer sellers, local pricing, payroll-like payoutsGlobal freelancers, dollar-priced services, sellers who want USDC exposure

The quote mechanics come straight from BlindPay's docs: on a payout quote, currency_type: sender means request_amount is the stablecoin you send, and receiver means it's the fiat the bank account receives. Paying an exact local amount with receiver-side quotes covers Model A in detail.

There's a third, messy model: dollar ledger, local promise. The balance is in dollars, the seller dashboard shows reais at the sale-date rate, and the payout lands at a different number. That's the one that generates support tickets. Avoid it.

Illustrative example: who wins and who loses on a R$10,000 sale?

Illustrative example. A seller in Brazil makes a R$10,000 sale. On the sale date the rate is 5.40 BRL per USD. Payout happens 14 days later. Fees are left out to keep the arithmetic clean.

Sale-date value: 10,000 / 5.40 = 1,851.85 USD.

Scenario 1: the real weakens to 5.60 by payout.

Model A (platform owes R$10,000)Model B (platform owes $1,851.85)
USDC needed at payout10,000 / 5.60 = 1,785.711,851.85
Seller receivesR$10,000.001,851.85 x 5.60 = R$10,370.36
Who gainedPlatform, 1,851.85 - 1,785.71 = 66.14 USDSeller, R$370.36

Scenario 2: the real strengthens to 5.20 by payout.

Model AModel B
USDC needed at payout10,000 / 5.20 = 1,923.081,851.85
Seller receivesR$10,000.001,851.85 x 5.20 = R$9,629.62
Who lostPlatform, 1,923.08 - 1,851.85 = 71.23 USDSeller, R$370.38

A 0.20 move in the rate, roughly 3.7%, swings the outcome by 3.6% to 3.8% of the sale. On one sale that's noise. On R$5 million of monthly seller volume, it's a line item finance will ask about.

How do you shrink the gap?

Shorten it. The cheapest hedge for a timing gap is less time.

  • Pay out more often. Weekly instead of monthly cuts the average exposure from about 15 days to about 3.5. Daily cuts it further. Instant destination rails like Pix make frequent payouts practical, and each payout gets its own quote (batch payouts with live quotes covers running many at once).
  • Quote at execution, not at approval. Request the quote right before you execute, and re-quote if it expires. Never reuse yesterday's rate.
  • Match where you can. If you collect reais from buyers and owe reais to sellers, net them before converting. What is a natural FX hedge works through the numbers.
  • Hedge the remainder. For large, predictable exposure over weeks, a bank forward can fix the economic rate. Live quote vs forward contract vs fixed rate explains how the two layers work together.

How should finance record the gap?

As an FX gain or loss, measured from the sale-date rate to the payout rate. The IFRS standard for this, IAS 21, exists precisely to settle "which exchange rate(s) to use and how to report the effects of changes" in exchange rates (IFRS Foundation). The usual treatment is to record the transaction at the rate on its date and recognize the settlement difference in profit or loss. Confirm the details with your accountant.

Operationally, store two numbers per payout:

FieldSource
Rate at saleYour pricing system, or a public reference such as the Federal Reserve's H.10 daily rates or the Banxico FIX for MXN
Rate at payoutThe quote's blindpay_quotation, with commercial_quotation alongside for the market rate
Quote idThe qu_ id, so every payout traces to the exact quote

The gap per payout is the difference between the two rates applied to the amount. Sum it monthly by corridor and you'll know whether your payout cadence is costing or saving money.

What should your seller terms say?

Three sentences cover it:

  1. The currency the seller's balance is held in.
  2. When payouts run, and that the conversion uses the rate quoted at payout time.
  3. Whether the seller receives a fixed local amount or a fixed dollar amount.

Sellers mostly don't mind which model you pick. They mind surprises. Marketplace stablecoin payouts in Latin America covers the rest of the seller payout stack, from rails to onboarding.

What to do next

Check which ledger model your seller balances table actually implements, then run last month's payouts through it: rate at sale vs blindpay_quotation at payout, summed by corridor. Request a receiver-side quote on a development instance using the payout quotes docs to see Model A end to end.

FAQ