Интеграция с DeBank API
DeBank агрегирует DeFi-портфели пользователей по 100+ протоколам и 30+ чейнам. Вместо того чтобы самостоятельно индексировать позиции в Aave, Uniswap, Compound и ещё двух десятках протоколов на Ethereum, Arbitrum, Polygon и BNB Chain одновременно — достаточно одного API-вызова. Это и есть ценность DeBank: готовая агрегированная картина портфеля без собственной индексирующей инфраструктуры.
Структура DeBank API
DeBank OpenAPI предоставляет несколько групп эндпоинтов:
Token балансы — /v1/user/token_list: все ERC-20 токены на всех поддерживаемых чейнах с текущей ценой в USD и стоимостью позиции.
Позиции в протоколах — /v1/user/protocol: конкретный протокол и его позиции (LP, staking, lending). /v1/user/complex_protocol_list — все протоколы сразу.
История транзакций — /v1/user/history_list с пагинацией.
NFT — /v1/user/nft_list.
const headers = { AccessKey: process.env.DEBANK_API_KEY }
// Все токены пользователя на всех чейнах
const tokens = await axios.get(
`https://pro-openapi.debank.com/v1/user/all_token_list?id=${userAddress}&is_all=true`,
{ headers }
)
// Позиции в конкретном протоколе
const aavePositions = await axios.get(
`https://pro-openapi.debank.com/v1/user/protocol?id=${userAddress}&protocol_id=aave3`,
{ headers }
)
Модель данных: что возвращает API
Каждый токен в ответе содержит: chain (идентификатор чейна), id (контрактный адрес), amount (количество), price (текущая цена USD), usd_value (сумма). Для LP-позиций и протокольных позиций структура сложнее — вложенные объекты с detail_types, которые описывают тип позиции (lending, staking, vesting и т.д.).
Важный нюанс: DeBank возвращает price: 0 для токенов без ликвидности или с ценой ниже порога. Не следует интерпретировать это как ошибку — это нормальная ситуация для хвостовых токенов.
Rate limiting и кэширование
DeBank Pro API имеет лимиты по запросам в секунду. Для приложений с большим числом пользователей — обязательное серверное кэширование. Данные о балансах меняются редко относительно времени RPC-запроса. Кэш с TTL 60-300 секунд устраивает большинство use-cases.
Паттерн: при запросе данных пользователя — отдаём кэшированные данные немедленно, запускаем фоновое обновление. Пользователь видит актуальные данные при следующем запросе.
async function getUserPortfolio(address: string) {
const cacheKey = `portfolio:${address}`
const cached = await redis.get(cacheKey)
if (cached) {
// Запустить фоновое обновление
updateInBackground(address, cacheKey)
return JSON.parse(cached)
}
const fresh = await fetchFromDeBank(address)
await redis.setex(cacheKey, 120, JSON.stringify(fresh))
return fresh
}
Обработка ошибок и fallback
DeBank API — внешний сервис, он бывает недоступен. Приложение должно корректно обрабатывать 503, 429 (rate limit) и timeout. При timeout — возвращать кэшированные данные с пометкой о времени последнего обновления, а не показывать пустой экран.
Для критичных функций (например, расчёт залогового коэффициента для кредитного продукта) — не полагаться только на DeBank. Резервный канал: прямые RPC-вызовы к контрактам через wagmi/viem для наиболее важных позиций.
Ориентиры по срокам
Базовая интеграция DeBank API (токены + протокольные позиции + история) — 1-2 дня. С кэшированием, обработкой ошибок и UI-компонентами портфеля — до 5 дней.
Стоимость рассчитывается индивидуально.







