Skip to main content
Fees are always quoted upfront. Before any money moves, the quote or prepare step shows exactly what the fee is, so you and your user can see the full cost before committing. There are no surprise charges after the fact.

Fees on an off-ramp

An off-ramp quote breaks the amounts into three parts:
  • output.amount is what the destination receives
  • fees.amount is the fee ("0.00" when there’s none)
  • input.amount is the total the user pays, and always equals output.amount + fees.amount
Because the quote is explicit, you can show the user the fee and the total before they fulfill it. See amount modes for controlling whether you specify the amount received or the total paid.

Fees on an ACH deposit

A linked bank on-ramp deposit returns a fuller breakdown, since the fee can be split between the user and you:
  • principalAmountUsd: the value delivered as crypto
  • grossFeeUsd: the total fee before any subsidy
  • feeSubsidyUsd: the portion you cover on the user’s behalf
  • userFeeUsd: what the user actually pays
  • totalDebitAmountUsd: what is pulled from the bank (principalAmountUsd + userFeeUsd)
  • feeRateBps: the fee rate applied, in basis points

Subsidizing fees for your users

You can cover part or all of a user’s fee. When preparing an ACH deposit, pass a feeSubsidy with the percentage of the fee to cover and an optional per-transaction cap:
  • percentage is 0 to 100
  • maxAmountUsd caps how much you’ll cover per transaction
The result shows up as feeSubsidyUsd (what you covered) and userFeeUsd (what remains for the user). For example, a $3 fee with percentage: 100 means the user pays $0 and you cover $3; with a $5 cap, an $8 fee leaves the user paying $3.