--- title: "Баланс и курс" url: "https://docs.x-hub.online/money/balance/" description: "Баланс мерчанта, курс и как читается эффективный курс." relatedDocuments: - "https://docs.x-hub.online/money/withdrawals/" - "https://docs.x-hub.online/reference/errors/" --- # Баланс и курсы ## GET /balance Текущий баланс мерчанта. ```bash curl https://api.x-hub.online/api/v1/balance \ -H "X-Api-Key: ..." -H "X-Api-Secret: ..." ``` ### Ответ ```json { "available_usdt": "1245.32100000", "reserved_usdt": "0.00000000", "pending_rub": "50000.00", "total_settled_usdt": "15678.90000000", "total_withdrawn_usdt": "14433.58000000", "updated_at": "2026-04-14T12:00:00Z" } ``` | Поле | Что значит | |---|---| | `available_usdt` | Доступно к выплате прямо сейчас | | `reserved_usdt` | Зарезервировано под выплату в обработке | | `pending_rub` | Уже принятые рубли, ждут settlement (T+1) | | `total_settled_usdt` | Всего получено USDT за всё время | | `total_withdrawn_usdt` | Всего выведено за всё время | ## Settlement T+1 **Что такое T+1:** settlement запускается **каждый день в 12:00 по московскому времени** (09:00 UTC). В него попадают все платежи, оплаченные до 00:00 UTC текущих суток (03:00 МСК), — то есть за предыдущие сутки. Рубли конвертируются в USDT по курсу, который фиксируется один раз на весь расчёт в момент его запуска. **Зачем:** - Фиксируем курс на весь батч — нет спекуляций на колебаниях - Успеваем проверить все callback'и от банка - Есть буфер на возвраты/диспуты **Пример:** ``` 9 апр 10:00 МСК — платёж 1000₽ принят (pending_rub += 1000) 10 апр 12:00 МСК — settlement: 1000₽ / 83.3595 = 11.996 USDT → available_usdt 10 апр 12:01 МСК — средства на балансе, попадут в ближайшую автоматическую выплату ``` ## GET /rates Informational курс RUB/USDT. **Не settlement** — только для справки/калькулятора. ```bash curl https://api.x-hub.online/api/v1/rates \ -H "X-Api-Key: ..." -H "X-Api-Secret: ..." ``` ### Ответ ```json { "pair": "RUB/USDT", "rate_market": "79.37", "rate_merchant": "83.55", "updated_at": "2026-04-14T12:00:00Z", "note": "Informational rate. Final rate is fixed at T+1 settlement." } ``` | Поле | Описание | |---|---| | `pair` | Всегда `"RUB/USDT"` | | `rate_market` | Справочный рыночный курс (RUB за 1 USDT), **округлён до 2 знаков**. Без наценки X-Hub — по нему видно, от чего считается `rate_merchant`. Для начисления не используется | | `rate_merchant` | Итоговый курс для мерчанта (RUB за 1 USDT), **округлён до 2 знаков**. Включает все комиссии/наценку X-Hub — используй его в калькуляторе. Рыночный курс отдаётся полем `rate_market`, размер наценки отдельным полем по-прежнему не отдаётся | | `updated_at` | ISO-8601 UTC. Время последнего обновления курса | | `note` | Информационное сообщение | !!! tip "Используй `rate_merchant` в калькуляторе" Клиент платит 1000₽ → тебе начислится `1000 / rate_merchant` USDT (минус флуктуации до settlement). ### Пример Клиент платит 1000₽, `R = 79.37` (рыночный курс на T+1, он же `rate_market`), `markup = 5%`: ``` merchant_rate = 79.37 / (1 - 0.05) = 83.5474 → в API придёт "83.55" merchant_usdt = 1000 / 83.5474 = 11.96925338 USDT <-- тебе xhub_fee = (1000 / 79.37) - 11.96925338 ≈ 0.63 USDT (все комиссии X-Hub) ``` !!! note "Не считай начисление по `rate_merchant` до копейки" В ответе курс округлён до 2 знаков, а фактическое начисление считается по полной точности и фиксируется на T+1 settlement. `GET /rates` — для калькулятора и витрины, не для сверки. ### Курс временно недоступен Если источник курса не отвечает — `503 RATE_UNAVAILABLE`. Ретрай через 30-60 сек, см. [Коды ошибок](../reference/errors.md). ---