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

Referensi API

Kelola API key · Unduh kontrak OpenAPI

Autentikasi dan scope

Kirim key melalui header x-api-key atau Bearer. Simpan key di server. Portal memerlukan sesi wallet; key tidak dapat membuat key baru. Pembacaan publik juga tersedia tanpa key, dengan rate limit IP.

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

data:read untuk data; quotes:create untuk quote; plans:create untuk rencana unsigned dan tracking transaksi milik wallet pemilik key. Signature wallet tetap diperlukan. strategies:read membaca aturan otomatisasi milik wallet pemilik key (GET /v1/strategies); strategies:write membuat, mengubah, menjeda, melanjutkan, dan mencabut aturan (eksekusi live tetap butuh izin keeper on-chain yang ditandatangani wallet). webhooks:manage mengelola subscription webhook (GET/POST /v1/developer/webhooks, DELETE /v1/developer/webhooks/{id}, GET …/deliveries). Pengelolaan API key tetap hanya lewat sesi wallet.

Login wallet untuk klien non-browser

Endpoint transaksi juga menerima sesi wallet. Buat challenge, tandatangani pesannya apa adanya dengan personal_sign, lalu verifikasi. Respons berisi token sesi 7 hari untuk header Authorization: Bearer (opsi sessionToken di SDK). Browser menerima cookie HttpOnly saja. Tanda tangan login tidak memberi izin transaksi apa pun.

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

SDK TypeScript

Workspace @defi/api-client menyediakan client yang dibuat dari OpenAPI. Jalankan di server.

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

Pagination dan presisi

Daftar pool, token, dan riwayat transaksi (GET /v1/transactions) memakai limit 1–200 (default 50) dan cursor dari meta.nextCursor. Pertahankan filter dan sort saat mengambil halaman berikutnya. Nominal token dan nilai keuangan dikirim sebagai string; metrik yang tidak tersedia bernilai null. Periksa meta.partial, dataStatus, dan timestamp sebelum menggunakan data.

Kuota, error, dan idempotency

Biaya: baca biasa 1 unit, histori/saldo/posisi akun 5, quote/plan 10, tracking 5. Kuota harian per key ditentukan operator; lihat X-Quota-Limit dan X-Quota-Remaining. HTTP 429 menyertakan Retry-After. Batas IP tetap berlaku. Baca publik membawa ETag: kirim If-None-Match untuk mendapat 304 tanpa body bila data tidak berubah. Response sukses berbentuk data/meta; error memuat code, message, retryable, details, dan requestId.

POST /v1/quotes memerlukan Idempotency-Key 8–128 karakter; POST /v1/developer/api-keys dan /webhooks menerimanya secara opsional (ulangan payload sama mengembalikan resource yang sama dengan replayed: true dan secret null). Gunakan key yang sama untuk payload yang sama. Client tidak mengulangi mutasi otomatis. Plan tidak menandatangani atau menyiarkan transaksi.

Webhook

Endpoint wajib HTTPS publik port 443. Secret ditampilkan sekali. Header: x-webhook-id, x-webhook-timestamp, x-webhook-signature. Verifikasi HMAC SHA-256 atas timestamp + titik + raw body dengan secret, bandingkan secara constant-time, tolak timestamp di luar ±5 menit, dan deduplikasi event ID. Body: id, type, data, createdAt.

Retry maksimal 8 attempt dengan backoff/jitter; setelahnya status dead. Respons 2xx menandakan diterima; redirect tidak diikuti. Event yang dapat dilanggan: transaction.finalized, transaction.failed, data.degraded publik (sekali per episode gangguan head jaringan), position.out_of_range, strategy.executed (paper/notified, atau executed oleh keeper live) dan strategy.execution_failed (eksekusi keeper live gagal; aturan dijeda). Event transaksi diproduksi otomatis oleh reconcile latar belakang (±30 detik setelah transaksi final/gagal), tanpa perlu polling; event posisi/strategi dari worker automation dan keeper. Preferensi positionOutOfRange mengendalikan event posisi; event audit strategi tetap tersedia.

Realtime (SSE)

GET /v1/events/stream mengalirkan event yang sama dengan webhook (milik pemilik sesi/key, plus data.degraded publik) sebagai text/event-stream. Setiap event membawa id sebagai cursor; sambung ulang dengan header Last-Event-ID (EventSource melakukannya otomatis) atau ?after=. Server menutup koneksi sekitar 100 detik untuk browser dan 15 menit untuk API key. Event revoked berarti key dicabut/kedaluwarsa atau sesi berakhir. Event reset berarti cursor sudah lewat retensi: ambil snapshot baru (mis. GET /v1/transactions). Di browser gunakan sesi same-origin; jangan menaruh API key di URL — kirim lewat header x-api-key (scope data:read, 1 unit per koneksi).

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 */ });

Data pengguna (/v1/me)

Hanya sesi wallet (API key ditolak 403). GET/POST /v1/me/watchlist dan DELETE /v1/me/watchlist/ {itemId} : pool (ID internal), token (CAIP-19) atau akun watch-only (CAIP-10), maks. 200 item; menambah item yang sudah ada mengembalikan 200 dengan created: false. GET/PUT /v1/me/settings: preferensi notifikasi dengan version guard (kirim version terakhir; berbeda → 409). GET /v1/me/portfolio: wallet sesi di jaringan aktif + maks. 20 akun watch-only; akun yang gagal dibaca berstatus error dan meta.partial true, tidak dihitung nol. DELETE /v1/me/data menghapus watchlist dan preferensi (audit log keamanan tetap).

Strategi paper dan pemberitahuan

GET/POST /v1/strategies, GET/PATCH /v1/strategies/ {id} , POST preview/pause/resume/revoke, GET executions. Semua privat untuk pemilik sesi/key. Mutasi membutuhkan strategies:write (5 unit); pembacaan strategies:read (1 unit). PATCH dan perubahan status membutuhkan version terbaru; konflik 409. Mode paper mencatat pemicu, bukan simulasi trade; mode notify hanya untuk type notify. Compound/rebalance/exit belum mengeksekusi dana. Worker menerapkan time buffer, cooldown, batas harian UTC dan expiry. Revoke mencabut aturan off-chain, bukan allowance on-chain.Kelola aturan.

Sandbox, changelog, dan deprecation

Versi 1.4.0: strategi paper/pemberitahuan, API scope strategi, event posisi/strategi. Versi 1.3.0: endpoint /v1/me (watchlist, preferensi, portofolio gabungan, hapus data). Versi 1.0.0 menambahkan portal, key, kuota, SDK, dan webhook. Versi 1.2.0: schema respons transaksi/quote/saldo/status lengkap (kolom internal tidak lagi dikirim), pagination riwayat transaksi, ETag, Idempotency-Key opsional di portal, SSE API key 15 menit/1 unit. Versi 1.1.0 menambahkan login wallet di kontrak OpenAPI, GET /v1/tokens/ {tokenId} di SDK (ID CAIP-19 di-URL-encode), SSE /v1/events/stream, dan event transaksi otomatis. Untuk sandbox, jalankan database lokal serta integration test berbasis fixture; API tidak mengarang data mainnet. Registry menunjukkan capability nyata setiap deployment. Breaking change memakai versi major baru dan pengumuman periode migrasi sebelum versi lama dinonaktifkan. Belum ada endpoint deprecated.

Endpoint publik & sesi

Daftar endpoint diambil langsung dari kontrak OpenAPI yang sedang berjalan.

MetodeEndpointKeterangan
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.