KUNCI ANDA. ASET ANDA.

JELAJAHI

RingkasanCari walletPool likuiditasTokenRadar pool baruDaftar pantauan

ASET ANDA

Profil walletTransaksiOtomatisasiSwap

EKOSISTEM

Status jaringanDokumentasiPanduanArtikelDeveloperPengaturan
BANIPOOL/Dokumentasi

Cari pool

Tempel atau ketik alamat pool, ID pool, CA token, atau simbol token. Semua jaringan dicari sekaligus.

Alamat token akan menampilkan pool yang menggunakan token tersebut.

Buat pool baru

Connect wallet

Pilih wallet di perangkat ini atau hubungkan wallet HP dengan QR.

Wallet terdeteksi

Tidak ada wallet browser yang terdeteksi. Gunakan WalletConnect untuk wallet di HP.

Tanda tangan login untuk menampilkan portofolio tidak memberi izin transaksi.

Dokumentasi

API key & login wallet

Dua cara mengakses API: API key untuk server Anda, dan sesi wallet (tanda tangan pesan) untuk aksi atas nama sebuah wallet.

Base URL & format

text
https://banipool.com/api/v1
  • Respons sukses: { "data": …, "meta": { "requestId", "asOf", "nextCursor"?, "partial"? } }.
  • Nominal token dan nilai uang dikirim sebagai string (presisi penuh); metrik yang tidak tersedia bernilai null, tidak pernah dikarang.
  • ID memakai standar CAIP: jaringan eip155:8453, akun eip155:8453:0x…, token eip155:8453/erc20:0x….

API key

Buat key di Developer Portal → API key (perlu login wallet). Key terikat ke wallet pemiliknya, hanya ditampilkan sekali, dan bisa dicabut kapan saja. Simpan di environment server, jangan di kode frontend.

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"
ScopeAkses
data:readData publik: jaringan, pool, token, saldo & posisi akun, status, SSE.
quotes:createQuote transaksi & rencana Zap (simulasi atas nama wallet pemilik key).
plans:createRencana transaksi unsigned dan tracking transaksi wallet pemilik key.
strategies:read / writeAturan otomatisasi paper/notify milik wallet pemilik key.

Kuota & batas laju

  • Biaya per request: baca biasa 1 unit; histori, saldo, posisi akun 5; quote/plan 10; tracking 5.
  • Sisa kuota terlihat di header X-Quota-Limit dan X-Quota-Remaining; HTTP 429 menyertakan Retry-After.
  • Pembacaan publik membawa ETag; kirim If-None-Match untuk mendapat 304 tanpa body bila data tidak berubah.

Login wallet (sesi)

Endpoint transaksi dan data pribadi (/v1/me/*) memakai sesi wallet. Buat challenge, tanda tangani pesannya apa adanya dengan personal_sign, lalu verifikasi. Klien non-browser menerima token sesi 7 hari untuk header Authorization: Bearer; browser menerima cookie HttpOnly.

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>

Tanda tangan login tidak memberi izin transaksi apa pun. Mutasi dari browser wajib mengirim header x-banipool-csrf: 1.

SDK TypeScript

Workspace @defi/api-client berisi client bertipe yang dibuat dari kontrak OpenAPI. Unduh kontraknya di /api/v1/openapi.json untuk membuat client bahasa lain (openapi-generator, oapi-codegen, dll.).

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"))