A monthly budget model for cross-border payout costs: volume by corridor, all-in cost, flat fees, and an FX range for local-currency obligations.
To forecast FX costs on cross-border payouts, multiply each corridor's expected volume by its all-in cost from recent quotes, add flat fees per payout, and then put a range around anything you owe in local currency. The first two parts are stable and easy to predict. The third part moves with the market, so budget it as a range, not one number.
Most finance teams get the first part right and miss the third. A fixed BRL payroll can swing more in dollar terms in a month than every payout fee combined.
Key takeaways
Two different costs that behave differently. Mix them and the forecast is wrong every month for reasons nobody can explain.
| Cost | What drives it | How predictable | How to forecast |
|---|---|---|---|
| Transaction cost | Volume x all-in cost per corridor, plus flat fees | Very | Corridor table from last month's quotes |
| FX exposure | Local-currency obligations x rate change | Not at all | Range from historical moves |
Transaction cost is what the quote shows: the gap between commercial_quotation (market rate) and blindpay_quotation (rate after BlindPay's fee), plus flat_fee and any partner_fee_amount (payout quotes docs). How to read an FX quote explains the direction of each rate.
FX exposure only exists if you promised an amount in local currency. If you pay sellers "whatever their USD balance converts to", you have no FX exposure in the budget. You have it on the seller's side.
Use cost per delivered dollar from last month's real payouts. For each payout, value what landed at the market rate on the quote, compare it with what you sent, and average by corridor. Cost per delivered dollar has the formula and the eight hidden costs to include.
You need the quote fields stored per payout. If you followed the payout quality metrics guide, your event log already has quote_id, the quoted receiver_amount, and the delivered amount. If not, start logging now. One month of data is enough for a first forecast.
For the flat part, BlindPay exposes the fee schedule. GET /v1/instances/{instance_id}/billing/fees returns a fee object per payment rail and network, with payout_flat in cents and payout_percentage in basis points. It requires the owner or admin role (billing docs). There is no static public rate card, so this endpoint and the live quote are the two sources of truth.
A company pays contractors and suppliers in three corridors. All numbers are illustrative. Use your own quote history.
| Corridor | Volume (USD) | Payouts | All-in cost | Flat fee | Cost |
|---|---|---|---|---|---|
| BRL over Pix | 250,000 | 400 | 0.70% | 1.00 USD | 250,000 x 0.007 + 400 x 1.00 = 2,150 |
| MXN over SPEI | 120,000 | 150 | 0.60% | 1.00 USD | 120,000 x 0.006 + 150 x 1.00 = 870 |
| EUR over SEPA | 80,000 | 40 | 0.50% | 2.00 USD | 80,000 x 0.005 + 40 x 2.00 = 480 |
| Total | 450,000 | 590 | 3,500 USD |
Transaction cost: 3,500 USD, or 3,500 / 450,000 = 0.78% of volume. That number will be close to next month's actual if volumes hold.
Now the BRL line is a payroll promised in reais: 1,300,000 BRL a month. At a budget rate of 5.20 BRL per USD, that's 1,300,000 / 5.20 = 250,000 USD. Suppose the typical monthly move in the USD/BRL rate is about 4% (illustrative, measure your own).
| Scenario | Rate | Dollar cost of 1,300,000 BRL | Versus budget |
|---|---|---|---|
| USD/BRL up 4% (weaker real) | 5.20 x 1.04 = 5.408 | 240,384.62 USD | -9,615.38 |
| Budget | 5.20 | 250,000.00 USD | 0 |
| USD/BRL down 4% (stronger real) | 5.20 x 0.96 = 4.992 | 260,416.67 USD | +10,416.67 |
Look at the sizes. The whole month's transaction cost is 3,500 USD. The FX range on one payroll is about 20,000 USD wide. That's why the FX line gets its own row and its own owner.
Use history, not a forecast. Pull a daily series for the currency, compute month-over-month changes, and take a typical move (the standard deviation of monthly changes is a common choice). The Federal Reserve publishes daily rates in its H.10 release (Federal Reserve H.10), and FRED hosts them as series you can download: Brazilian reals per US dollar and Mexican pesos per US dollar.
Three practical rules:
They remove one source of surprise and leave the other. A live quote locks the rate for the payment itself, so there is no slippage between quoting and settling. If the payout executes inside the quote's window, the cost you forecast per corridor is the cost you get.
They don't fix the rate weeks ahead. The 1,300,000 BRL payroll above still costs whatever the market says on payday. That's not a flaw in the rail. It's the nature of a local-currency promise.
Who pays the transaction cost is a separate decision, and it changes which line it lands on. Passing FX costs to users or absorbing them covers that choice.
Split the gap between forecast and actual into three parts, so each one has an owner.
| Variance | Formula | Owner |
|---|---|---|
| Volume | (actual volume - forecast volume) x forecast cost rate | Operations or growth |
| Cost rate | (actual cost rate - forecast cost rate) x actual volume | Payments team |
| FX | local obligation / actual rate - local obligation / budget rate | Treasury |
A cost-rate variance that keeps growing on one corridor is a signal worth chasing: payout sizes changed, a rail changed, or the market got thinner. The FX variance needs no chasing. It's the range doing its job.
If you hold a USDC float to fund payouts, add its carrying cost to the same review. How much USDC to hold for payouts has the sizing formula.
Export last month's payouts with their quote fields, build the three-corridor table above with your own numbers, and pull your fee schedule from the billing fees endpoint to fill in the flat fees.
Seven places blockchain payments beat bank rails: contractor payroll, remittances, B2B suppliers, marketplaces, 24/7 treasury, bill pay, and PSP payouts.
Push means the payer sends an ACH transfer. Pull means you debit a connected account. How each funds a USD to USDC on-ramp, the fees, and the return risk.
AP2, ACP, and x402 each verify that an AI agent had permission to spend. Here is what every protocol covers, who backs it, and the reconciliation gap none of them close.