---
title: "How fees work"
description: "How Gravv works out, takes and refunds fees, which account pays them, and where to read them in the API. Prices come from your agreement, not from this page."
---
Gravv charges a fee on each movement or check that your plan prices, such as a payout, a deposit or a KYC check. This page explains how a fee is worked out, when and from where it is taken, and where you can read it. It quotes no prices. Your agreed price list is the only source of prices.

**Example.** Your plan prices a US ACH payout at a flat fee and takes it at once. You send 2,500.00 USD from a customer's account. The transfer response shows the fee in `fee` and `fee_currency`, and Gravv debits the account the amount plus the fee. Later a client wires 1,200.00 USD into another account. Gravv credits the account the full 1,200.00 USD and takes the deposit fee from your business's main account, as a row of its own. If your plan billed deposit fees monthly, the deposit fee would be on your invoice instead.

## How a fee is worked out

- Each fee belongs to a service and a fee type, such as a domestic or an international transfer, a deposit on one rail, or a KYC check. Gravv charges a movement only when a price is set for its fee type. That price is your plan's own price, or Gravv's default price when your plan has none. With neither, Gravv charges nothing.
- A fee is a flat amount, a percentage of the movement's amount, or both added together. A percentage can have a lowest and a highest fee.
- An international transfer fee can depend on the destination country. If there is no price for that country, the general international price applies.
- A price can have a start date or an end date. Gravv applies the price in force when it charges the fee.
- Gravv records and settles a fee set at zero with no money moving.

## When and from where it is taken

For each fee, your plan sets whether Gravv **takes it when it is charged** or bills it on your **monthly invoice**.

| Fee | Taken from | When it is billed monthly |
| :-- | :-- | :-- |
| A transfer's fee | The sending account, together with the amount. The send needs the amount plus the fee in the balance, or it returns `400` `insufficient balance` | On the invoice |
| A deposit fee | Your business's main account. It is never taken out of the deposit | On the invoice |
| A KYC fee for a person or a business | Your business's main account | On the invoice |
| Any other fee with no account of its own | Your business's main account | On the invoice |

- When the paying account has no wallet for Gravv to take the fee from, the fee goes on the invoice instead.
- Gravv does not always take a fee at the same moment as its movement. When the paying account cannot cover a fee at once, Gravv tries again over about a week. A fee it still cannot take goes on your monthly invoice. Match fee rows to their movements within a day or so, not to the second.
- Gravv charges each fee type once per movement. A retry with the same `Idempotency-Key` does not charge a second time, and neither does a repeat of an event about the movement.
- Gravv charges the KYC fee once per customer, when KYC starts. Starting KYC again for the same customer, or starting [card KYC](/platform/cards/card-kyc/overview) for them, does not charge it again.

## Refunds

- When a transfer fails or is rejected, the amount and its fee go back to the sending account. See [Transfers](/platform/transfers/overview).
- A refunded fee comes back in full to the account it was taken from, as a row of its own.

## Where to read fees

| Where | What it shows |
| :-- | :-- |
| A transfer response | `fee` and `fee_currency`, the fee priced for this transfer, as a decimal string (`"0"` when none) |
| A transaction row, [`GET /v1/transactions`](/api-reference/transactions/get-v1-transactions) | `fee` on the movement's row |
| Fee rows in the transactions list | `transaction_type` `fee_charge`, `direction` `out`, with a `description` such as `Fee charge: transfers - wire_in`. A refund is `direction` `in`, with a `description` that starts `Fee refund:` |
| Your monthly invoice | Fees billed monthly. They have no `fee_charge` row |
| A collection's `fee_cents` | Always `0`. Gravv bills collection fees to you separately |

- A transfer's `fee` and its `fee_charge` row describe the same fee. Do not add both.
- When Gravv takes a fee in a currency other than the movement's, `fee_currency` shows that currency. For example, a conversion takes its fee in the asset sent.
- Gravv sends no webhook for fees.

To total a month of fees and tie each to its movement, follow [Add up a month of fees](/recipes/transactions/add-up-a-month-of-fees).

## In sandbox

Sandbox fees follow your sandbox pricing, which may differ from live. Fee rows appear only when that pricing has fees. In sandbox, read transfer fees from the transfer rows, because a `fee_charge` row for a transfer may not appear there.
