---
title: "The FX gap between a sale and a payout: who absorbs it on a marketplace?"
seoTitle: "The FX gap between a sale and a payout"
description: "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."
date: "2026-10-06"
updated: "2026-10-06"
category: "payments"
author: "BlindPay Team"
faq:
  - q: "What is the FX gap between a sale and a payout?"
    a: "It's the exchange rate movement between the moment a seller earns money and the moment the marketplace pays it out. If a Brazilian seller makes a sale on Monday and gets paid two weeks later, the BRL/USD rate has moved in between. Someone gains and someone loses on that move, and your ledger currency decides who."
  - q: "Who should carry the FX risk on marketplace payouts: the platform or the seller?"
    a: "Whoever your ledger says owes the fixed amount. If you record seller balances in their local currency, the platform carries the risk and pays a fixed local amount. If you record balances in dollars, the seller carries it and receives whatever the dollars convert to. Both are legitimate. Say which one you chose in your seller terms."
  - q: "Can I lock the exchange rate at the time of sale?"
    a: "Not with a payout quote. A BlindPay payout quote locks the rate and fees for 5 minutes, which covers the payout itself, not the days between sale and payout. To fix an economic rate for weeks you need a hedge such as a bank forward. The simpler lever is paying out more often, which shrinks the gap."
  - q: "How do I pay a seller an exact amount in reais from USDC?"
    a: "Create a receiver-side payout quote: set currency_type to receiver and request_amount to the BRL amount in centavos, so 1000000 means R$10,000.00. The quote returns the USDC you need to send at the current rate. Execute it within the quote window and the seller receives the fixed amount."
  - q: "How should I account for the FX gap?"
    a: "Under IAS 21, the standard for foreign currency transactions, a transaction is recorded at the rate on its date and the difference when it settles is an exchange gain or loss. In practice, log the rate at the sale and the quote's rate at payout, and book the difference. Confirm the treatment with your accountant."
---

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](/docs/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](/resources/more/who-carries-fx-risk-stablecoin-payout) maps the window step by step, and [how to read an FX quote](/resources/more/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](/resources/more/live-quotes-volatile-currencies-latin-america) 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 ledger | Model B: dollar ledger |
| --- | --- | --- |
| Seller balance recorded in | BRL (or MXN, COP, ...) | USD or USDC |
| What the seller is promised | A fixed local amount | A fixed dollar amount |
| Who carries the gap | The platform | The seller |
| Payout quote setting | `currency_type: receiver`, local amount in minor units | `currency_type: sender`, USDC amount in minor units |
| Seller experience | Predictable, matches local invoices | Amount in local currency changes with the rate |
| Good fit | Consumer sellers, local pricing, payroll-like payouts | Global 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](/resources/more/pay-exact-local-amount-receiver-side-quote) 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 payout | 10,000 / 5.60 = 1,785.71 | 1,851.85 |
| Seller receives | R$10,000.00 | 1,851.85 x 5.60 = R$10,370.36 |
| Who gained | Platform, 1,851.85 - 1,785.71 = 66.14 USD | Seller, R$370.36 |

**Scenario 2: the real strengthens to 5.20 by payout.**

| | Model A | Model B |
| --- | --- | --- |
| USDC needed at payout | 10,000 / 5.20 = 1,923.08 | 1,851.85 |
| Seller receives | R$10,000.00 | 1,851.85 x 5.20 = R$9,629.62 |
| Who lost | Platform, 1,923.08 - 1,851.85 = 71.23 USD | Seller, 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](/resources/more/batch-stablecoin-payouts-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](/resources/more/natural-fx-hedge-stablecoin-rails) 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](/resources/more/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](https://www.ifrs.org/issued-standards/list-of-standards/ias-21-the-effects-of-changes-in-foreign-exchange-rates/)). 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:

| Field | Source |
| --- | --- |
| Rate at sale | Your pricing system, or a public reference such as the Federal Reserve's [H.10 daily rates](https://www.federalreserve.gov/releases/h10/current/) or the [Banxico FIX](https://www.banxico.org.mx/tipcamb/tipCamMIAction.do?idioma=sp) for MXN |
| Rate at payout | The quote's `blindpay_quotation`, with `commercial_quotation` alongside for the market rate |
| Quote id | The `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](/resources/more/marketplace-stablecoin-payouts-latam) 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](/docs/payout-quotes) to see Model A end to end.
