Skip to content

A system that keeps exchanger rates near the target position.

iEXRates collects BestChange offers, calculates final rates by your rules, tracks competitors, publishes TXT files, and shows the operator exactly why a rate was selected.

The module is designed for exchangers that need more than pulling a BestChange rate: position control, margin, commissions, cities, exclusions, formulas, and fast updates across many directions.

Price—
  • Position guard

    top-1, top-2, top-3 and selected competitors

  • Rate formulas

    tags, fees, steps, rounding and preview

  • TXT files

    one file per profile

  • Go engine

    fast updates for large lists

Core idea

Not a rate table, but a BestChange market control center

The administrator configures a profile, directions, and rules. The system then updates dictionaries, checks available pairs, receives offers, applies formulas, protects the position, and prepares public files for the exchanger website.

Directions and cities

For cash directions the city becomes part of the pair and TXT code so rates do not mix across cities.

Offer filters

Reserve, limits, exchanger marks, blocklists, own exchanger and zero values can be accounted for.

Exchanger tracking

The system can follow a selected competitor and automatically stay above or below it.

directions can be handled through server pagination and batch updates
100k+
BestChange and external sources separated inside one admin panel
2
live update state, incidents, logs and TXT freshness
24/7

Included

Main iEXRates capabilities

BestChange profile

A single place for language, rate type, interval, timeout, default position, own exchanger and TXT publishing settings.

  • Shared API URLs and mirrors with ping and priority
  • keys are stored in the database and managed from admin panel
  • each profile gets its own TXT file

Workflow example

How the owner configures a paire

Rules are configured once. iEXRates then receives the market, selects the correct offer, applies protection, and publishes the final rate.

  1. Select pair

    For example BTC to cash RUB, with Moscow as a required city.

  2. Set target

    Position #2, stay above a selected exchanger, or average top-10.

  3. Apply rules

    Filters, reserve, limits, blocklist, fee, rounding and jump protection.

  4. Publish TXT

    A ready code like BTC-CASHRUB_MSK is written to the profile file and available to the site.

Formulas

Formulas as a standalone product inside the system

The formula editor shows available tags, explains every calculation step, and allows checking the result before saving. This is useful when a rate must account for several conditions at once.

rule example

Formula preview

[pos:3]
+ step_to_competitor
− 0.15%
Position
#3
Competitor
Exchanger

Best rate, exact position, position range, average of several places, own exchanger or competitor.

Tracking and fees

A rate can follow a selected exchanger, above it or below it

For every paire you can choose a target exchanger, above or below mode, minimum step, change limit, commission, and fallback if the target competitor disappears from the list.

rule example

Target
Exchanger · #3
Action
stay above by step
Fee
−0.15%

Selected exchanger tracking

A paire can target not only a position, but a specific exchanger from the BestChange list.

Stay above or below

You can keep the rate slightly above the selected competitor or safely below it.

Jump protection

Change limits and anti-jump rules prevent sudden moves from random offers or temporary market errors.

Fees and adjustments

A rate can use +1, -1, +1%, -1%, /5, /5%, or a custom formula to include margin and costs.

Condition filters

Rules can account for positions, reserve, limits, exchanger marks, city, and blocklists.

Explainable calculation

Trace shows the selected offer, applied step, commission point, and why the final value reached TXT.

Analytics

You can see what updated, what is delayed, and why a rate changed

The operations center shows update speed, TXT freshness, queue health, API errors, calculation history, and paire quality.

Update speed

Shows update duration, successful pairs, stale directions and per-second speed.

History and charts

You can inspect final rate, raw rate, position, spread between places and competitor behavior.

Incidents

A problem becomes a clear card: where it failed, what happened to the key, URL, paire and TXT.

Access control

Key login, permission groups, users and audit trail help the team work safely.

Fast engine

Updates run as a pipeline, not one heavy request

The Go engine splits work into stages: dictionaries, paire checks, offer fetching, calculation, position guard, and file generation. This reduces latency and scales to thousands of pairs.

  1. dictionary.sync

    Dictionaries

    Currencies, cities, exchangers and marks update on the server and are read locally.

  2. presence.scan

    Paire check

    The system can first check which pairs actually exist to avoid unnecessary rate loading.

  3. rates.fetch

    Offer fetching

    URL/key pool, limits, retries, snapshot cache and fallback help tolerate API instability.

  4. rates.calculate

    Rate calculation

    Formulas, positions, fees, steps and limits produce one explainable final rate.

  5. guard.apply

    Position guard

    Target position, competitor, minimum step and allowed change are checked.

  6. txt.generate

    File generation

    TXT is rebuilt only on changes, keeping publication fast.

Additional sources

BestChange remains the core, but rates can be extended with external sources

Binance, Bybit, WhiteBIT, Heleket, file, and manual rates can use separate profiles, own codes, fees, TXT files, and server-side pagination.

  • binance[binance_usdt-btc]
  • bybit[bybit_usdt-btc]
  • whitebit[whitebit_usdt-btc]
  • heleket[heleket_usdt-btc]
  • manual[manual_usdt-btc]

direct rate, inverse 1/rate or custom fee

Useful resources

Get ready to connect

Instructions and help with setting up your product.

Connection and setup

Instructions for setup and connection to iEXExchanger.

Under the hood

What iEXRates is built with

iEXRates is split into an admin panel, API, and a separate Go engine. The admin panel does not call BestChange directly: it works with prepared data from PostgreSQL, Redis, and logs, while server-side workers update rates.

Frontend

Operator admin panel

React/Vite SPA with i18n, TanStack Query, server-side tables, virtual lists, and live operations screens.

  • React + TanStack Query

    request cache, refresh without reloads and stable screen updates

  • TanStack Table + Virtual

    pagination, filters and virtual lists for thousands of rows

  • Tailwind CSS + Vite

    fast builds and responsive admin interface

  • TypeScript strict

    strict typing for forms, API contracts and UI state

Backend

API, workers, and queues

NestJS 11 powers the admin API, public API, profile settings, access control, scheduler, job queue, and admin events.

  • NestJS 11

    unified API for profiles, directions, logs, access and sources

  • PostgreSQL + Prisma ORM

    primary database, strict models and schema migrations

  • Redis

    hot cache, live state, locks and fast snapshots

  • ClickHouse

    fast logs, update history and event analytics

Infra

Self-hosted deployment

iEXRates is deployed as a standalone server product: Go engine, Docker Compose, Nginx, PostgreSQL, Redis, ClickHouse, and public TXT file delivery.

  • Go

    worker pool, batch updates, rate limits and atomic file generation

  • Docker Compose

    one startup for admin, API, engine, PostgreSQL, Redis, ClickHouse and Nginx

  • Nginx

    API proxying and public TXT file serving

  • Debian 12 / Ubuntu 22.04

    recommended base for server installation

Ready for an exchanger

iEXRates covers the full chain: from BestChange to a ready website rate

Setup is tailored to your exchanger: profiles, API keys, mirrors, directions, formulas, position strategy, TXT files, additional sources, and update analytics.

iEXExchanger clients only

This project connects to an active iEXExchanger license and works as an additional module for the core platform.

Price—