Fees¶
How each payment's fee is computed, when it is fixed, whether a refund gives it back, and where to see your app's rule. About 5 minutes to read. A fee is taken only from an app with settlements on (Settlements) — today every capture is fee-free.
There is no public price list: the operator sets the fee per app, by contract.
The payment rule¶
The operator writes a payment rule for each app. Rules are versioned: a rule applies from its effective_from
until a new version with a later effective_from takes over. A rule in effect is history — never edited, never
deleted (a change is a new version). A rule that has not started yet may still be edited by the operator.
| Field | Rule | Meaning |
|---|---|---|
fee_bps |
0 – 5000 | percentage in basis points (100 = 1 %, 5000 = 50 %) |
fee_fixed |
0 – 1 000 000 ₮ | a fixed amount added to each payment |
fee_min · fee_max |
0 – 50 000 000 ₮ or null, min ≤ max |
floor · ceiling |
refund_fee |
boolean, default false |
whether refunds give the fee back in proportion |
schedule · settle_time · delay_days |
Settlements | the settlement schedule (Ulaanbaatar time, T+0 – T+14) |
With no rule, the default: no fee, weekdays at 10:00, T+1.
Formula¶
fee = round_half_up(amount × fee_bps / 10000) + fee_fixed
→ at least fee_min → at most fee_max → at most amount
round_half_up — the nearest integer, exact halves up; on the percentage alone, once per payment
fee_bps |
amount |
Computation | fee |
|---|---|---|---|
| 150 (1.5 %) | 10 033 | 150.495 → 150 | 150 |
| 150 (1.5 %) | 10 034 | 150.51 → 151 | 151 |
| 150 (1.5 %) | 100 | 1.5 → 2 | 2 |
200 (2 %) + fee_fixed 50 |
25 000 | 500 + 50 | 550 |
An intent's fee and net (amount − fee) are set only for a payment captured while the app's settlements are on;
null otherwise, in test and before capture (Payment intent).
When the fee is fixed¶
The fee is computed under the rule in force at the moment the capture becomes owed (automatic: the person
confirmed and the hold was placed; manual: your capture call) and written on the intent — never recomputed. A
later change of the rule, or a retried capture, leaves the fee as it was fixed.
The fee is not taken out at capture: the capture moves the full amount to clearing, and the settlement takes
the fee (the Settlement's fee).
Fees and refunds¶
refund_fee: false(default): a refund keeps the fee — the payment happened. If after a full refund there is no money to take the fee from, it moves to the next settlement (fee_carried_*).refund_fee: true: each refund gives back its share of the fee:
share(R) = round_half_up(fee × R / amount), a refund's share = share(earlier refunds + this one) − share(earlier refunds).
The shares of partial refunds add up exactly to the whole fee once everything is refunded. Example: a payment with a 100₮ fee refunded in three equal parts gives back 33 + 34 + 33 = 100.
The fee given back shows as fee_returned on the settlement and on the refund's line.
Where to see it¶
The developer console's API — GET /api/v1/miniapp/dev/apps/{id}/payment-rule (an organisation session,
miniapp.read). The operator's notes and who wrote the rule are not shown:
{
"current": {
"id": "8f2c…", "version": 2, "effective_from": "2026-11-01T00:00:00Z", "in_effect": true, "current": true,
"fee_bps": 150, "fee_fixed": 0, "fee_min": null, "fee_max": 5000, "refund_fee": false,
"schedule": "weekdays", "settle_time": "10:00", "timezone": "Asia/Ulaanbaatar", "delay_days": 1,
"created_at": "…", "updated_at": "…"
},
"upcoming": [],
"default": { "fee_bps": 0, "fee_fixed": 0, "schedule": "weekdays", "settle_time": "10:00", "delay_days": 1, "…": "…" },
"settlements_enabled": true,
"settlement_since": "2026-11-01T00:00:00Z"
}
current — the rule in force now (null: the default applies); upcoming — versions not started yet (soonest
first); settlements_enabled — whether the app has settlements on. Reading the rule through the server API (an API
key) is coming soon; for now, the console.
Test mode¶
Test payments carry no fee (fee = null, never settled) — the rule's effect cannot be seen in test mode; compute
it with the formula above.