v1 · production

Partner API

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

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

Авторизация

Все запросы требуют заголовок X-API-Key. Ключ вида rud_pk_ + 32 hex-символа показывается один раз при создании.

X-API-Key: rud_pk_…

curl -s https://rud-stable.ru/api/public/balances \
  -H "X-API-Key: $RUD_API_KEY"

Токены и сети

ТокенchainDecimalsНазначение
RUDeth6Стейблкоин платформы, 1 RUD = 1 USD
RUBAeth181 RUBA = 1 RUB
RUD-Aeth181 RUD-A = 1 RUB
IDRPkaia6Indonesia Rupiah Token
USDTtron6USDT TRC-20

Пополнение

  1. POST /deposit-intents, body: { "token": "USDT", "amount": "100" }.
  2. Переведите ровно эту сумму на адрес кассы из ответа.
  3. POST /deposit-intents/:intentID/check проверяет перевод и зачисляет его. До появления в сети ответ содержит { "found": false }, повторите check позже.
  4. Открытые заявки: GET /deposit-intents, отмена: DELETE /deposit-intents/:intentID.
{ "found": true, "depositID": 15, "txID": "…", "duplicate": false }

Обмен и вывод

POST /swap принимает { "from": "USDT", "to": "RUD", "amountIn": "50" } и выполняет off-chain обмен только при наличии ликвидности.

POST /withdraw
{ "token": "USDT", "chain": "tron", "address": "T…", "amount": "25", "requestId": "withdrawal-001" }

{ "withdrawalId": 7, "status": "confirmed", "rudBurned": "25" }

Для вывода сеть обязана соответствовать токену. requestId задает идемпотентность, при неоднозначном on-chain результате не повторяйте отправку автоматически.

Балансы, курсы и история

GET /balances
GET /rates?token=RUBA
GET /deposit-address?chain=eth|tron|kaia
GET /history

Курс возвращает строковый точный decimal rate и source. Денежные значения не следует преобразовывать через binary floating point.

Ошибки

HTTPКогда
400Невалидные параметры, нехватка баланса или ликвидности, неверная сеть или адрес
401Нет, неверный или отозванный API-ключ
409Существующая заявка на депозит или конфликт состояния
429Ограничение частоты
502 / 503Курс, on-chain зависимость или адрес кассы временно недоступны
{ "error": "invalid api key" }