> ## 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.

This page covers how fees behave in the API. For the actual rates your users pay, see
[end-user pricing](/guides/pricing).

## 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": "2.00", "currency": "USD" },
  "input":  { "amount": "102.00", "currency": "USD" }
}
```

(`$100` by ACH in USDC on Base: 0.5% would be `$0.50`, so the `$2` minimum applies —
see [end-user pricing](/guides/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](/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

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:

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

## Related

<CardGroup cols={2}>
  <Card title="End-user pricing" icon="tag" href="/guides/pricing">
    The standard rates your users pay.
  </Card>

  <Card title="Settlement timing" icon="clock" href="/guides/timing">
    How long each rail takes to settle.
  </Card>
</CardGroup>
