v1 · production

Partner API

Программный доступ к кастодиальному ledger RUD: балансы, пополнение, обмен и вывод. Тот же счёт, что в личном кабинете.

Base URL: https://rud-stable.ru/api/public
Ключ создаётся в ЛК → Настройки → API-ключи. Передаётся в заголовке X-API-Key.

Авторизация

Все запросы требуют заголовок:

X-API-Key: rud_pk_…
# пример
curl -s https://rud-stable.ru/api/public/balances \
  -H "X-API-Key: $RUD_API_KEY"

Токены и сети

ТокенСеть (chain)DecimalsНазначение
RUDeth6Стейблкоин платформы, 1 RUD = 1 USD
RUBAeth18Обменный токен
IDRPkaia6Indonesia Rupiah Token (Kaia)
USDTtron6USDT TRC-20

Касса IDRP: сеть Kaia, контракт 0xc16d986585407a74ab87d17c3d0dc19822e3eb35.

Обмен любой пары токенов (курс через USD/RUD). Комиссия свопа — 0%. При депозите удерживается mint-fee 0.15%.

Сценарии

Пополнение

  1. POST /deposit-intents — указать токен и сумму (на токен — только одна открытая заявка).
  2. Перевести ровно эту сумму на адрес кассы из ответа.
  3. После подтверждения в сети баланс зачислится (intent живёт 8 часов).
  4. Отмена: DELETE /deposit-intents/:id. Список открытых: GET /deposit-intents.

Обмен

POST /swap — мгновенно off-chain, если в кассе есть ликвидность целевого токена.

Вывод

POST /withdraw — списание с баланса + on-chain перевод с кассы на указанный адрес.

Балансы

GET/balances

Балансы текущего аккаунта (по API-ключу).

{
  "balances": [
    { "id": 1, "userId": 12, "token": "RUD", "amount": "100.5", "updatedAt": "…" }
  ]
}

Курсы

GET/rates?token=RUBA

rate — сколько RUD (=USD) за 1 единицу токена.

{ "rate": 0.011, "source": "MOEX", "usdrub": 90.9 }

Заявка на пополнение

POST/deposit-intents
Body
{ "token": "USDT", "amount": 100 }
{
  "intentId": 42,
  "token": "USDT",
  "chain": "tron",
  "amount": 100,
  "address": "TSdw…",
  "shared": true,
  "expiresAt": "2026-07-20T13:00:00.000Z"
}
curl -s https://rud-stable.ru/api/public/deposit-intents \
  -H "X-API-Key: $RUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"token":"USDT","amount":100}'

Адрес кассы

GET/deposit-address?chain=eth|tron

Общий адрес кассы. Для зачисления баланса всё равно нужен deposit-intent.

{ "chain": "eth", "address": "0x4351…", "shared": true }

Обмен

POST/swap
Body
{ "from": "USDT", "to": "RUD", "amountIn": 50 }
Ответ
{ "amountOut": 50 }

Любая пара из RUBA | IDRP | USDT | RUD, from ≠ to. При нехватке ликвидности — ошибка.

curl -s https://rud-stable.ru/api/public/swap \
  -H "X-API-Key: $RUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"USDT","to":"IDRP","amountIn":10}'

Вывод

POST/withdraw
Body
{ "token": "USDT", "amount": 25, "chain": "tron", "address": "T…" }
Ответ
{ "withdrawalId": 7, "status": "confirmed", "rudBurned": 25 }

Сеть должна соответствовать токену (см. таблицу выше). Адрес — валидный для сети.

curl -s https://rud-stable.ru/api/public/withdraw \
  -H "X-API-Key: $RUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"token":"USDT","amount":25,"chain":"tron","address":"T…"}'

История

GET/history

Депозиты, выводы и свопы, новые сверху. У каждой записи поле kind: deposit | withdrawal | swap.

{ "history": [ { "kind": "swap", "fromToken": "USDT", "toToken": "RUD", … } ] }

Ошибки

HTTPКогда
400Невалидные параметры, нехватка баланса/ликвидности, неверная сеть/адрес
401Нет / неверный / отозванный API-ключ
502Курс недоступен или сбой on-chain части вывода
503Адрес кассы не настроен

Формат тела ошибки: {"error":"…"}. На части сбоев вывода дополнительно withdrawalId.