> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spritz.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Fees

> How fees are quoted, shown, and subsidized.

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](/guides/use-cases/off-ramp) breaks the amounts into three parts:

```json theme={null}
{
  "output": { "amount": "100.00", "currency": "USD" },
  "fees":   { "amount": "1.25", "currency": "USD" },
  "input":  { "amount": "101.50", "currency": "USD" }
}
```

* `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](/guides/use-cases/off-ramp) for controlling whether you
specify the amount received or the total paid.

## Fees on an ACH deposit

A [linked bank on-ramp](/guides/use-cases/linked-bank-onramp) [deposit](/guides/definitions#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:

```json theme={null}
{
  "feeSubsidy": { "percentage": 100, "maxAmountUsd": "5.00" }
}
```

* `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`.
