您的密钥。您的资产。

探索

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

您的资产

钱包主页交易自动化兑换

生态系统

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

搜索资金池

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

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

创建新资金池

连接钱包

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

检测到的钱包

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

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

文档

API 密钥和钱包登录

访问 API 有两种方式:用于您服务器的 API 密钥,以及代表钱包执行操作的钱包会话(消息签名)。

Base URL 与格式

text
https://banipool.com/api/v1
  • 成功响应:{ "data": …, "meta": { "requestId", "asOf", "nextCursor"?, "partial"? } }。
  • 代币数量和金额以字符串形式发送(完整精度);不可用的指标为 null,绝不会编造。
  • ID 采用 CAIP 标准:网络 eip155:8453,账户 eip155:8453:0x…,代币 eip155:8453/erc20:0x…。

API 密钥

在开发者门户 → API 密钥中创建密钥(需要钱包登录)。密钥绑定到所有者钱包,仅显示一次,可随时撤销。请将其存放在服务器环境变量中,切勿放入前端代码。

bash
# Header x-api-key (atau Authorization: Bearer <key>)
curl -s "https://banipool.com/api/v1/pools?chain=base&limit=5" \
  -H "x-api-key: $BANIPOOL_API_KEY"
权限范围访问权限
data:read公开数据:网络、资金池、代币、账户余额与仓位、状态、SSE。
quotes:create交易报价与 Zap 计划(代表密钥所有者钱包模拟)。
plans:create为密钥所有者钱包生成未签名交易计划并跟踪交易。
strategies:read / write密钥所有者钱包的 paper/notify 自动化规则。

配额与速率限制

  • 每次请求消耗:普通读取 1 单位;历史、余额、账户仓位 5;报价/计划 10;跟踪 5。
  • 剩余配额显示在 X-Quota-Limit 和 X-Quota-Remaining 响应头中;HTTP 429 会附带 Retry-After。
  • 公开读取会返回 ETag;发送 If-None-Match,数据未变化时将得到无响应体的 304。

钱包登录(会话)

交易和个人数据端点(/v1/me/*)使用钱包会话。先创建 challenge,使用 personal_sign 原样签署其消息,然后验证。非浏览器客户端会获得有效期 7 天的会话令牌用于 Authorization: Bearer 头;浏览器则获得 HttpOnly Cookie。

ts
import { privateKeyToAccount } from 'viem/accounts';

const API = 'https://banipool.com/api/v1';
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);

// 1) Challenge
const ch = await fetch(`${API}/auth/challenges`, {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ address: account.address, chainId: 8453 }),
}).then((r) => r.json());

// 2) Tanda tangani pesan apa adanya (personal_sign)
const signature = await account.signMessage({ message: ch.data.message });

// 3) Verifikasi → token sesi 7 hari
const v = await fetch(`${API}/auth/verify`, {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ challengeId: ch.data.id, signature }),
}).then((r) => r.json());

const session = v.data.token; // Authorization: Bearer <session>

登录签名不授予任何交易权限。来自浏览器的写操作必须发送 x-banipool-csrf: 1 请求头。

TypeScript SDK

@defi/api-client 工作区包含由 OpenAPI 契约生成的类型化客户端。可在 /api/v1/openapi.json 下载契约,为其他语言生成客户端(openapi-generator、oapi-codegen 等)。

ts
import { createDefiClient } from '@defi/api-client';

const client = createDefiClient({
  baseUrl: 'https://banipool.com/api',
  apiKey: process.env.BANIPOOL_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.length, data?.meta.nextCursor);
python
import os, requests

API = "https://banipool.com/api/v1"
r = requests.get(f"{API}/pools", params={"chain": "base", "limit": 50},
                 headers={"x-api-key": os.environ["BANIPOOL_API_KEY"]}, timeout=20)
r.raise_for_status()
body = r.json()
for pool in body["data"]:
    print(pool["id"], pool.get("tvlUsd"))
print("cursor berikutnya:", body["meta"].get("nextCursor"))