Быстрый старт¶
Сквозное прохождение ключевых вызовов API: создать хранилище, выпустить кошелёк, проверить баланс, оценить комиссию, отправить вывод и отследить его.
Необходимое
Понадобится Key ID и Secret. Их создаёт администратор вашей организации в админ-панели: Settings → API Keys. Подробности про подпись HMAC-SHA256 — в Аутентификации.
Аутентификация¶
Каждому запросу нужны три заголовка с HMAC-подписью. Полный алгоритм и примеры кода — в Аутентификации.
В примерах ниже $HEADERS означает:
Шаг 1: Создание хранилища¶
Хранилище представляет конечного клиента, чьи активы будут на хранении.
curl -X POST {{baseUrl}}/vaults \
$HEADERS \
-H "Content-Type: application/json" \
-d '{
"externalId": "cust_12345",
"name": "Alice Johnson"
}'
Ответ (201):
{
"id": "d1e2f3a4-b5c6-7890-d1e2-f3a4b5c67890",
"externalId": "cust_12345",
"name": "Alice Johnson",
"metadata": {},
"status": "Active",
"createdAt": "2026-02-22T10:00:00Z"
}
Запомните id хранилища — он понадобится при выпуске кошельков.
Шаг 2: Выпуск кошелька¶
Выпустите кошелёк в хранилище. Понадобятся vault ID из шага 1 и asset ID (доступен в админ-панели в разделе Assets).
curl -X POST {{baseUrl}}/vaults/d1e2f3a4-b5c6-7890-d1e2-f3a4b5c67890/wallets \
$HEADERS \
-H "Content-Type: application/json" \
-d '{
"assetId": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"label": "Primary ETH Wallet"
}'
Ответ (201):
{
"id": "f4a5b6c7-d8e9-0123-fabc-456789abcdef",
"vaultId": "d1e2f3a4-b5c6-7890-d1e2-f3a4b5c67890",
"assetId": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"assetName": "Ethereum",
"assetSymbol": "ETH",
"network": "Ethereum",
"label": "Primary ETH Wallet",
"depositAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18",
"depositTag": null,
"status": "Active",
"createdAt": "2026-02-22T10:30:00Z"
}
depositAddress — это on-chain адрес для приёма средств. Передайте его
конечному клиенту для пополнения.
Шаг 3: Проверка баланса¶
Ответ (200):
| Поле | Описание |
|---|---|
available |
Доступно для вывода или перевода. |
pending |
Поступления, ещё не подтверждённые в сети. |
locked |
Средства, зарезервированные под транзакции в полёте. |
total |
Сумма available + pending + locked. |
Шаг 4: Оценка комиссии¶
Перед отправкой вывода оцените сетевую комиссию.
curl -X POST {{baseUrl}}/transactions/estimate-fee \
$HEADERS \
-H "Content-Type: application/json" \
-d '{
"sourceWalletId": "f4a5b6c7-d8e9-0123-fabc-456789abcdef",
"destinationAddress": "0xABC1234567890DEF1234567890abcDeF12345678",
"amount": "0.5000"
}'
Ответ (200):
{
"low": {
"networkFee": "0.000049051962603",
"gasPrice": "1.075798425",
"gasLimit": "21000",
"feePerByte": null
},
"medium": {
"networkFee": "0.000049051962603",
"gasPrice": "1.169768470",
"gasLimit": "21000",
"feePerByte": null
},
"high": {
"networkFee": "0.000056458147116",
"gasPrice": "2.369911802",
"gasLimit": "21000",
"feePerByte": null
}
}
Три уровня комиссии — low, medium, high — позволяют предложить
клиенту компромисс между приоритетом и стоимостью. В каждом уровне
есть networkFee (оценка общей комиссии в нативном активе — единственное
поле для отображения) и зависящие от сети входные параметры расчёта:
| Поле | Когда возвращается |
|---|---|
gasPrice / gasLimit |
EVM-сети (ETH, USDT-ERC20 и др.) — networkFee = gasPrice × gasLimit в нативном активе |
feePerByte |
UTXO-сети (BTC) — комиссия за байт подписанной транзакции |
Выберите уровень на клиенте (обычно по умолчанию medium) и передайте
feeLevel: "Low" \| "Medium" \| "High" в запросе вывода ниже. Если
поле не указать, вывод по умолчанию использует medium.
Шаг 5: Отправка вывода¶
Создание вывода на внешний адрес.
Idempotency-Key обязателен
Каждый запрос, перемещающий средства (/transactions/withdraw,
/transactions/transfer), требует заголовок Idempotency-Key.
Генерируйте уникальное значение на каждую логическую операцию
(UUID, ULID или стабильный бизнес-идентификатор — до 64 символов,
[A-Za-z0-9_-]). При повторе того же запроса с тем же ключом
вернётся первоначальный ответ — повторного вывода не произойдёт.
Тот же ключ с другим телом запроса даёт 400 — это почти всегда
ошибка клиента.
curl -X POST {{baseUrl}}/transactions/withdraw \
$HEADERS \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"sourceWalletId": "f4a5b6c7-d8e9-0123-fabc-456789abcdef",
"destinationAddress": "0xABC1234567890DEF1234567890abcDeF12345678",
"amount": "0.5000",
"note": "Ежемесячный казначейский перевод"
}'
Ответ (201):
{
"id": "b6c7d8e9-f0a1-2345-bcde-6789abcdef01",
"type": "Withdrawal",
"status": "Submitted",
"sourceWalletId": "f4a5b6c7-d8e9-0123-fabc-456789abcdef",
"assetSymbol": "ETH",
"network": "Ethereum",
"amount": "0.5000",
"note": "Ежемесячный казначейский перевод",
"createdAt": "2026-02-22T11:15:00Z"
}
Шаг 6: Отслеживание транзакции¶
Опрашивайте эндпоинт транзакции или подключите вебхуки для уведомлений в реальном времени.
Статусы транзакции¶
| Статус | Описание |
|---|---|
Submitted |
Запрос принят платформой. |
PendingSignature |
Ожидает подписи в кастоди-бэкенде. |
Broadcasting |
Подписана и отправлена в сеть. |
Confirming |
В сети, ожидает подтверждений. |
Completed |
Полностью подтверждена и зачислена. |
Failed |
Транзакция не удалась (см. failureReason). |
Cancelled |
Транзакция отменена до исполнения. |
Бонус: внутренний перевод¶
Перевод между двумя кошельками в одной организации (одинаковый актив).
Правило Idempotency-Key то же — см. предупреждение выше.
curl -X POST {{baseUrl}}/transactions/transfer \
$HEADERS \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"sourceWalletId": "f4a5b6c7-d8e9-0123-fabc-456789abcdef",
"destinationWalletId": "11223344-5566-7788-99aa-bbccddeeff00",
"amount": "0.2500",
"note": "Пополнение пользовательского кошелька"
}'
Внутренние переводы исполняются мгновенно и без сетевых комиссий.
Дальше¶
- Подключите вебхуки — уведомления вместо опроса. См. Руководство по вебхукам.
- Адресная книга — сохранение часто используемых адресов. См. Справочник API.