deducted_at_final_settlement, denominated in USD.
Read your rates from configuration
Read the rates at startup rather than hardcoding them.fees on that response carries platformFeeBps, partnerFeeBps and totalFeeBps, each with a matching percent, plus model and currency. Your rates can change; an in-flight payment’s cannot.
Read the fee snapshot on the payment
Every payment carries afees object, returned only to the partner that owns those terms.
quote_pending exposes the frozen rates while the three amounts are still null, because a provider quote has not been frozen yet. quoted exposes immutable exact amounts, including genuine zeros.
Absent is not zero. A zero fee comes back as the string "0". A null means the amount is not available or fee visibility is restricted for that credential, and your screen needs a state for it that is not 0.00.
Compute each component from the gross
Each component is computed independently from the gross, in atomic units, and floored:Amounts are atomic integer strings.
24.812500 USDC is 24812500 at six decimals. Do not rebuild these in floating point, and do not assume six decimals for every asset.Know which side absorbs the fee
Worked example: depositing funds
A payment for25.000000 USDC, with example rates of 50 bps platform and 25 bps partner.
Settlement delivers the net. See Merchant settlement.
Worked example: sending payments
Deliver exactly10.000000 USDC, same example rates.
On a send,
merchantNetAmountAtomic equals the delivered amount, and the three figures sum to sourceAmount.
One payment carries one fee snapshot
Every funding option satisfies the same escrow obligation, so however the payment is funded, the snapshot on it is the whole commercial charge.- Routing does not add a fee. A cross-chain or cross-token send uses exact output and does not reduce the authorized destination amount for slippage.
- Conversion does not add a fee. It happens inside the payment, on the selected option, with no second resource and no second deduction. See Conversion.
- A funding leg does not add a fee. A Vault-funded leg reports
commercialFeeMode: "parent_payment": the parent payment’s snapshot is authoritative and the leg cannot accrue a second commercial fee.
Fiat sends carry a third component
A send to a bank beneficiary, a linked bank account or a local merchant is priced by a provider quote on the payment’sfunding object.
Every component is denominated in the stablecoin being funded, even when the recipient is paid in local currency. Display them in that asset, and show the rate in the direction it was quoted rather than inverting it.
totalFees excludes any additional fee quoted separately by a selected funding method.
Your partner fee accrues per movement
Your partner fee is not invoiced. It is collected in the same deduction as the platform fee and accrues to you as its own ledger entry per movement.
Each entry records the gross, net and fee amounts, the rate in basis points and the asset. When fee movement fails, the payment’s
operationalReasonCode says so with fee_payout_failed or fee_payout_requires_intervention. How and when your accrued balance is remitted is a commercial term in your agreement, not an API behaviour.
What the calculation excludes
- Network costs. Gas and unavoidable source-network costs sit outside the basis-point calculation and are not reported inside it.
- A payout rail’s own fee. Reported separately as
funding.providerFeeon a fiat send, never folded into the two commercial components. - Costs quoted on a selected funding method. Additional, and disclosed on the option that was selected.
- A published FX spread. None exists. What is published is the directional rate frozen onto each quote, and that is the number to show and reconcile against.
- Per-account, per-address or per-webhook charges. None are described in this product. If your agreement contains one, your agreement is the authority.
Next: On-ramp accounts
Bank details in your customer’s name that convert incoming dollars to stablecoin.