Перейти к содержанию

Admin gRPC API

Административный gRPC-сервис предоставляет инструменты для управления платформой: работы с аккаунтами пользователей, ручных финансовых операций, мониторинга блокчейн-активности, управления алертами и горячими кошельками.

Сервис доступен только во внутренней сети. Прямой доступ из интернета закрыт.

Всего определено 11 sub-сервисов.


Общие типы

// Пагинация для list-запросов
message PageRequest {
  int32 limit  = 1;
  int32 offset = 2;
}

message PageResponse {
  int32 total = 1;
}

// Универсальный тип для денежных сумм
message Amount {
  string value = 1; // decimal-строка, например "0.00123456"
  string asset = 2; // код актива, например "BTC"
}

1. PingService

Используется для проверки доступности сервиса.

service PingService {
  rpc Ping(PingRequest) returns (PingResponse);
}

message PingRequest {}

message PingResponse {
  string status = 1; // "ok"
}

2. AccountsService

Управление аккаунтами пользователей: просмотр балансов, изменение тарифа и статуса.

service AccountsService {
  rpc GetBalances(GetBalancesRequest) returns (GetBalancesResponse);
  rpc GetAccountDetails(GetAccountDetailsRequest) returns (GetAccountDetailsResponse);
  rpc SetTier(SetTierRequest) returns (SetTierResponse);
  rpc ListOrders(ListOrdersRequest) returns (ListOrdersResponse);
  rpc ChangeAccountStatus(ChangeAccountStatusRequest) returns (ChangeAccountStatusResponse);
}

// --- GetBalances ---
message GetBalancesRequest {
  string account_id = 1;
}

message GetBalancesResponse {
  repeated Balance balances = 1;
}

message Balance {
  string asset             = 1;
  string available         = 2; // decimal
  string locked            = 3; // decimal
  string balance_account_id = 4;
  string balance_account_type = 5; // "funding" | "trading"
}

// --- GetAccountDetails ---
message GetAccountDetailsRequest {
  string account_id = 1;
}

message GetAccountDetailsResponse {
  string   id                 = 1;
  string   email              = 2;
  string   status             = 3; // "active" | "restricted" | "blocked"
  string   tier_id            = 4;
  string   tier_name          = 5;
  string   master_account_id  = 6; // пусто, если не субаккаунт
  string   created_at         = 7; // ISO 8601
}

// --- SetTier ---
message SetTierRequest {
  string account_id = 1;
  string tier_id    = 2;
}

message SetTierResponse {
  bool success = 1;
}

// --- ListOrders ---
message ListOrdersRequest {
  string      account_id = 1;
  string      ticker     = 2; // опционально
  string      status     = 3; // опционально
  PageRequest page       = 4;
}

message ListOrdersResponse {
  repeated AdminOrder orders = 1;
  PageResponse        page   = 2;
}

message AdminOrder {
  string id                  = 1;
  string ticker              = 2;
  string side                = 3; // "buy" | "sell"
  string type                = 4; // "limit" | "market"
  string price               = 5;
  string qty                 = 6;
  string filled_qty          = 7;
  string status              = 8;
  string created_at          = 9;
}

// --- ChangeAccountStatus ---
message ChangeAccountStatusRequest {
  string account_id = 1;
  string status     = 2; // "active" | "restricted" | "blocked"
  string reason     = 3;
}

message ChangeAccountStatusResponse {
  bool success = 1;
}

3. BlockchainService

Блокчейн-операции: депозитные адреса, инициирование выводов, просмотр истории.

service BlockchainService {
  rpc GetDepositAddress(GetDepositAddressRequest) returns (GetDepositAddressResponse);
  rpc WithdrawToBlockchain(WithdrawToBlockchainRequest) returns (WithdrawToBlockchainResponse);
  rpc GetWithdrawRequestStatus(GetWithdrawRequestStatusRequest) returns (GetWithdrawRequestStatusResponse);
  rpc ListTopUps(ListTopUpsRequest) returns (ListTopUpsResponse);
  rpc ListAllTopUps(ListAllTopUpsRequest) returns (ListAllTopUpsResponse);
  rpc ListWithdrawals(ListWithdrawalsRequest) returns (ListWithdrawalsResponse);
}

// --- GetDepositAddress ---
message GetDepositAddressRequest {
  string account_id  = 1;
  string blockchain  = 2; // "btc" | "eth" | "tron"
  string asset       = 3;
}

message GetDepositAddressResponse {
  string address = 1;
}

// --- WithdrawToBlockchain ---
message WithdrawToBlockchainRequest {
  string account_id  = 1;
  string blockchain  = 2;
  string asset       = 3;
  string amount      = 4; // decimal
  string to_address  = 5;
  string memo        = 6; // опционально (для Tron/EVM токенов с memo)
}

message WithdrawToBlockchainResponse {
  string withdraw_request_id = 1;
}

// --- GetWithdrawRequestStatus ---
message GetWithdrawRequestStatusRequest {
  string withdraw_request_id = 1;
}

message GetWithdrawRequestStatusResponse {
  string status  = 1; // "pending" | "processing" | "broadcast" | "confirmed" | "failed"
  string tx_hash = 2;
}

// --- ListTopUps ---
message ListTopUpsRequest {
  string      account_id = 1;
  PageRequest page       = 2;
}

message ListTopUpsResponse {
  repeated TopUp topups = 1;
  PageResponse   page   = 2;
}

// --- ListAllTopUps ---
message ListAllTopUpsRequest {
  string      blockchain = 1; // опционально
  string      status     = 2; // опционально
  PageRequest page       = 3;
}

message ListAllTopUpsResponse {
  repeated TopUp topups = 1;
  PageResponse   page   = 2;
}

message TopUp {
  string id          = 1;
  string account_id  = 2;
  string blockchain  = 3;
  string asset       = 4;
  string amount      = 5; // decimal
  string tx_hash     = 6;
  string status      = 7;
  string detected_at = 8; // ISO 8601
}

// --- ListWithdrawals ---
message ListWithdrawalsRequest {
  string      account_id = 1; // опционально (все аккаунты, если пусто)
  string      status     = 2; // опционально
  PageRequest page       = 3;
}

message ListWithdrawalsResponse {
  repeated Withdrawal withdrawals = 1;
  PageResponse        page        = 2;
}

message Withdrawal {
  string id         = 1;
  string account_id = 2;
  string blockchain = 3;
  string asset      = 4;
  string amount     = 5;
  string to_address = 6;
  string tx_hash    = 7;
  string status     = 8;
  string created_at = 9;
}

4. OperationsService

Ручные финансовые операции: зачисление, списание, переводы — как по аккаунту, так и по конкретному балансовому аккаунту.

service OperationsService {
  rpc ManualTopup(ManualTopupRequest) returns (ManualTopupResponse);
  rpc ManualWithdraw(ManualWithdrawRequest) returns (ManualWithdrawResponse);
  rpc Transfer(TransferRequest) returns (TransferResponse);
  rpc ManualTopupBalanceAccount(ManualTopupBalanceAccountRequest) returns (ManualTopupBalanceAccountResponse);
  rpc ManualWithdrawBalanceAccount(ManualWithdrawBalanceAccountRequest) returns (ManualWithdrawBalanceAccountResponse);
  rpc TransferBalanceAccount(TransferBalanceAccountRequest) returns (TransferBalanceAccountResponse);
}

// --- ManualTopup ---
message ManualTopupRequest {
  string account_id = 1;
  string asset      = 2;
  string amount     = 3; // decimal
  string reason     = 4;
}

message ManualTopupResponse {
  string operation_id = 1;
}

// --- ManualWithdraw ---
message ManualWithdrawRequest {
  string account_id = 1;
  string asset      = 2;
  string amount     = 3;
  string reason     = 4;
}

message ManualWithdrawResponse {
  string operation_id = 1;
}

// --- Transfer (между аккаунтами) ---
message TransferRequest {
  string from_account_id = 1;
  string to_account_id   = 2;
  string asset           = 3;
  string amount          = 4;
  string reason          = 5;
}

message TransferResponse {
  string operation_id = 1;
}

// --- ManualTopupBalanceAccount ---
message ManualTopupBalanceAccountRequest {
  string balance_account_id = 1;
  string asset              = 2;
  string amount             = 3;
  string reason             = 4;
}

message ManualTopupBalanceAccountResponse {
  string operation_id = 1;
}

// --- ManualWithdrawBalanceAccount ---
message ManualWithdrawBalanceAccountRequest {
  string balance_account_id = 1;
  string asset              = 2;
  string amount             = 3;
  string reason             = 4;
}

message ManualWithdrawBalanceAccountResponse {
  string operation_id = 1;
}

// --- TransferBalanceAccount ---
message TransferBalanceAccountRequest {
  string from_balance_account_id = 1;
  string to_balance_account_id   = 2;
  string asset                   = 3;
  string amount                  = 4;
  string reason                  = 5;
}

message TransferBalanceAccountResponse {
  string operation_id = 1;
}

5. InfoService

Справочная информация: тарифы и сети.

service InfoService {
  rpc ListTiers(ListTiersRequest) returns (ListTiersResponse);
  rpc ListNetworks(ListNetworksRequest) returns (ListNetworksResponse);
}

message ListTiersRequest {}

message ListTiersResponse {
  repeated Tier tiers = 1;
}

message Tier {
  string id     = 1;
  string name   = 2;
  string limits = 3; // JSON-строка с лимитами и комиссиями
}

message ListNetworksRequest {
  string asset = 1; // опционально — фильтр по активу
}

message ListNetworksResponse {
  repeated Network networks = 1;
}

message Network {
  string id               = 1;
  string asset            = 2;
  string network          = 3;
  bool   deposit_enabled  = 4;
  bool   withdraw_enabled = 5;
}

6. AlertsService

Создание, получение и обработка системных алертов.

service AlertsService {
  rpc Create(CreateAlertRequest) returns (CreateAlertResponse);
  rpc List(ListAlertsRequest) returns (stream Alert);
  rpc Acknowledge(AcknowledgeAlertRequest) returns (AcknowledgeAlertResponse);
  rpc Resolve(ResolveAlertRequest) returns (ResolveAlertResponse);
}

message CreateAlertRequest {
  string type     = 1; // "aml_hit" | "large_withdrawal" | "system_error" | ...
  string severity = 2; // "info" | "warning" | "critical"
  string payload  = 3; // JSON-строка с деталями
}

message CreateAlertResponse {
  string alert_id = 1;
}

message ListAlertsRequest {
  string status   = 1; // опционально: "open" | "acknowledged" | "resolved"
  string severity = 2; // опционально
}

// List возвращает server-streaming поток алертов
message Alert {
  string id          = 1;
  string type        = 2;
  string severity    = 3;
  string payload     = 4;
  string status      = 5;
  string created_at  = 6;
  string resolved_at = 7;
}

message AcknowledgeAlertRequest {
  string alert_id = 1;
  string comment  = 2;
}

message AcknowledgeAlertResponse {
  bool success = 1;
}

message ResolveAlertRequest {
  string alert_id    = 1;
  string resolution  = 2;
}

message ResolveAlertResponse {
  bool success = 1;
}

7. APIKeysService

Управление API-ключами пользователей (создание, просмотр, удаление).

service APIKeysService {
  rpc CreateAPIKey(CreateAPIKeyRequest) returns (CreateAPIKeyResponse);
  rpc ListAPIKeys(ListAPIKeysRequest) returns (ListAPIKeysResponse);
  rpc DeleteAPIKey(DeleteAPIKeyRequest) returns (DeleteAPIKeyResponse);
}

message CreateAPIKeyRequest {
  string   account_id   = 1;
  repeated string permissions = 2; // ["trade", "withdraw", "read"]
  string   label        = 3;
}

message CreateAPIKeyResponse {
  string api_key    = 1; // публичный ключ
  string api_secret = 2; // секрет (показывается только при создании!)
  string id         = 3;
}

message ListAPIKeysRequest {
  string account_id = 1;
}

message ListAPIKeysResponse {
  repeated APIKey keys = 1;
}

message APIKey {
  string          id          = 1;
  string          label       = 2;
  repeated string permissions = 3;
  string          created_at  = 4;
  string          last_used_at = 5;
}

message DeleteAPIKeyRequest {
  string key_id = 1;
}

message DeleteAPIKeyResponse {
  bool success = 1;
}

8. HotWalletsService

Управление горячими кошельками биржи: просмотр и переводы между кошельками.

service HotWalletsService {
  rpc ListHotWallets(ListHotWalletsRequest) returns (ListHotWalletsResponse);
  rpc TransferAsset(TransferAssetRequest) returns (TransferAssetResponse);
  rpc GetTransferAssetStatus(GetTransferAssetStatusRequest) returns (GetTransferAssetStatusResponse);
}

message ListHotWalletsRequest {
  string blockchain = 1; // опционально
}

message ListHotWalletsResponse {
  repeated HotWallet wallets = 1;
}

message HotWallet {
  string address    = 1;
  string blockchain = 2;
  string asset      = 3;
  string balance    = 4; // текущий баланс в блокчейне
}

message TransferAssetRequest {
  string from_address = 1;
  string to_address   = 2;
  string blockchain   = 3;
  string asset        = 4;
  string amount       = 5; // decimal
}

message TransferAssetResponse {
  string transfer_id = 1;
}

message GetTransferAssetStatusRequest {
  string transfer_id = 1;
}

message GetTransferAssetStatusResponse {
  string status  = 1; // "pending" | "broadcast" | "confirmed" | "failed"
  string tx_hash = 2;
}

9. TiersService

Управление тарифными уровнями платформы.

service TiersService {
  rpc CreateTier(CreateTierRequest) returns (CreateTierResponse);
  rpc UpdateTier(UpdateTierRequest) returns (UpdateTierResponse);
  rpc DeleteTier(DeleteTierRequest) returns (DeleteTierResponse);
  rpc GetDefaultTier(GetDefaultTierRequest) returns (GetDefaultTierResponse);
  rpc SetDefaultTier(SetDefaultTierRequest) returns (SetDefaultTierResponse);
}

message CreateTierRequest {
  string name   = 1;
  string limits = 2; // JSON
}

message CreateTierResponse {
  string tier_id = 1;
}

message UpdateTierRequest {
  string tier_id = 1;
  string name    = 2;
  string limits  = 3;
}

message UpdateTierResponse {
  bool success = 1;
}

message DeleteTierRequest {
  string tier_id = 1;
}

message DeleteTierResponse {
  bool success = 1;
}

message GetDefaultTierRequest {}

message GetDefaultTierResponse {
  string tier_id   = 1;
  string tier_name = 2;
}

message SetDefaultTierRequest {
  string tier_id = 1;
}

message SetDefaultTierResponse {
  bool success = 1;
}

10. AssetsService

Управление активами (криптовалютами и токенами).

service AssetsService {
  rpc CreateAsset(CreateAssetRequest) returns (CreateAssetResponse);
  rpc UpdateAsset(UpdateAssetRequest) returns (UpdateAssetResponse);
  rpc SetAssetActive(SetAssetActiveRequest) returns (SetAssetActiveResponse);
  rpc AddAssetNetwork(AddAssetNetworkRequest) returns (AddAssetNetworkResponse);
  rpc UpdateAssetNetwork(UpdateAssetNetworkRequest) returns (UpdateAssetNetworkResponse);
}

message CreateAssetRequest {
  string code     = 1;
  string name     = 2;
  int32  decimals = 3;
}

message CreateAssetResponse {
  bool success = 1;
}

message UpdateAssetRequest {
  string code = 1;
  string name = 2;
}

message UpdateAssetResponse {
  bool success = 1;
}

message SetAssetActiveRequest {
  string code   = 1;
  bool   active = 2;
}

message SetAssetActiveResponse {
  bool success = 1;
}

message AddAssetNetworkRequest {
  string asset            = 1;
  string network          = 2;
  bool   deposit_enabled  = 3;
  bool   withdraw_enabled = 4;
}

message AddAssetNetworkResponse {
  string network_id = 1;
}

message UpdateAssetNetworkRequest {
  string network_id       = 1;
  bool   deposit_enabled  = 2;
  bool   withdraw_enabled = 3;
}

message UpdateAssetNetworkResponse {
  bool success = 1;
}

11. TickersService

Управление торговыми парами.

service TickersService {
  rpc CreateTicker(CreateTickerRequest) returns (CreateTickerResponse);
  rpc SetTickerActive(SetTickerActiveRequest) returns (SetTickerActiveResponse);
  rpc ListTickers(ListTickersRequest) returns (ListTickersResponse);
}

message CreateTickerRequest {
  string symbol      = 1; // например "BTC-USDT"
  string base_asset  = 2;
  string quote_asset = 3;
}

message CreateTickerResponse {
  bool success = 1;
}

message SetTickerActiveRequest {
  string symbol = 1;
  bool   active = 2;
}

message SetTickerActiveResponse {
  bool success = 1;
}

message ListTickersRequest {
  bool include_inactive = 1;
}

message ListTickersResponse {
  repeated AdminTicker tickers = 1;
}

message AdminTicker {
  string symbol      = 1;
  string base_asset  = 2;
  string quote_asset = 3;
  bool   active      = 4;
}

Коды статусов gRPC

Код Название Описание
0 OK Успешно
3 INVALID_ARGUMENT Неверные параметры запроса
5 NOT_FOUND Ресурс не найден
6 ALREADY_EXISTS Ресурс уже существует
7 PERMISSION_DENIED Недостаточно прав
13 INTERNAL Внутренняя ошибка сервера
14 UNAVAILABLE Сервис временно недоступен