Six reasons a cross-border payout arrives short, what a support agent should look up for each, and reply templates that close the ticket.
A recipient gets less than expected for six reasons: the rate moved before the quote, fees came off the recipient side, their own bank charged a fee, a SWIFT correspondent deducted in transit, rounding, or the payout fixed the wrong side. The quote and payout records show which. This playbook maps each case to a lookup and a reply.
Amount tickets are the most common cross-border support question, and most of them are not errors. They are a gap between what someone expected and what the quote said. The fix is a routine, not a hunt.
Key takeaways
cover_fees decides who pays.Each has a different lookup and a different owner. Use this as the triage table.
| Ticket type | What the customer says | What to look up | Owner |
|---|---|---|---|
| Rate moved before the quote | "The rate was better this morning" | Quote expires_at vs the time of the rate they saw; commercial_quotation | You, with an explanation |
| Fees on the recipient side | "They got less than the amount I typed" | cover_fees and currency_type on the quote; flat_fee and partner fee lines | You, with a settings fix |
| Recipient bank charges | "My bank shows a lower credit" | Quote receiver_amount vs the bank statement; the rail | Recipient's bank |
| SWIFT correspondent deduction | "The wire arrived short" | provider_uetr and the rail; who paid intermediary charges | Correspondent chain |
| Rounding | "It's a few cents off" | Minor units on both amounts | You, usually closed as expected |
| Wrong side fixed | "I wanted them to get exactly R$ 5,000" | currency_type sender vs receiver | You, with a settings fix |
The first two account for most tickets in a stablecoin payout flow, because they live inside your own product. How on/off-ramp providers make money explains why a fee can sit in the rate and in a flat line at the same time.
The quote, joined to the payout. A BlindPay payout quote returns id, expires_at, commercial_quotation (the raw market rate), blindpay_quotation (the rate net of BlindPay's fee), sender_amount, receiver_amount, flat_fee, partner_fee_amount, and billing_fee_amount (payout quotes docs). Amounts are integers in minor units.
Then check the payout: its status (processing, on_hold, completed, failed, refunded) and its tracking objects (payouts docs). A payout still on_hold hasn't paid anyone yet, so a "short" complaint may really be a "partly arrived" or "not arrived" complaint. How to track an off-ramp payout covers the status reading.
Four questions, in order:
receiver_amount? If yes, the payout paid what it promised.cover_fees false? Then fees came out of the recipient's amount, by design.currency_type sender? Then the stablecoin amount was fixed and the local amount floated with the rate.Do the arithmetic on the quote. Illustrative example, with invented numbers:
A customer pays a contractor 1,000 USDC to BRL. They saw 5.40 on a rate site at 9:00. The payout quote was created at 14:00.
commercial_quotation: 5.35. The market itself moved 0.05 since the morning. On 1,000 USDC that is R$ 50 of the gap.blindpay_quotation: 5.33. The conversion cost is 0.02 per USDC, or R$ 20.cover_fees: false, flat_fee equivalent to R$ 10, taken from the payout.So the R$ 80 gap splits into R$ 50 market movement, R$ 20 rate margin, and R$ 10 flat fee. Each part has a different answer. Only the last two are fees, and both were on the quote before the customer confirmed. Why the Google rate differs from your quote is a good link to send with the reply.
Anything after the bank credit. If receiver_amount matches what left the rail but the recipient's statement is lower, the deduction happened at their bank or in the correspondent chain. Fees to receive a local payout lists what each rail's receiving banks tend to charge.
Give the recipient a way to check for themselves:
provider_uetr once the wire is confirmed, and the first 30 characters of the quote description reach the beneficiary as MT103 field 70 (POBO and COBO). Send SWIFT (POBO/COBO) payouts with the invoice number first so the recipient can find the credit.receiver_amount in minor units.Short, numeric, and with one action. Fill the brackets from the quote.
Rate moved: "The payout used the rate locked at time: blindpay_quotation per USDC, and recipient received receiver_amount, exactly what the quote showed. The rate you saw at earlier time was a market reference, not a quote. To lock a rate, confirm within 5 minutes of the quote."
Fees on the recipient side: "This payout was set so fees came out of the amount received: fee lines. If you'd like recipient to get the full amount, switch to sender-paid fees and we'll add them on top of what you send."
Bank deduction: "We sent receiver_amount over rail, reference rail reference. The difference on recipient's statement was charged by their bank after the credit. They can confirm the incoming amount with that reference."
Wrong side fixed: "The payout fixed the sending amount at sender_amount USDC, so the local amount followed the rate. For exact local amounts, set the receiving amount instead and we'll calculate what to send."
If you offer consumer remittance transfers in the US, check these replies against Regulation E. Its error definitions include the failure to make available to a designated recipient the amount of currency disclosed, and senders get 180 days after the disclosed date of availability to report one (12 CFR 1005.33).
Move the answer to the screen before payment. The quote already holds every number a recipient asks about later.
currency_type: receiver and cover_fees: true.Pull the last 20 amount tickets, label each with one of the six types, and fix the setting behind the biggest group first. The payout quotes docs explain currency_type and cover_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.