Rate Formation: Platform Fee + Partner Markup
The rate a client sees is assembled from several layers. Understanding the layered model is what lets you manage markup deliberately: compete on price in monitoring listings in some places, earn on convenience in others. This page covers the full calculation mechanics.
The layered rate model
Every rate passes through four layers — from the market to the final client value:
L0 market_rate # market rate (exchanges / price aggregators)
L1 = L0 * (1 + spread) # platform spread: volatility and execution risk
L2 = L1 * (1 + platform_fee) # platform fee — already included in the partner rate
L3 = L2 * (1 + partner_markup) # partner markup — your revenue
- L0 — market. The base rate from external sources, continuously updated.
- L1 — spread/risk. The platform’s technical layer: compensation for slippage and volatility between order creation and execution.
- L2 — platform fee. The platform’s remuneration. The partner always receives a rate with the fee already included — no need to subtract it separately.
- L3 — partner markup. Your percentage on top of the L2 rate, set individually per direction. This layer is your revenue.
On-demand calculation
The platform works on a pull model: a rate is calculated at the moment of the request, not taken from a pre-computed feed.
- A client opens the widget or an API request arrives → the platform takes the current L0 and runs all layers → the client sees a fresh rate.
- There are no pre-computed XML feeds with frozen rates: the monitoring export is also generated from current on-demand rates (see Partner API & Monitoring Integrations).
- When an order is created, the rate is fixed for the payment window (order timer). If the client misses the window, the order is recalculated at the new rate or cancelled.
Numeric example
Direction BTC → USDT:
L0 market_rate = 100000 USDT/BTC
L1 spread = 0.4% -> 100000 * 0.996 = 99600
L2 platform_fee = 0.6% -> 99600 * 0.994 = 99002.4
L3 partner_markup = 0.5% -> 99002.4 * 0.995 = 98507.39
The client receives USDT at 98507.39. The L3 layer (≈495 USDT per 1 BTC) is the partner’s gross revenue from the order.
The sign of each adjustment depends on the side of the pair: when the client sells the base asset, adjustments lower the rate; when buying, they raise it. The panel shows the final rate per direction — no manual recalculation needed.
Managing markup
- Per direction. Markup is set on each direction separately: partner_markup = 0.005 means 0.5%.
- Competitive pairs. On BTC/ETH/USDT, markup directly affects your monitoring listing position — it is usually minimal here.
- Niche pairs. On rare networks, cash directions, and “inconvenient” payouts, markup is set higher — the client pays for availability and speed.
- Dynamics. Markup can be changed at any time; the new value applies to the next rate request (on-demand), orders already created are not recalculated.
Connection to the Own Liquidity Module
If Own Liquidity Module v1 is enabled, one more multiplier is added to the final rate — inventory_skew, which adjusts the price based on the current inventory position (asset surplus/deficit). Formula and behavior: Pricing Engine.
See also