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. This page covers how fees behave in the API. For the actual rates your users pay, see end-user pricing.

Fees on an off-ramp

An off-ramp quote breaks the amounts into three parts:
($100 by ACH in USDC on Base: 0.5% would be $0.50, so the $2 minimum applies — see end-user pricing.)
  • 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
For high-priority deposits, the fee follows the actual release timing:
  • regularPublishedFeeUsd is the fee on the portion released after settlement
  • instantPublishedFeeUsd is the fee on the portion released before settlement
  • publishedFeeUsd is their sum before final adjustments and subsidy
A deposit can be partially instant, so the two portions can have different rates in one quote. Spritz recalculates them at create if the effective release timing changes. Always show userFeeUsd and totalDebitAmountUsd from the create response, even when you already displayed the preparation summary.

Subsidizing fees for your users

Fee subsidy is enabled per integrator. Confirm it is enabled for your integration before sending feeSubsidy; otherwise prepare returns 403. When enabled, you can cover part or all of a user’s fee. 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.

End-user pricing

The standard rates your users pay.

Settlement timing

How long each rail takes to settle.