Ваш API записывает.
Ваша панель читает.
Создайте пользователя кастоди для каждого пользователя вашего приложения. Он получает постоянные адреса пополнения, каждое пополнение зачисляется на его баланс, а вы следите за всем в личном кабинете.
Один пользователь кастоди на каждого пользователя приложения
Ваше приложение создаёт пользователей кастоди со своим ID пользователя (external_id) и сохраняет полученный id. У каждого пользователя кастоди есть постоянные адреса пополнения и собственный баланс по каждой монете внутри вашего шлюза. Личный кабинет показывает их, но не создаёт: это делается через API.
1. Создайте пользователя
Отправьте ID пользователя и, при желании, имя, email и metadata. Повторный вызов с тем же external_id вернёт того же пользователя, поэтому повтор безопасен.
curl https://coino.live/api/v2/custody/users \
-H "Authorization: Bearer ck_live_..." \
-H "Content-Type: application/json" \
-d '{"external_id": "customer_1001", "name": "Sara", "email": "[email protected]"}'2. Покажите пользователю адреса пополнения
Ответ содержит адреса пользователя, монеты и сети, которые принимает каждый из них, и его балансы. Адреса никогда не меняются, поэтому приложение может показывать их постоянно, например на странице «Пополнить».
{"data": {
"id": "01m6…", "external_id": "customer_1001", "status": "active",
"addresses": [{"address": "TQ5x…", "networks": ["tron"], "assets": ["usdt-tron", "trx-tron"]}, …],
"balances": [{"asset": "usdt-tron", "balance": "125.5"}]
}}3. Пополнения зачисляются автоматически
Когда пользователь отправляет монеты на один из своих адресов, мы отправляем вебхук custody.deposit.detected, а после подтверждения и зачисления на баланс — custody.deposit.credited. Зачисленные пополнения также можно получить списком в любой момент, начиная с новых.
Зачисляйте средства пользователю в своём приложении по событию custody.deposit.credited и используйте id пополнения, чтобы никогда не зачислить одно пополнение дважды.
4. Переводите балансы на основной баланс
Баланс пользователя кастоди принадлежит этому пользователю внутри вашего шлюза. Переведите его на основной баланс через API (полностью или частично), кнопкой на странице пользователя в личном кабинете или автоматически при каждом зачислении с помощью настройки шлюза. Выводы оплачиваются с основного баланса.
Обработка статусов
| Статус в панели | Значение | Доступный баланс |
|---|---|---|
| Подтверждается | Пополнение замечено в блокчейне и ожидает подтверждений. | Без изменений |
| Зачислен | Пополнение подтверждено и зачислено на баланс пользователя (за вычетом комиссий). | Увеличивается на зачисленную сумму |
| Задержан на проверку | Наша команда проверяет пополнение перед зачислением. | Без изменений |
Пополнение зачисляется ровно один раз, даже если вебхук доставлен дважды.
Подробнее о сервисе кастоди