binaryVaults Data API

Vaults Data API

Welcome to the Bonzo Vaults Data API. The Vaults API exposes real-time and historical data for the Bonzo Yield Vaults product β€” a family of automated yield strategies that deploy user deposits into liquidity pools, lending markets, and other on-chain venues on the Hedera network. It is intended for third parties building dashboards, portfolio trackers, analytics platforms, bots, and any other tooling that needs programmatic access to vault state, performance, and user positions.

Bonzo Vaults ships in two flavors, each with its own data service:

  • Dual-Asset DEX Vaults β€” concentrated-liquidity vaults that hold a pair of assets and auto-compound trading fees and incentive rewards. These are powered by Beefy-style strategy contracts and serve liquidity to venues like SaucerSwap.

  • Single-Asset DEX Vaults β€” ICHI vaults that accept a single deposit token and internally manage a paired position. Users only ever deposit and withdraw the deposit token; the vault handles the rest.

Both services share the same overall shape β€” the same routing conventions, the same query patterns, and the same general response objects β€” but they expose data unique to each strategy class. This page documents both as a single, unified surface so an integrator can read across them with minimal friction.

Key Features

  • Real-Time Vault Data β€” TVL, APY/APR breakdowns, share prices, fees, and harvest history, refreshed continuously.

  • User Position Tracking β€” per-vault and aggregate position views, including yield, P&L, and historical snapshots.

  • Historical Charts β€” APY, TVL, share price, portfolio performance, and harvest-fee timeseries for any timeframe.

  • Platform Analytics β€” protocol-wide TVL, fees, revenue, and snapshot summaries.

  • Public Endpoints β€” no authentication required for any of the read endpoints documented below.

  • Hedera-native Identifiers β€” every contract is exposed with both its EVM-style address (0x…) and its Hedera entity ID (0.0.…) for compatibility with HashScan, the Hedera mirror node, and EVM tools.


Base URLs

The two vault types are served from two separate base URLs. Pick the one that matches the vault you are working with:

Vault type
Base URL

Dual-Asset DEX Vaults (Beefy-style)

https://mainnet-vaults.bonzo.finance

Single-Asset DEX Vaults (ICHI)

https://mainnet-single-asset.bonzo.finance

All endpoints below are prefixed with /v1/api/…. The health endpoint lives at /v1/health and a service-info endpoint is exposed at /.

circle-info

A vault's id is unique within its own service. A dual-asset vault ID will not resolve against the single-asset service and vice versa. Treat the two services as independent data sources keyed by (baseUrl, vaultId).


Common Concepts

The same handful of objects show up across nearly every endpoint. Read this section once and the rest of the page becomes a thin reference.

Networks and identifiers

Both APIs run against Hedera mainnet (chainType: "hedera_mainnet", network: "Hedera"). Each contract appears with two identifiers:

  • contractAddress β€” EVM 20-byte address, e.g. 0xcfba07324bd207C3ED41416a9a36f8184F9a2134.

  • contractId β€” Hedera native entity ID, e.g. 0.0.10164550.

Use whichever one matches your tooling. Tokens follow the same convention via address and contractId fields on each asset object.

Asset and pair-token objects

Every vault carries an array of underlying assets. The shape is consistent across both services:

Single-asset vaults additionally surface a pairToken β€” the secondary token the vault rebalances against β€” using the same shape.

TVL, APY, and APR

Field
Meaning

tvl / TVL

Total Value Locked in the vault, USD. Returned as a string for precision and (on the single-asset API) also as a number under TVL.

apy

Net annualized yield, expressed as a decimal β€” e.g. 0.157 is 15.7%. Note: the single-asset API returns APY as a percent number (e.g. 16.379…).

apy30d

30-day rolling APY (single-asset API).

daily

1-day yield estimate (decimal on dual-asset, percent number on single-asset).

harvestApy7d, harvestApy30d

Realized APY measured from the vault's own harvest history over the trailing window (dual-asset only).

vaultApr, vaultApy, tradingApr, rewardApr, clmApy

Component APRs that roll into apy. Useful when displaying a breakdown.

apySource

Which input drove the headline APY: "harvest", "price", "manual", etc.

confidence

Confidence scoring object on dual-asset vaults: { score, level: "low" | "medium" | "high", reasons: string[] }.

Share price and user position math

Vault deposits are tokenized as shares. A user's underlying balance is shares Γ— sharePrice, and yield is the change in that quantity since their entries.

  • sharePrice is returned in raw on-chain precision; sharePriceUsd is the USD-normalized version.

  • userPosition.deposited / depositedUSD capture cost basis.

  • userPosition.currentValue and currentValueInUSD capture the present mark-to-market value.

  • userPosition.yield is realized + unrealized yield since deposit.

  • userPosition.pnl = { amount, percentage } is convenience math: currentValue βˆ’ deposited.

Harvests

A harvest is the periodic on-chain operation that compounds collected fees and incentive rewards back into the vault. Harvest events are the primary fuel for realized APY measurements and for fee-attribution endpoints. Both APIs expose a lastHarvest timestamp on each vault, and both expose harvest-fee timeseries per user under /charts/users/:address/harvest-fees.


Service Info & Health

Both services expose a service banner at the root and a liveness probe at /v1/health.

GET /

Returns the service identity and a directory of mounted route prefixes.

GET /v1/health

Liveness check. Returns 200 OK with current uptime and version when the service is healthy.


Dual-Asset DEX Vaults

Base URL: https://mainnet-vaults.bonzo.finance

Dual-asset vaults hold a pair of assets β€” typically a SaucerSwap concentrated-liquidity LP β€” and auto-rebalance the position while compounding trading fees and emissions. Each vault has both a vault contract and a separate strategy contract.

List Vaults

GET /v1/api/vaults

Returns the full set of dual-asset vaults along with summary metrics.

Query Parameters

Parameter
Type
Description

protocol

string

Filter by protocol (e.g. SaucerSwap).

strategy

string

Filter by strategy name.

vaultType

string

Filter by vault type β€” single, concentratedLiquidity.

minTvl

number

Minimum TVL filter, USD.

minApy

number

Minimum APY filter (decimal, e.g. 0.05 = 5%).

sortBy

tvl | apy | name

Sort field.

sortOrder

asc | desc

Sort direction.

limit

number

Page size.

offset

number

Page offset.

afterTransaction

boolean

When true, bypasses the cache. Use after a deposit/withdraw to pull fresh state.

Response

Each VaultSummary includes (abbreviated):

Get Vault by ID

GET /v1/api/vaults/:id

Returns the full detail object for a single vault. Same shape as a VaultSummary plus richer breakdowns.

Path Parameters

Parameter
Type
Description

id

string

Vault ID (the id field returned from GET /vaults).

Query Parameters

Parameter
Type
Description

afterTransaction

boolean

Bypass cache.

List a User's Positions

GET /v1/api/vaults/user-positions?account=0x…

Lightweight, fast endpoint that returns every dual-asset vault and the caller's position in each. Designed for "My Vaults" dashboards. Yield/PnL math is omitted in this response for performance β€” call the per-vault detail endpoint below to get those.

Query Parameters

Parameter
Type
Required
Description

account

string

yes

EVM address of the user.

protocol, strategy, vaultType, minValue

filters

no

Same semantics as the list endpoint.

sortBy

deposited | currentValue | shares

no

Sort field.

sortOrder

asc | desc

no

Sort direction.

limit, offset

number

no

Pagination.

afterTransaction

boolean

no

Bypass cache.

Response

Get a User's Position in a Specific Vault

GET /v1/api/vaults/user-positions/:id?account=0x…

Returns the full position record β€” including yield breakdown and P&L β€” for a single vault.

Charts & Analytics

All chart endpoints share a timeframe query parameter that accepts 1D, 1W, 1M, 3M, 1Y, ALL, or EVERY (full snapshot history at native resolution). Defaults vary per endpoint.

GET /v1/api/charts/vaults/:id/historical-rate

APY/TVL timeseries for a vault, broken down by harvest-window and SaucerSwap fee/LARI APR sources.

GET /v1/api/charts/vaults/:id/metrics-history

Vault-level metrics history β€” TVL, APY, share price (and per-token share price), total assets, daily yield, and unique user count.

GET /v1/api/charts/vaults/:id/portfolio-performance?account=0x…

User-specific P&L chart for a single vault.

GET /v1/api/charts/vaults/:id/risk?days=30

Volatility, max drawdown, Sharpe ratio, and 95% VaR computed over the last days (1–365, default 30).

GET /v1/api/charts/users/:address/positions

Snapshot history of all of a user's positions across vaults. Optionally filter to a single vaultId.

GET /v1/api/charts/users/:address/:vaultId/position-history

Same shape as above, scoped to a single vault, with both raw and USD-denominated token balances.

GET /v1/api/charts/users/:address/harvest-fees

Harvest-fee attribution timeseries for a user. Optionally scoped by vaultId, timeframe, or an explicit startDate/endDate (ISO 8601). Returns per-harvest fee splits across both pair tokens plus running cumulative totals.

GET /v1/api/charts/users/:address/harvest-fees/summary

Aggregate-only version of the above β€” total fees collected, harvest count, average fee per harvest, first/last harvest. Useful for "lifetime earnings" tiles.

GET /v1/api/charts/vaults/:id/harvest-fees/users

Leaderboard endpoint β€” every user's cumulative harvest fees in a given vault, ordered descending. Supports startDate, endDate, and limit (1–1000, default 100).

GET /v1/api/charts/analytics/overview

Snapshot of the platform: TVL, vault count, average APY, total users, total yield generated.

GET /v1/api/charts/analytics/platform-stats/latest

Most recent daily snapshot of platform-wide totals and revenue split.

GET /v1/api/charts/analytics/platform-stats/history?timeframe=3M

Historical timeseries of the same shape, one record per day, for charting protocol-level metrics.

GET /v1/api/charts/prices?tokens=HBAR,USDC,SAUCE

Spot prices for any comma-separated list of token symbols, returned with their oracle source and capture timestamp.

User Action History

GET /v1/api/users/actions?address=0x…

On-chain action history for a user β€” deposits, withdrawals, and harvests β€” joined to vault metadata.

Query Parameters

Parameter
Type
Required
Description

address

string

yes

User EVM address.

vaultId

string

no

Filter to a single vault.

sortBy

timestamp | action | blockNumber

no

Default timestamp.

sortOrder

asc | desc

no

Default desc.

limit

number

no

1–100, default 50.

offset

number

no

Default 0.


Single-Asset DEX Vaults

Base URL: https://mainnet-single-asset.bonzo.finance

Single-asset vaults are ICHI vaults on Hedera. The user deposits a single token (e.g. HBAR or USDC) and the vault internally manages a paired position. The deposited token is referred to as asset[0] and the secondary token as pairToken / asset[1]. Many fields below mirror the dual-asset surface; the differences are noted inline.

circle-info

On the single-asset API, apy, apy30d, and daily are returned as percent numbers (e.g. 16.379 means 16.379%), not decimals. Convert accordingly on the consumer side.

List Vaults

GET /v1/api/vaults

Returns the set of single-asset (ICHI) vaults along with summary metrics.

Query Parameters

Parameter
Type
Description

protocol

string

Filter by protocol (e.g. SaucerSwap).

vaultType

single | concentratedLiquidity | ICHI

Vault type filter.

minTvl, minApy

number

Threshold filters.

sortBy

tvl | apy | name

Sort field.

sortOrder

asc | desc

Sort direction.

limit, offset

number

Pagination (default limit=50).

afterTransaction

boolean

Bypass cache.

Response

Each VaultSummary includes:

Get Vault by ID

GET /v1/api/vaults/:id

Returns the full detail object for a single ICHI vault. Same shape as a list VaultSummary plus an optional userPosition block when account is supplied.

Query Parameters

Parameter
Type
Description

account

string

EVM address β€” when supplied, the response includes the caller's userPosition.

afterTransaction

boolean

Bypass cache.

List a User's Positions

GET /v1/api/vaults/user-positions?account=0x…

Returns every single-asset vault position held by a user, with summary totals.

UserPositionSummary includes all the same fields as the embedded userPosition object on the vault detail response, plus vaultId, vaultName, apy, and depositedUsd.

Get a User's Position in a Specific Vault

GET /v1/api/vaults/user-positions/:id?account=0x…

GET /v1/api/vaults/:id/users/:address

Two equivalent paths for the same data β€” pick whichever fits your routing style. Returns a single UserPositionSummary or 404 if the user has no position in the vault.

Charts & Analytics

GET /v1/api/charts/vault-tvl-apy/:id?timeframe=1M

TVL and APY timeseries for a single vault. Returns apy as a percent number (matching the vault detail convention).

GET /v1/api/charts/tvl?timeframe=1M

GET /v1/api/charts/apy?timeframe=1M

Platform-wide TVL and APY timeseries respectively.

GET /v1/api/charts/portfolio/:address?timeframe=1M

User portfolio P&L chart β€” same shape as the dual-asset portfolio-performance endpoint:

GET /v1/api/charts/user/:address/positions?timeframe=1M&vaultId=…

Per-user, per-vault position snapshots over time. vaultId filters to a single vault.

GET /v1/api/charts/vault-performance/:id

30-day "Hold vs Vault" comparison series for a vault. Returns five strategy lines: hold deposit token, hold 50/50, Uniswap-style V2 LP, vault, vault with fees. Useful for "is my vault actually beating the alternative?" charts.

GET /v1/api/charts/users/:address/harvest-fees

Same fee-attribution shape as the dual-asset harvest-fees endpoint, plus an extra depositTokenSymbol and totalFeesCollectedInDepositToken field that re-prices total fees into the user's deposit token (helpful for single-asset UX). Supports vaultId, timeframe, startDate, endDate.

GET /v1/api/charts/analytics/overview

Platform-level summary. The single-asset service returns pre-formatted strings (e.g. "$634.83K", "6.39%"):

GET /v1/api/charts/analytics/global-stats

Latest snapshot + cumulative totals for fees and revenue.

GET /v1/api/charts/analytics/global-stats/series?timeframe=1D

Time-series version of global-stats for charting protocol fees, revenue, and TVL.

GET /v1/api/charts/analytics/platform-stats/latest

GET /v1/api/charts/analytics/platform-stats/history?timeframe=EVERY

Identical shape to the dual-asset endpoints of the same name (see Dual-Asset Charts & Analytics), tracking per-day totals, revenue, fees, and withdrawals across all single-asset vaults.

User Token Balances

GET /v1/api/users/balances?address=0x…&tokenList=HBAR,USDC,0x…

Returns the user's wallet balances and USD valuations for an arbitrary list of tokens. tokenList accepts either symbols or contract addresses, comma-separated.

User Action History

GET /v1/api/users/actions

Same purpose as the dual-asset version β€” deposits and withdrawals β€” with a slightly richer per-action payload that captures both raw token amounts and the deposit-token normalization that ICHI vaults expose.

Query Parameters

Parameter
Type
Required
Description

address

string

one of address/vaultId is required

User EVM address.

vaultId

string

one of address/vaultId is required

Filter to a vault.

action

deposit | withdraw

no

Action type.

limit

number

no

1–1000, default 100.

offset

number

no

Default 0.

sortBy, sortOrder

string

no

Default timestamp desc.

Pool Liquidity

The single-asset service exposes the underlying SaucerSwap pool's liquidity directly β€” useful for estimating slippage or sizing deposits.

GET /v1/api/pools/liquidity?tokenAContractId=0.0.X&tokenBContractId=0.0.Y

Look up a pool by its token pair using Hedera contract IDs.

GET /v1/api/pools/:poolId/liquidity

Look up a pool by its pool contract ID directly.

Both return:


Error Handling

Every error response across both services follows the same envelope:

Common HTTP statuses you should plan for:

Status
Meaning

200

Success.

400

Bad Request β€” a required parameter is missing or fails validation.

401

Unauthorized β€” only relevant to the (non-public) /admin routes.

404

Not Found β€” vault or user position does not exist.

409

Conflict β€” only emitted by admin endpoints.

429

Rate Limit Exceeded.

500

Internal Server Error β€” including upstream RPC/oracle failures.

circle-exclamation

Rate Limiting

Each service applies a default IP-based rate limit of 100 requests per 15 minutes to public routes. Exceeding the limit returns 429 with a standard Retry-After-style payload. There is no authentication tier today β€” well-behaved clients should:

  • Cache list responses (TTL β‰ˆ 30s aligns with the server's own cache headers).

  • Batch users instead of polling per-user every render.

  • Use the afterTransaction=true flag only when you actually need fresh state after a write.


Best Practices

  • Use user-positions for "My Vaults" views. It's an order of magnitude faster than calling vault detail per row, because it skips the full yield/PnL pass.

  • Hit user-positions/:id only for the vault the user is interacting with. That is where the full breakdown lives.

  • Refresh state with ?afterTransaction=true immediately after a deposit/withdraw, and otherwise let the 30-second cache do its job.

  • Convert APY units before displaying. Dual-asset returns decimals (0.157); single-asset returns percents (16.379). Normalize at your ingestion layer.

  • Use chartType: "ICHI" to detect single-asset vaults in any context where a position can come from either service.

  • Snapshot confidence.level alongside any APY you display. A low confidence reading with price_fallback reasons should be visually distinguished from a high confidence harvest-derived APY.

  • Always read both contractAddress and contractId. The EVM address is for eth_* RPCs and EVM tools; the contract ID is for HashScan and the Hedera mirror node.

  • Implement exponential backoff on 5xx and 429. Both services are tolerant to bursts but will rate limit aggressive crawlers.


Example: End-to-End Integration

The following snippet pulls a unified "all of my vault positions" view across both services, sorts by current value, and prints a summary.

Drilling into a single position once the user clicks a row:


Support

For questions, integration help, or to report a discrepancy in the data, drop into the #developers channel in the Bonzo Discordarrow-up-right or open an issue on the Bonzo docs repo. The Vaults team monitors both during normal business hours.

Last updated