您的密钥。您的资产。

探索

概览查找钱包流动性资金池代币新池雷达关注列表

您的资产

钱包主页交易自动化兑换

生态系统

网络状态文档指南文章开发者设置
BANIPOOL/文档

搜索资金池

粘贴或输入池地址、池 ID、代币合约地址或代币符号。将同时搜索所有网络。

输入代币地址将显示使用该代币的池。

创建新资金池

连接钱包

选择此设备上的钱包,或通过二维码连接手机钱包。

检测到的钱包

未检测到浏览器钱包。请使用 WalletConnect 连接手机钱包。

用于查看投资组合的登录签名不会授权交易。

文档

API 参考

管理 API 密钥 · 下载 OpenAPI 契约

认证与权限范围

通过 x-api-key 或 Bearer 请求头发送密钥。密钥应保存在服务器。门户需要钱包会话;密钥不能创建新密钥。无需密钥也可读取公开数据,但受 IP 速率限制。

curl "$API_BASE_URL/v1/chains" -H "x-api-key: $DEFI_API_KEY"

data:read 用于读取数据;quotes:create 用于报价;plans:create 用于未签名计划及追踪密钥所属钱包的交易。仍需钱包签名。strategies:read 读取密钥所属钱包的自动化规则(GET /v1/strategies);strategies:write 创建、修改、暂停、恢复和撤销规则(实盘执行仍需钱包签署的链上 keeper 授权)。webhooks:manage 管理 webhook 订阅(GET/POST /v1/developer/webhooks、DELETE /v1/developer/webhooks/{id}、GET …/deliveries)。API 密钥本身只能通过钱包会话管理。

非浏览器客户端的钱包登录

交易端点也接受钱包会话。创建挑战,使用 personal_sign 对未经修改的消息签名,再进行验证。响应包含有效期 7 天的会话令牌,用于 Authorization: Bearer(SDK 中为 sessionToken)。浏览器仅接收 HttpOnly cookie。登录签名不会授权任何交易。

POST /v1/auth/challenges  {"address":"0x…","chainId":8453}   → {id, message, expiresAt}
POST /v1/auth/verify      {"challengeId":"…","signature":"0x…"} → {token, actor, expiresAt}
GET  /v1/auth/session     (Authorization: Bearer <token>)      → {actor}
DELETE /v1/auth/session   → logout

TypeScript SDK

@defi/api-client 工作区提供由 OpenAPI 生成的客户端,请在服务器上运行。

import { createDefiClient } from '@defi/api-client';
const client = createDefiClient({
  baseUrl: process.env.API_BASE_URL!,
  apiKey: process.env.DEFI_API_KEY!,
});
const { data, error, response } = await client.GET('/v1/pools', {
  params: { query: { chain: 'base', limit: 50 } },
});
if (!response.ok) throw new Error(JSON.stringify(error));
console.log(data?.data, data?.meta.nextCursor);

分页与精度

资金池列表、代币列表和交易历史(GET /v1/transactions)使用 limit 1–200(默认 50)及 meta.nextCursor 中的游标。获取下一页时保留筛选与排序。代币数量与财务数值以字符串发送;不可用指标为 null。使用数据前请检查 meta.partial、dataStatus 与时间戳。

配额、错误与幂等性

费用:普通读取 1 单位,账户历史 / 余额 / 仓位 5,报价 / 计划 10,追踪 5。每日密钥配额由运营方设置,请查看 X-Quota-Limit 和 X-Quota-Remaining。HTTP 429 包含 Retry-After。IP 限制仍然适用。公开读取包含 ETag:数据未变时,发送 If-None-Match 可获得无响应体的 304。成功响应含 data/meta;错误含 code、message、retryable、details 和 requestId。

POST /v1/quotes 需要 8–128 字符的 Idempotency-Key;POST /v1/developer/api-keys 和 /webhooks 可选提供(重复相同请求数据会返回同一资源,replayed: true 且 secret 为 null)。相同数据使用相同密钥。客户端不会自动重试修改操作。计划不会签名或广播交易。

Webhook

端点须为 443 端口的公共 HTTPS。密钥仅显示一次。请求头:x-webhook-id、x-webhook-timestamp、x-webhook-signature。使用密钥对 timestamp + 点号 + 原始响应体校验 HMAC SHA-256,以恒定时间比较,拒绝超过 ±5 分钟的时间戳,并按事件 ID 去重。响应体:id、type、data、createdAt。

最多重试 8 次(退避+抖动),之后状态为 dead。2xx 响应表示已接收;不跟随重定向。可订阅事件:transaction.finalized、transaction.failed、公开的 data.degraded(每次网络 head 故障期间一次)、position.out_of_range、strategy.executed(模拟/通知,或实盘 keeper 已执行)以及 strategy.execution_failed(实盘 keeper 执行失败;规则被暂停)。交易事件由后台对账自动产生(交易最终确认/失败后约 30 秒),无需轮询;仓位/策略事件来自 automation worker 与 keeper。positionOutOfRange 偏好控制仓位事件;策略审计事件始终可用。

实时事件(SSE)

GET /v1/events/stream 以 text/event-stream 发送与 webhook 相同的事件(属于会话 / 密钥所有者,加上公开的 data.degraded)。每个事件带 id 游标;使用 Last-Event-ID(EventSource 自动处理)或 ?after= 重新连接。浏览器连接约 100 秒后关闭,API 密钥连接约 15 分钟后关闭。revoked 表示密钥已撤销 / 到期或会话结束。reset 表示游标超出保留期:获取新快照(例如 GET /v1/transactions)。浏览器应使用同源会话;切勿将 API 密钥放入 URL,使用 x-api-key(data:read,每连接 1 单位)。

const es = new EventSource('/api/v1/events/stream');
es.addEventListener('transaction.finalized', (e) => console.log(e.lastEventId, JSON.parse(e.data)));
es.addEventListener('reset', () => { /* sinkron ulang */ });

用户数据(/v1/me)

仅限钱包会话(API 密钥返回 403)。GET/POST /v1/me/watchlist 和 DELETE /v1/me/watchlist/ {itemId} :资金池(内部 ID)、代币(CAIP-19)或仅观察账户(CAIP-10),最多 200 项;添加已存在项目返回 200 和 created: false。GET/PUT /v1/me/settings:带版本校验的通知偏好(发送最新 version;不匹配 → 409)。GET /v1/me/portfolio:活跃网络中的会话钱包 + 最多 20 个仅观察账户;读取失败账户状态为 error 且 meta.partial 为 true,不视为零余额。DELETE /v1/me/data 删除关注列表与偏好设置(安全审计日志保留)。

纸上与通知策略

GET/POST /v1/strategies, GET/PATCH /v1/strategies/ {id} ,POST preview/pause/resume/revoke、GET executions。均为会话 / 密钥所有者私有。修改需 strategies:write(5 单位);读取需 strategies:read(1 单位)。PATCH 与状态修改需最新 version;冲突返回 409。纸上模式记录触发条件,而非模拟交易;notify 模式仅用于 notify 类型。复投 / 再平衡 / 退出尚不执行资金操作。工作进程执行时间缓冲、冷却、UTC 每日限制与到期规则。撤销移除的是链下规则,而非链上授权额度。管理规则.

沙盒、变更日志与弃用

版本 1.4.0:纸上 / 通知策略、策略 API 权限、仓位 / 策略事件。版本 1.3.0:/v1/me 端点(关注列表、偏好、合并资产组合、删除数据)。版本 1.0.0 新增门户、密钥、配额、SDK 和 webhook。版本 1.2.0:完整的交易 / 报价 / 余额 / 状态架构(不再发送内部列)、交易历史分页、ETag、门户可选 Idempotency-Key、15 分钟 / 1 单位的 API 密钥 SSE。版本 1.1.0 在 OpenAPI 中新增钱包登录以及 GET /v1/tokens/ {tokenId} 在 SDK 中(CAIP-19 ID 进行 URL 编码)、SSE /v1/events/stream 以及自动交易事件。沙盒可运行本地数据库与基于固定数据的集成测试;API 不会伪造主网数据。注册表显示各部署的真实功能。破坏性变更使用新的主版本,并在禁用旧版本前公布迁移期。目前没有已弃用端点。

公开与会话端点

端点列表直接取自当前运行的 OpenAPI 契约。

方法端点说明
GET/v1/chains
GET/v1/chains/{chainSlug}/capabilities
GET/v1/protocols
GET/v1/vaultsVault ERC-4626 resmi BaniPool (Spark spUSDG Robinhood, sUSDC Base); snapshot langsung atau unavailable.
GET/v1/vaults/{vaultId}
POST/v1/vaults/{vaultId}/quotesOwner-bound read-only preview including contract fees and limits.
GET/v1/vaults/{vaultId}/positionPosisi wallet sesi di vault: shares, nilai aset, batas tarik kontrak, saldo aset di wallet.
POST/v1/vaults/{vaultId}/plansRencana transaksi vault.
GET/v1/pools
GET/v1/pools/search
GET/v1/pools/ohlcvCandle harga pool (GeckoTerminal) untuk grafik rentang.
GET/v1/pools/dex-listedApakah DexScreener mengindeks pool (untuk grafik embed).
GET/v1/pools/studio/stateOn-chain state of any Uniswap v2/v3/v4 or v3-fork pool by address or v4 pool ID: tokens, fee, tick, active liquidity, 24h LP fees (fee-growth accumulator) and whether adding liquidity is available.
GET/v1/pools/studio/liquidityActive-liquidity distribution around the current price (v3/v4) from initialized ticks; USD value per segment at current token prices.
GET/v1/pools/studio/chartPrice, TVL (v2/v3 balances), LP fees, volume (static fee only) and APR per interval from archive state over 1d/7d/30d.
GET/v1/pools/securityThe last full report is stored server-side and served immediately (cachedAt); reports older than 30 minutes or still computing are served while a background re-check runs (refreshing=true); fresh=1 forces a new check.
GET/v1/pools/security/historySecurity scan history (grade timeline) and detected change events for a pool: grade drops, checks that became riskier, owner/proxy/hook controller changes, active-liquidity and TVL drops of 50% or more.
GET/v1/pools/security/alerts/keyVAPID public key for Web Push security alerts (generated once and stored server-side).
POST/v1/pools/security/alertsOpt in to Web Push alerts for one pool (warning/danger events from the 30-minute monitor and the real-time WSS watcher).
POST/v1/pools/security/alerts/removeStop Web Push alerts for one pool on this browser.
POST/v1/pools/security/alerts/statusWhether this browser receives alerts for the pool.
GET/v1/pools/{poolId}
GET/v1/pools/{poolId}/history
GET/v1/pools/{poolId}/analyticsObserved TVL/price changes over at most 30 days; not PnL/APR.
GET/v1/analytics/poolsCompare 1–5 unique pools using a common observation window.
GET/v1/tokens
GET/v1/tokens/{tokenId}
GET/v1/token-iconsIkon raster on-demand untuk aset terindeks atau hasil deteksi pool, cocok jaringan dan CA.
GET/v1/accounts/{accountId}/balances
GET/v1/accounts/{accountId}/positions
GET/v1/positions/{positionId}/openedWaktu posisi NFT dibuat (block mint).
GET/v1/positions/{positionId}
GET/v1/status
GET/v1/developer/api-keysSesi wallet pemilik diperlukan.
POST/v1/developer/api-keysSesi wallet pemilik diperlukan.
DELETE/v1/developer/api-keys/{id}Sesi wallet pemilik diperlukan.
GET/v1/developer/usageSesi wallet pemilik diperlukan.
GET/v1/developer/webhooksSesi wallet pemilik diperlukan.
POST/v1/developer/webhooksSesi wallet pemilik diperlukan.
DELETE/v1/developer/webhooks/{id}Sesi wallet pemilik diperlukan.
GET/v1/developer/webhooks/{id}/deliveriesSesi wallet pemilik diperlukan.
GET/v1/events/streamServer-Sent Events (text/event-stream): transaction.finalized/failed milik pemilik sesi/API key dan event publik data.degraded.
GET/v1/me/watchlistWatchlist pool/token/akun milik wallet sesi (maks.
POST/v1/me/watchlistTambah item.
DELETE/v1/me/watchlist/{itemId}Sesi wallet pemilik diperlukan.
GET/v1/me/settingsPreferensi wallet sesi (default bila belum pernah disimpan, version 0).
PUT/v1/me/settingsSimpan preferensi dengan version guard: kirim version terakhir yang dibaca (0 bila belum ada); berbeda → 409.
GET/v1/me/portfolioAgregasi wallet sesi (terverifikasi) di jaringan EVM aktif + maks.
DELETE/v1/me/dataHapus watchlist dan preferensi milik wallet sesi.
GET/v1/strategiesStrategi privat milik sesi/key.
POST/v1/strategiesBuat draft dari posisi milik wallet.
GET/v1/strategies/{id}
PATCH/v1/strategies/{id}Ganti konfigurasi dengan version guard.
POST/v1/strategies/{id}/previewEvaluasi read-only; tidak mengubah timer, budget atau histori; tidak simulasi trade.
POST/v1/strategies/{id}/pause
POST/v1/strategies/{id}/resumeAktifkan versi ini setelah cek pemilik, expiry dan data RPC.
POST/v1/strategies/{id}/revokeCabut permanen penjadwalan strategi off-chain ini.
GET/v1/strategies/{id}/executions
GET/v1/strategies/{id}/keeperStatus izin keeper dana nyata (kebijakan BaniKeeperV4 & izin NFT on-chain) untuk posisi aturan ini, data transaksi pemberian/pencabutan izin (ditandatangani wallet pemilik), dan 20 pekerjaan keeper terakhir.
POST/v1/strategies/{id}/keeper/planRencana aksi keeper (compound/rebalance/exit aturan ini) untuk ditandatangani PEMILIK sendiri ("Jalankan sekarang"); disimulasikan, batas minimum dari simulasi.
POST/v1/strategies/{id}/keeper/confirmCatat transaksi keeper yang sudah terkonfirmasi (diverifikasi on-chain: ke kontrak keeper, event untuk posisi & pemilik aturan ini).
GET/v1/me/notificationsKanal notifikasi /automation milik wallet sesi: kunci publik Web Push dan status tautan Telegram.
POST/v1/me/notifications/pushDaftarkan browser ini untuk Web Push notifikasi aturan.
POST/v1/me/notifications/push/removeSesi wallet pemilik diperlukan.
POST/v1/me/notifications/push/statusSesi wallet pemilik diperlukan.
POST/v1/me/notifications/telegram/linkKode tautan sekali pakai (15 menit): buka url lalu tekan Start di bot.
POST/v1/me/notifications/telegram/verifySesi wallet pemilik diperlukan.
POST/v1/me/notifications/telegram/manualTautkan chat ID Telegram secara manual; hanya berhasil bila pesan uji terkirim.
POST/v1/me/notifications/telegram/unlinkSesi wallet pemilik diperlukan.
POST/v1/me/notifications/testKirim notifikasi uji ke semua kanal wallet sesi.
POST/v1/keeper/rebalanceRebalance posisi Uniswap v4 dalam satu transaksi lewat kontrak BaniKeeperV4 (tarik → swap penyeimbang di pool yang sama → posisi baru ±widthPct% milik pemilik).
POST/v1/keeper/confirmVerifikasi rebalance on-chain (event Rebalanced untuk posisi & pemilik ini) dan pindahkan aturan /automation pemilik ke posisi baru.
POST/v1/auth/challengesBuat challenge login (SIWE-like) untuk alamat wallet.
POST/v1/auth/verifyVerifikasi signature dan buat sesi 7 hari.
GET/v1/auth/sessionAlamat pemilik sesi aktif.
DELETE/v1/auth/sessionLogout: cabut sesi.
POST/v1/quotes
POST/v1/transaction-plans
POST/v1/transactions/{id}/submissions
POST/v1/transaction-tracking
POST/v1/transactions/{id}/rejected
GET/v1/zap-balancesSaldo wallet sesi (ETH native = alamat nol), maksimal 100 token jaringan per permintaan.
POST/v1/zap-plansRencana Zap In: token jaringan dikonversi melalui pool kanonik v2/v3 (langsung atau lewat wrapped native/stablecoin), lalu disesuaikan dengan rasio pool tujuan.
POST/v1/zap-out-plans
POST/v1/zap-out-batches
POST/v1/zap-out-contract-plans
POST/v1/zap-in-contract-plans
GET/v1/token-holdingsSemua token ERC-20 milik wallet sesi (pemilih token Zap).
GET/v1/zap-approvalsIzin seluruh koleksi NFT posisi v4 milik wallet sesi ke kontrak Zap BaniPool, beserta transaksi pencabutannya.
GET/v1/zap-receiptsStatus konfirmasi transaksi approval milik sesi, menggunakan RPC server dan cadangannya.
GET/v1/transactions
POST/v1/transactions/{id}/replacement
GET/v1/transactions/{id}
GET/v1/bridge/routesRute bridge Across terverifikasi (Base ↔ Robinhood Chain: ETH, WETH, USDC↔USDG).
POST/v1/bridge/quotesKuota bridge Across: biaya & jumlah diterima dari API Across, divalidasi terhadap SpokePool registry; calldata depositV3 dibangun server dan disimulasikan.
POST/v1/bridge/transfersCatat transaksi deposit yang sudah dikirim wallet.
GET/v1/bridge/transfers50 transfer bridge terakhir milik wallet sesi.
GET/v1/bridge/transfers/{id}Sesi wallet pemilik diperlukan.
POST/v1/swap-routesRute swap halaman /swap (khusus gateway Rust, sesi wallet): token A → B di satu jaringan lewat pool Uniswap v2/v3 terdaftar, langsung atau lewat wrapped native/stablecoin (hasil terbesar).
GET/v1/token-metaSimbol & desimal token ERC-20 dibaca dari kontrak (khusus gateway Rust, sesi wallet; maks.
POST/v1/bridge/estimatesPerkiraan Across untuk rencana swap lintas jaringan (khusus gateway Rust, sesi wallet): tanpa cek saldo, tanpa calldata, tidak disimpan.
POST/v1/me/notifications/email/linkKirim kode verifikasi 6 digit ke alamat email (khusus gateway Rust, sesi wallet; sekali per menit; aktif bila SMTP diatur).
POST/v1/me/notifications/email/verifyVerifikasi kode 6 digit (maks.
POST/v1/me/notifications/email/unlinkLepas email notifikasi.
GET/v1/platform-feeFee platform yang berlaku (publik, khusus gateway Rust), bps (100 = 1%) dikirim ke `recipient` di transaksi yang sama: `swapBps`/`stableBps` dari hasil swap /swap (stableBps untuk stablecoin ↔ stablecoin); `zapBps` dari input Zap In / hasil Zap Out (BaniZapV6); `bridgeBps` dari jumlah bridge di jaringan asal (BaniBridgeV1); `keeperBps` dari fee LP yang di-compound wallet keeper (BaniKeeperV6, maks `maxKeeperBps`, berlaku untuk izin baru).
GET/v1/pool-create/checkCek sebelum membuat pool baru (sesi wallet; Fase H, saat ini Robinhood Chain): urutan token0/token1, simbol & desimal, status terverifikasi, harga USD, apakah pool/pair sudah ada, tick spacing, dan harga pasar pembanding (token1 per token0).
GET/v1/pool-create/detectDeteksi otomatis untuk Buat pool (sesi wallet): jaringan (yang sudah dibuka) tempat kedua alamat adalah token valid, simbol/desimal/harga, dan per protokol daftar fee tier beserta pool yang sudah ada.
GET/v1/pool-create/tokenLangkah pertama Buat pool (sesi wallet): metadata satu token di jaringan yang dibuka dan hasil pemeriksaan keamanan token tanpa pool (nilai A–F, ringkasan, daftar pemeriksaan: peniru, proxy, mint, pajak, owner, dll.).
POST/v1/pool-create/zap-planZap In untuk pool baru (sesi wallet): bayar satu token (token pool, ETH, atau token lain).
POST/v1/pool-create/zap-contract-planZap In pool baru dalam SATU transaksi lewat kontrak BaniZapCreate (sesi wallet): body sama dengan /v1/pool-create/zap-plan ditambah slippageBps, swapSlippageBps, acceptTokenRisk, acceptPriceDeviation.