# Pricing and fees

> What a payment and a refund cost, when a fee is charged, worked examples and the fee fields of the API.

Source: https://rais.app/docs/pricing

Raïs charges a fee on each **paid payment** and on each **refund**, and nothing else: no subscription, no setup fee, no fee on a payment that fails, and no fee on a withdrawal. Every figure on this page excludes VAT (HT, *hors taxes*). The public prices, with a calculator, are on the [pricing page](https://rais.app/pricing).

## The price list

|  | SATIM | Raïs | Total |
| --- | --- | --- | --- |
| A payment | 0.7% of the amount, never less than 10.00 DA and never more than 300.00 DA | 0.3% of the amount, with no minimum and no maximum, on top of SATIM's | Both added |
| A refund | 8.00 DA | 2.00 DA | 10.00 DA, whatever the amount |

A payment therefore costs about 1% of its amount for an ordinary amount: SATIM's 0.7% plus Raïs's 0.3%. SATIM's minimum makes the smallest payments cost more in proportion: the minimum payment, 50.00 DA, costs 10.15 DA.

## How a fee is worked out

Fees are whole centimes, worked out with integers (never floating point): a percentage is a number of basis points, and the share of an amount is `(amount × basis points + 5000) ÷ 10000`, a half rounded up. SATIM's part is 70 basis points, kept between 10.00 DA and 300.00 DA; Raïs's is 30 basis points. A fee never exceeds the amount it is taken from: SATIM's part is taken first.

## Examples

| Amount | SATIM | Raïs | Total fee | You receive |
| --- | --- | --- | --- | --- |
| 50.00 DA | 10.00 DA | 0.15 DA | 10.15 DA | 39.85 DA |
| 1,000.00 DA | 10.00 DA | 3.00 DA | 13.00 DA | 987.00 DA |
| 5,000.00 DA | 35.00 DA | 15.00 DA | 50.00 DA | 4,950.00 DA |
| 10,000.00 DA | 70.00 DA | 30.00 DA | 100.00 DA | 9,900.00 DA |
| 50,000.00 DA | 300.00 DA | 150.00 DA | 450.00 DA | 49,550.00 DA |
| 100,000.00 DA | 300.00 DA | 300.00 DA | 600.00 DA | 99,400.00 DA |
| 500,000.00 DA | 300.00 DA | 1,500.00 DA | 1,800.00 DA | 498,200.00 DA |

At 1,000.00 DA SATIM's minimum applies: 0.7% would be 7.00 DA, so SATIM's part is 10.00 DA. At 50,000.00 DA its maximum applies: 0.7% would be 350.00 DA, so SATIM's part is 300.00 DA, while Raïs's part keeps growing with the amount.

A refund costs 10.00 DA (8.00 DA for SATIM and 2.00 DA for Raïs) whether it refunds 1.00 DA or 50,000.00 DA.

## When a fee is charged

| What happens | What it costs |
| --- | --- |
| A payment is **paid** | Its fees are charged, once, when it is paid. They are set on the payment (`fees`, `net`) and, for a live payment, taken from your balance as a separate line of your ledger. |
| A payment **fails**, is declined, expires or is cancelled | Nothing. |
| A payment is **refunded**, in full or in part | The fees of the payment are **not returned**. The refund has its own fee. |
| A refund **succeeds** | Its fee, 10.00 DA, is charged. |
| A refund **fails** | Nothing. A refund that does not go through costs nothing. |
| A refund is **pending** (the gateway's answer was lost) | Its fee is reserved on your balance with its amount, and only charged if the refund goes through. |
| A **withdrawal** to your bank account | Nothing. |

## Fees in the API

A payment carries what it cost you and what you receive. `fees` is `null` until the payment is `paid`; `net` is `amount` minus `fees.total`, before any refund:

~~~json
{
  "id": "5b1c2f4e-9d3a-4c61-8a7e-0f2d6b9e1a33",
  "amount": 500000,
  "fees": {
    "satim": 3500,
    "rais": 1500,
    "total": 5000
  },
  "net": 495000
}
~~~

A refund carries its own `fees` once it has `succeeded` (`null` while it is `pending` and when it `failed`):

~~~json
{
  "id": "0c8a1d52-6e7b-4f0a-9b3d-7d2e4a8c5f10",
  "amount": 150000,
  "status": "succeeded",
  "fees": {
    "satim": 800,
    "rais": 200,
    "total": 1000
  }
}
~~~

| Field | Meaning |
| --- | --- |
| `fees.satim` | SATIM's part, in centimes, excluding VAT. |
| `fees.rais` | Raïs's part, in centimes, excluding VAT. |
| `fees.total` | `satim` + `rais`: what the payment or the refund costs. |
| `net` | On a payment: `amount` minus `fees.total`. What you receive for it, before any refund. |

The same objects travel in the events and the webhooks: a `payment.succeeded` event carries the payment with its `fees` and `net`, and a `refund.succeeded` event the refund with its `fees`. See [Webhooks](https://rais.app/docs/webhooks.md) and the [payment](https://rais.app/docs/api/objects/payment.md) and [refund](https://rais.app/docs/api/objects/refund.md) objects.

What you keep from a payment that was refunded is its `net`, minus the amount refunded, minus the `fees.total` of each refund that succeeded. For the payment above refunded by 1,500.00 DA: 4,950.00 DA − 1,500.00 DA − 10.00 DA = 3,440.00 DA.

## Your balance and refunds

A live payment is credited to your balance in full, and its fees are taken from the balance right after, so the balance moves by the payment's `net`. A live refund is taken from your balance with its fee: **the balance must cover the amount of the refund and its fee**, otherwise the answer is `insufficient_balance` ("The store's balance is not sufficient to cover this refund and its fee."). Because the fee of the payment is not returned, a store that has received a single payment can refund at most its balance minus 10.00 DA. See [Refunds](https://rais.app/docs/refunds.md#what-a-refund-costs).

## Test mode

The sandbox shows the same figures, marked as **simulated**: a paid sandbox payment has its `fees` and `net`, and a succeeded sandbox refund has its `fees`, exactly as in live. Nothing is charged, no balance changes and no ledger line is written. See [Test cards and sandbox](https://rais.app/docs/testing.md).

## Payments from before fees

A payment paid before fees were introduced has `fees: null` and `net: null`: nothing is charged afterwards for it, and the dashboard shows no fee for it.

## What is not included

Every price excludes VAT: the amounts in `fees` are the HT prices above. The price list is versioned (`2026-10`): the fees of a payment are fixed when it is paid, with the price list of that day.
