Paying an exact local amount from USDC means quoting the payout on the receiving side. Fix the BRL or MXN figure the recipient must get, lock a rate against that target, and let the USDC cost float. The lock holds the rate for a short window and the payout executes against it, so the quote's final target amount is the number to check against the invoice.
Why a quote on the USDC side leaves the receiver short
An invoice is written in reais or pesos, and a payout from USDC starts on the other side of the pair. Someone has to turn the local amount into dollars, and that conversion goes stale. The treasury team divides the invoice by yesterday's rate, sends that much USDC, and the rate moves before the payout executes, so someone chases a short payment.
The table uses real closing rates from the Central Bank of Brazil for an invoice of BRL 100,000, computed on October 26, 2026 and paid on October 27. PTAX is a reference rate, not a price anyone traded at. The example treats one USDC as one dollar and leaves fees out, so it shows the size of the movement, not a Lumx price.
Closing PTAX sell rates published by the Central Bank of Brazil, applied to an invoice of BRL 100,000.
Step | Calculation | Result |
USDC computed on October 26, 2026 at 5.5007 | 100,000 / 5.5007 | 18,179.50 USDC |
Reais those USDC buy on October 27 at 5.3346 | 18,179.50 x 5.3346 | BRL 96,980.38 |
Shortfall against the invoice | 100,000 - 96,980.38 | BRL 3,019.62 |
USDC needed on October 27 to deliver BRL 100,000 | 100,000 / 5.3346 | 18,745.55 USDC |
Extra USDC the payer owed | 18,745.55 - 18,179.50 | 566.05 USDC |
A quote on the receiving side fixes the local result, which is the side a finance team can check against a document. The pair is priced on the USDC to BRL page, and how a pair becomes a route is in what a stablecoin corridor is. A locked quote on Lumx takes a source or a target amount, and the target side takes the arithmetic off the payer.
Lock the quote on the amount the receiver gets
A locked quote returns a rate that holds for a fixed window, plus an id that you pass to the transaction. In the Lumx API the request is POST /exchange-rates with type set to LOCKED, and it accepts either a source amount or a target amount. For an exact payout you send the target.
The quote request for a payout that must deliver BRL 100,000 over Pix (Brazil's instant payment system, run by the Central Bank). For MXN, the rail is SPEI (Mexico's interbank transfer system, run by Banxico).
Field | Value | What it does |
customerId | the paying customer's id | The wallet that will be debited belongs to this customer |
type | LOCKED | Holds the rate for the window |
rail | PIX, SPEI or a COP rail | The payout rail of the destination |
sourceCurrency | USDC | What leaves the wallet |
targetCurrency | BRL (MXN for SPEI, COP for Bre-B or ACH Colombia) | What the recipient gets |
targetAmount | "100000.00" | The figure that must land, sent as a string |
timelock | 30s, 1m or 5m | How long the rate holds. The default is 30s |
The response carries the quote id, an expiresAt timestamp in UTC (the lock expiry), the base rate before fees, the final rate after fees, and a fees object that itemizes the Lumx fee, any partner fee and the total.
You then pay with POST /transactions/off-ramp, sending the destination, the exchangeRateId and a purpose. The transaction moves through TRANSFERRING_STABLECOIN, TRADING and TRANSFERRING_FIAT to SUCCESS. Before you submit, compare the quote's finalTargetAmount with the invoice. That one comparison catches a quote on the wrong side, a wrong currency and a typo in the amount. The Lumx docs describe the lock as guaranteeing the exact conversion rate and list exact quotes as its use, and the off-ramp request carries no amount of its own, so the payout stays tied to the quote id you pass. A target-side quote works for USDC to COP too. Send the local figure as a string with two decimals, as in the table.
Which lock duration fits an exact-amount payout?
The lock is the window in which the payout must be submitted. The Lumx docs offer three.
Locked quote durations in the Lumx exchange rates docs.
Timelock | Additional fee | Fits |
30s | No | A payout that code submits right after it quotes |
1m | Yes | A short review step, such as a confirmation screen |
5m | Yes | A person approving the amount before it is submitted |
The longer locks include a fee that covers the volatility the provider carries while the rate is held, so read the cost from the quote you get. A small payout below the currency minimum returns MINIMUM_AMOUNT_NOT_MET. On Lumx the timelock is a field on the quote request, its clock starts when the quote is created, and a payout submitted after the window closes fails. A locked quote that is never used leaves no side effect today.
What happens when a locked quote expires or is reused
A locked quote is single use and short lived, so the failures are predictable. The Lumx docs say to match on the error code, because the message can change.
Exchange rate error codes in the Lumx API errors catalog.
Code | HTTP | When it happens | What to do |
EXCHANGE_RATE_EXPIRED | 422 | The lock closed before submission | Request a new quote, which returns a new id |
EXCHANGE_RATE_ALREADY_USED | 422 | Another transaction consumed the rate | Look up the first transaction, so the invoice is not paid twice |
EXCHANGE_RATE_CURRENCY_MISMATCH | 422 | The rate does not fit the transaction type | Quote USDC to the local currency |
EXCHANGE_RATE_NOT_FOUND | 404 | No quote has that id | Check the id stored with the payout |
MINIMUM_AMOUNT_NOT_MET | 422 | The amount is below the currency minimum | Raise the amount |
NO_LIQUIDITY_PROVIDER | 422 | No liquidity for the trade | Quote again later |
EXCHANGE_RATE_FETCH_FAILED | 500 | Locking the rate failed | Request the quote again |
INSUFFICIENT_BALANCE | 422 | The wallet holds less USDC than needed | Compare the quote's USDC amount with the balance first |
With a target-side quote the USDC amount comes from the quote, so check the balance after the quote and before the submit.
A retry has one more rule. Send an Idempotency-Key header with a UUID v4 generated and stored with the payout row before the first attempt, and reuse it on every retry, because a new key is a second payout. On Lumx, the same key with a different body returns a 409, and an identical repeat returns the stored response.
Does the recipient pay anything to receive the amount?
From Lumx's side, no. The fees sit on the USDC side of the quote, and Lumx does not deduct a fee from the amount that reaches the recipient on Pix, SPEI or Bre-B (Colombia's instant payment system). Only the recipient's own bank can charge them.
Payout rails for an exact local amount, as of November 2026.
Currency | Rail | Settlement | What to know for an exact amount |
BRL | Pix | Instant, every day of the year | No Lumx fee comes out of the amount that lands |
MXN | SPEI | Instant, every day of the year | No Lumx fee comes out of the amount that lands |
COP | Bre-B | Instant, like Pix | Capped at 1,000 UVB per transaction, which is COP 12,110,000 in 2026. A payout above it is rejected, never split |
COP | ACH Colombia | Not published here | No per-payment limit, so it is the rail for an invoice above the Bre-B ceiling |
The rail is fixed when the destination is registered, so a Colombian supplier whose invoice can exceed the Bre-B ceiling needs an ACH Colombia destination from the start. The ceiling is a rule of Colombia's central bank and applies to every provider. Cut-offs for the other rails are in payout limits and cut-offs by rail, and the full list of rails is on the coverage page.
How far BRL and COP move between invoice and payment
In October 2026 the closing PTAX sell rate for the real was lowest at 4.9698 per dollar on October 6 and highest at 5.5007 on October 26, a spread of 10.7% inside one month, per the Central Bank of Brazil's PTAX open data service.
The Colombian peso moved less: the representative market rate (TRM) went from COP 3,312.84 per dollar on October 1 to COP 3,148.02 on October 28, a drop of 4.98%, per the TRM series on Colombia's open data portal.
A locked quote covers the seconds or minutes between pricing and submitting, and nothing wider. Weeks between invoice and payment are an exposure for the contract wording or the company's FX broker. On Lumx, a locked quote applies to a one-off transaction, while an autoconversion rule converts each deposit at the market rate and takes no locked quote. Which BRL rate a contract should name is in PTAX vs live quote.
Fix the amount that someone will check against a document
If a person will compare the local number with an invoice or a payroll line, fix the local number. If the budget is a USDC balance, fix the USDC.
I would quote the receiving side for any payout that has a document behind it, and the USDC side for any treasury move. I would keep the 30-second lock as the default and pay for a longer one only when a person must approve between quote and submit, because a lock that outlasts the approval is a fee for nothing and one that does not is a failed payout. I would store the quote id next to the invoice id, so finance can explain a variance months later.
When an exact-amount quote is the wrong tool
A locked target quote is the wrong choice in three cases.
The payer's constraint is the USDC, as in a treasury sweep or a fixed dollar budget. A source-side quote is simpler.
The payment recurs on a schedule at market. A rule that converts every deposit at the market rate fits, and no locked quote applies.
A Colombian payment above the Bre-B ceiling over Bre-B. It is rejected whatever the quote says, so register an ACH Colombia destination.
What an exact-amount payout 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.
The payout runs from the paying customer's custodial wallet, which has to hold enough USDC. The destination is registered once per recipient with a holder relationship, such as SUPPLIER, that tells Lumx who owns the receiving account. The paying company asks for a locked quote with the recipient's amount as the target, checks it, and submits the payout with the quote's id.
Webhooks report each status change until the payout succeeds or fails. A transaction held for review shows as an RFI (request for information, a compliance hold that asks for a document before a transaction clears), and the answer to a hold is the document, not a new quote. A transaction stuck in an RFI settles at the quoted rate even after the lock has expired, because the fiat leg was already converted at the agreed rate. A BRL payout lands over Pix, as the step-by-step USDC to Brazil guide shows, a MXN payout runs the same sequence over SPEI, and the pairs are priced on the USDC to MXN and USDC to COP pages.
Pricing is a monthly platform fee plus usage-based per-transaction fees, transparent FX on locked quotes, no pre-funding; no published plans. The fee lines sit inside the quote, so the cost of an exact payout is visible before the payer submits it. How those lines are built is in how stablecoin payout pricing works, the mechanics of leaving a stablecoin for a bank account are in what a stablecoin off-ramp is, and the token is explained in what USDC is. The flow runs on the global payments product.
Methodology and sources
Product behavior was read from the Lumx documentation on November 1, 2026: exchange rates, the exchange rate API reference, the off-ramp API reference, the errors catalog, transactions, destinations, partner fees, payment rail cut-off times and the off-ramp integration prompt.
The BRL rates are the PTAX sell rates from the Central Bank of Brazil's PTAX open data service, queried for October 1 to October 30, 2026 on November 1, 2026, taking the last bulletin of each business day. The COP figures come from the TRM series on the Colombian open data portal, read the same day. The Banxico series needs an API token, so no MXN figure is given.
The Bre-B ceiling is the 1,000 UVB limit in Banco de la República's Circular Reglamentaria Externa DSP-465 of August 6, 2026, Asunto 18, numeral 3.2. COP 12,110,000 is the 2026 value of 1,000 UVB.
Verified on November 1, 2026. Operational context, not legal, tax, or investment advice.
Cover photo: Mason Kimbarovsky on Unsplash.
How do I pay an exact local amount from USDC?
Quote the payout on the receiving side. Set the local amount as the target of a locked quote, then submit the payout with the quote's id before the window closes. The USDC cost comes back from the quote, and the quote's final target amount is what you compare with the invoice. On Lumx, you send a LOCKED request to the exchange rates endpoint with a target amount and a timelock of 30 seconds, 1 minute or 5 minutes, then pay the destination through the off-ramp endpoint with the exchangeRateId.
Does the recipient get the full amount or do fees come out of it?
Fees sit on the stablecoin side of the quote, so none should come out of the local amount, and only the recipient's own bank can charge them. On Lumx, no fee is deducted from the amount that lands on a Pix, SPEI or Bre-B payout, and the fee lines are itemized in the quote before you submit.
Which lock duration should I choose for an exact payout?
Choose the shortest window that covers the time between pricing and submitting. A floating quote needs no lock but takes a source amount only, so it suits an estimate, not an exact payout. On Lumx, a locked quote takes a source or a target amount, the 30-second lock has no additional fee, the 1-minute and 5-minute locks include one, and the default is 30 seconds.
What happens if the quote expires before I pay?
Nothing moves, and the old quote cannot be revived. You request a new quote for the same local amount, which comes back with a new id and reprices the USDC side for the same local target. On Lumx, the rejection is a 422 with the code EXCHANGE_RATE_EXPIRED, a quote already consumed returns EXCHANGE_RATE_ALREADY_USED, and the answer to both is to check the first transaction and then quote again.
Can I pay an exact amount in Colombian pesos?
COP payouts run over two rails chosen when the destination is registered. Bre-B is capped at 1,000 UVB per transaction, which is COP 12,110,000 in 2026, and a payout above the cap is rejected and never split. ACH Colombia has no per-payment limit. On Lumx, the COP payout debits the paying customer's wallet, and the Bre-B cap is checked against the destination's rail.





