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

# Application fees

> Charge your own fee on top of Due fees. Portal enforces it server-side so clients cannot override it.

## Overview

An application fee is your markup on top of Due's own fees, charged on every transfer. You
configure it once per environment in the Portal Dashboard, and Portal applies it to every
quote, transfer, and virtual account. Your clients see the fee in their quotes but cannot
change it.

## How enforcement works

Portal enforces fees server-side. On every quote, transfer, and virtual-account update, Portal
strips any `applicationFeeBps` or `applicationFeeAmount` a client sends and injects the fee you
configured. A client can include those fields in a request, but they are always ignored in
favor of your configuration.

<Note>
  The fee is applied to a single side of each transfer (the side you choose), not to both
  sides.
</Note>

## Configure fees in the Portal Dashboard

1. Open the [Portal Dashboard](https://app.portalhq.io).
2. Navigate to the `Integrations` page and open your `Due` integration.
3. Under `Application fees`, set your fee:
   * `Fee`: the percentage you add on top of Due's fees.
   * `Flat fee`: an optional fixed amount added per transfer.
   * `Charge on`: whether the fee comes from the amount sent (`Source`) or the amount received
     (`Destination`).
   * `Different fees per direction`: enable this to set separate fees for pay-ins
     (fiat to crypto) and pay-outs (crypto to fiat). Anything left blank inherits the default.
4. Save.

<Frame>
  <img src="https://mintcdn.com/portal-003221ec/WpJTwXNWzGLR1w_J/images/due/due-config-modal.png?fit=max&auto=format&n=WpJTwXNWzGLR1w_J&q=85&s=4d40a01936b369b1f7c5d979d4068d40" alt="Portal Dashboard Due configuration modal showing the API key input and application fees panel" width="3220" height="2182" data-path="images/due/due-config-modal.png" />
</Frame>

<Warning>
  Fees are environment-scoped, like the API key. Configure them separately for each
  environment (for example Development and Production).
</Warning>

## The fee model

* **Percentage and flat**: set either or both. The percentage applies to the charged side's
  amount; the flat fee is added on top.
* **Default and per-direction**: the default fee applies to every transfer. Optional pay-in and
  pay-out overrides take precedence for their direction and fall back to the default when left
  blank. Direction is derived from the transfer: fiat to crypto is a pay-in, crypto to fiat is a
  pay-out. Virtual account deposits use the pay-in fee.
* **Charge on**: `Source` takes the fee from the amount the customer sends; `Destination` takes
  it from the amount they receive.
* **Subsidies**: a negative percentage subsidizes the customer instead of charging them. Due
  caps the subsidy at its own fee.

## How fees appear to clients

Clients see the fee in the quote response, per side, alongside Due's own fees. They cannot
alter it.

```json theme={null}
{
  "data": {
    "token": "qte_abc",
    "source": { "rail": "ach", "currency": "USD", "amount": "100", "fee": "0.50", "applicationFee": "0.50", "totalFee": "1.00" },
    "destination": { "rail": "base-sepolia", "currency": "USDC", "amount": "99.00", "fee": "0", "totalFee": "0" }
  }
}
```

## Next steps

* [Payins](/integrations/On-Off-Ramp/due-payins)
* [Payouts](/integrations/On-Off-Ramp/due-payouts)
* [Virtual accounts](/integrations/On-Off-Ramp/due-virtual-accounts)
