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

# Assessing fees

> Read your fee rates, the frozen fee snapshot on each payment, and the exact amounts deducted.

Every payment carries two rates in basis points, both frozen onto it at creation and taken in one deduction. 100 bps is 1%, and the collection model is `deducted_at_final_settlement`, denominated in USD.

| Rate | Owed to |
| - | - |
| `platformFeeBps` | Stableyard |
| `partnerFeeBps` | You |

## Read your rates from configuration

<Warning>
  **No rate card exists in this documentation.** Your platform rate and your partner rate are set in your agreement, written onto your organization, and returned by `GET /v2/partners/config`. Every number on this page is a labelled example, not your pricing.
</Warning>

Read the rates at startup rather than hardcoding them. `fees` on that response carries `platformFeeBps`, `partnerFeeBps` and `totalFeeBps`, each with a matching percent, plus `model` and `currency`. Your rates can change; an in-flight payment's cannot.

## Read the fee snapshot on the payment

Every payment carries a `fees` object, returned only to the partner that owns those terms.

| Field | What it holds |
| - | - |
| `pricingStatus` | `quote_pending` or `quoted` |
| `platformFeeBps`, `partnerFeeBps` | The two rates, frozen at creation |
| `platformFeeAmountAtomic`, `partnerFeeAmountAtomic` | The exact amounts, in atomic units |
| `merchantNetAmountAtomic` | What the destination receives after the deduction |
| `version` | The fee snapshot version |

`quote_pending` exposes the frozen rates while the three amounts are still `null`, because a provider quote has not been frozen yet. `quoted` exposes immutable exact amounts, including genuine zeros.

**Absent is not zero.** A zero fee comes back as the string `"0"`. A `null` means the amount is not available or fee visibility is restricted for that credential, and your screen needs a state for it that is not `0.00`.

## Compute each component from the gross

Each component is computed independently from the gross, in atomic units, and floored:

```
platformFeeAmount = gross × platformFeeBps ÷ 10000
partnerFeeAmount  = gross × partnerFeeBps  ÷ 10000
net               = gross − platformFeeAmount − partnerFeeAmount
```

The three always sum back to the gross, so a payment reconciles against itself. Two constraints hold at creation: the combined rate must be under 10000 bps, and the net must be greater than zero.

<Note>
  Amounts are atomic integer strings. `24.812500 USDC` is `24812500` at six decimals. Do not rebuild these in floating point, and do not assume six decimals for every asset.
</Note>

## Know which side absorbs the fee

| Flow | You name | Where the fee comes from |
| - | - | - |
| **Depositing funds** | What the payer sends | Calculated from the independently verified destination amount, not the quoted amount or what the payer sent, and deducted from it. The recipient nets less than the gross |
| **Sending payments** | What the recipient receives | Added on top. `sourceAmount` is the total sender debit, and delivery is never shaved |

### Worked example: depositing funds

A payment for `25.000000 USDC`, with example rates of 50 bps platform and 25 bps partner.

| Line | Amount | Derivation |
| - | - | - |
| Gross verified | `25.000000` | What arrived and was independently verified |
| Platform fee, 50 bps | `0.125000` | `25000000 × 50 ÷ 10000` |
| Partner fee, 25 bps | `0.062500` | `25000000 × 25 ÷ 10000` |
| **Recipient net** | **`24.812500`** | Gross minus both components |

Settlement delivers the net. See [Merchant settlement](/settlement/merchant-settlement).

### Worked example: sending payments

Deliver exactly `10.000000 USDC`, same example rates.

| Line | Amount | Derivation |
| - | - | - |
| Delivered to the destination | `10.000000` | The amount you named, unchanged |
| Platform fee, 50 bps | `0.050000` | `10000000 × 50 ÷ 10000` |
| Partner fee, 25 bps | `0.025000` | `10000000 × 25 ÷ 10000` |
| **`sourceAmount`, total debit** | **`10.075000`** | Delivery plus both components |

On a send, `merchantNetAmountAtomic` equals the delivered amount, and the three figures sum to `sourceAmount`.

## One payment carries one fee snapshot

Every funding option satisfies the same escrow obligation, so however the payment is funded, the snapshot on it is the whole commercial charge.

* **Routing does not add a fee.** A cross-chain or cross-token send uses exact output and does not reduce the authorized destination amount for slippage.
* **Conversion does not add a fee.** It happens inside the payment, on the selected option, with no second resource and no second deduction. See [Conversion](/payments/conversion).
* **A funding leg does not add a fee.** A Vault-funded leg reports `commercialFeeMode: "parent_payment"`: the parent payment's snapshot is authoritative and the leg cannot accrue a second commercial fee.

Reconcile against the frozen snapshot rather than recomputing from your current rates. A rate change must never rewrite an in-flight payment, a receipt or a dispute record.

## Fiat sends carry a third component

A send to a bank beneficiary, a linked bank account or a local merchant is priced by a provider quote on the payment's `funding` object.

| `funding` field | What it is |
| - | - |
| `required` | The exact source amount to fund |
| `providerPrincipal` | The amount forwarded to deliver the payout |
| `providerFee` | The payout rail's own fee |
| `platformFee`, `partnerFee` | The same two components, in the funding asset |
| `totalFees` | All three added together |
| `exchangeRate` | Directional: one unit of `baseAssetCode` equals `rate` units of `quoteAssetCode` |

<Warning>
  `totalFees` is a breakdown of money **already inside** `required`. Adding it to `required` charges your customer twice. Show it as a breakdown, never as a surcharge.
</Warning>

Every component is denominated in the stablecoin being funded, even when the recipient is paid in local currency. Display them in that asset, and show the rate in the direction it was quoted rather than inverting it. `totalFees` excludes any additional fee quoted separately by a selected funding method.

## Your partner fee accrues per movement

Your partner fee is not invoiced. It is collected in the same deduction as the platform fee and accrues to you as its own ledger entry per movement.

| State | Meaning |
| - | - |
| `quoted` | Priced onto the payment, nothing owed yet |
| `accrued` | Earned, not yet taken |
| `collected` | Taken out of the settlement |
| `settled` | Finalised against a completed settlement |
| `reversed` | Backed out, because the underlying movement was reversed |

Each entry records the gross, net and fee amounts, the rate in basis points and the asset. When fee movement fails, the payment's `operationalReasonCode` says so with `fee_payout_failed` or `fee_payout_requires_intervention`. How and when your accrued balance is remitted is a commercial term in your agreement, not an API behaviour.

## What the calculation excludes

* **Network costs.** Gas and unavoidable source-network costs sit outside the basis-point calculation and are not reported inside it.
* **A payout rail's own fee.** Reported separately as `funding.providerFee` on a fiat send, never folded into the two commercial components.
* **Costs quoted on a selected funding method.** Additional, and disclosed on the option that was selected.
* **A published FX spread.** None exists. What is published is the directional rate frozen onto each quote, and that is the number to show and reconcile against.
* **Per-account, per-address or per-webhook charges.** None are described in this product. If your agreement contains one, your agreement is the authority.

Fees apply wherever money moves. The provider component exists only on fiat sends, in the markets where those rails are enabled. [View supported regions and currencies →](/supported-regions-and-currencies)

<Card title="Next: On-ramp accounts" icon="building-columns" href="/concepts/on-ramp-accounts">
  Bank details in your customer's name that convert incoming dollars to stablecoin.
</Card>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.