← кабинет

RUSH B · Partner API

Пополнение кошелька Steam по логину с авансового баланса. Версия v1.

Как это работает

  1. Вы вносите аванс — менеджер зачисляет его на ваш баланс (виден в кабинете и по API).
  2. Отправляете запрос: логин Steam + сумма зачисления (номинал в рублях).
  3. С баланса списывается номинал минус ваша скидка (по умолчанию −2%: за пополнение на 1000 ₽ спишется 980 ₽).
  4. Зачисление обычно проходит за секунды–минуты. Если провайдер не смог зачислить — списание автоматически возвращается на баланс.

Что такое «логин Steam» (главный источник ошибок)

Логин — то, что человек вводит при входе в Steam. Это не:

Если ваш клиент прислал ссылку или ник — попросите именно логин. Перед пополнением дёргайте check-login: can_topup: false — не отправляйте заказ, он уйдёт в возврат.

База

Base URLhttps://partner.rushb.ru
Авторизациязаголовок Authorization: Bearer pk_… (токен выдаёт менеджер; храните как секрет)
ФорматJSON; суммы в рублях строками ("980.00")
Ошибки{"error": "код", "message": "человеческое описание"} + HTTP-статус

Методы

GET /v1/balance — баланс

curl -H "Authorization: Bearer pk_…" https://partner.rushb.ru/v1/balance
→ { "balance": "48200.00", "currency": "RUB", "discount_pct": 2 }

POST /v1/steam/check-login — проверка логина (перед пополнением)

curl -X POST https://partner.rushb.ru/v1/steam/check-login \
  -H "Authorization: Bearer pk_…" -H "Content-Type: application/json" \
  -d '{"steam_login": "gabelogannewell"}'
→ { "steam_login": "gabelogannewell", "can_topup": false }

can_topup: false — аккаунт не найден или не может принять пополнение.

Пополнение само проверяет аккаунт перед списанием: на несуществующий логин придёт 422 login_invalid, деньги не двинутся. Отдельный check-login полезен раньше — на этапе, когда ваш клиент вводит логин (мгновенная валидация в вашей форме).

POST /v1/steam/topup — пополнить

Заголовок Idempotency-Key обязателен — уникальная строка на каждое пополнение (например, id вашего внутреннего заказа). Повтор запроса с тем же ключом вернёт исходный заказ и не спишет деньги второй раз — безопасно ретраить при таймаутах.
curl -X POST https://partner.rushb.ru/v1/steam/topup \
  -H "Authorization: Bearer pk_…" -H "Content-Type: application/json" \
  -H "Idempotency-Key: your-order-12345" \
  -d '{"steam_login": "somelogin", "amount": 1000}'
→ 201 {
  "id": "9be31c9e-…",          // id заказа у нас
  "steam_login": "somelogin",
  "amount": "1000.00",          // номинал: столько получит Steam-кошелёк
  "charged": "980.00",          // списано с вашего баланса (−2%)
  "status": "processing",       // см. статусы ниже
  "balance": "47220.00"         // баланс после списания
}
полеправила
steam_loginлогин аккаунта Steam (не email, не ссылка): 2–64 символа A-Za-z0-9_-
amountноминал зачисления в рублях: 100–15000

Идемпотентность: три правила, которые сэкономят вам деньги и ночь

  1. Таймаут ответа ≠ несозданный заказ. Если запрос ушёл, а ответ потерялся (сеть, таймаут) — заказ мог создаться. Повторяйте только с тем же Idempotency-Key: вернётся исходный заказ без второго списания. Новый ключ на ретрае = второе списание.
  2. Один ключ = один заказ, навсегда. Ключ с другими steam_login/amount вернёт 409 idempotency_mismatch — для нового заказа берите новый ключ. Лучший ключ — id заказа в вашей системе.
  3. Дубли от ваших клиентов. Клиент, не увидев результат, жмёт «оплатить» ещё раз — не генерируйте на это новый ключ. Ключ должен рождаться вместе с вашим заказом, а не с каждым кликом.

GET /v1/orders/{id} — статус заказа

→ { "id": "9be31c9e-…", "status": "completed", … }
statusзначение
processingзачисляем (обычно до пары минут)
completedзачислено на кошелёк Steam
refundedзачислить не удалось — списание возвращено на баланс (причина в fail_reason)

Рекомендуемый поллинг: раз в 3–5 секунд до терминального статуса (completed/refunded). Типичное время зачисления — секунды, изредка минуты. Если дольше — просто проверяйте позже: возврат при провале произойдёт автоматически, «зависших» денег не бывает.

Пока заказ в processing — не создавайте второй на тот же логин: первый может завершиться, и клиент получит двойное зачисление за ваш счёт.

GET /v1/orders — список заказов

GET /v1/orders?limit=50&offset=0   → { "orders": [ … ] }

GET /v1/transactions — движения баланса

→ { "transactions": [ { "type": "deposit"|"charge"|"refund", "amount": "+50000.00", "balance_after": "…", … } ] }

Практика эксплуатации

Коды ошибок

HTTPerrorчто делать
401unauthorizedпроверить токен
400bad_request / idempotency_requiredпоправить запрос (описание в message)
402insufficient_fundsпополнить баланс (написать менеджеру)
409idempotency_mismatchключ уже использован с другими параметрами — новый заказ = новый ключ
422login_invalidаккаунт не найден/не принимает пополнение — деньги не списаны, проверьте логин у клиента
502provider_errorвременная недоступность — повторить позже с тем же Idempotency-Key
Вопросы и пополнение баланса — менеджер RUSH B в Telegram. Деньги за неудавшиеся зачисления возвращаются на баланс автоматически; ничего «висящим» не остаётся.