API
The Venus Protocol API providing access to indexed protocol data.
The Venus Protocol API exposes indexed lending-market, pool, and governance data. The OpenAPI specification embedded below currently documents two endpoint families:
Market and pool data — listed markets, pool configuration, historical market snapshots, and aggregate TVL
Governance data — proposals, votes, and voter activity
API responses are derived from indexed data and can lag the chain, omit a recent event, or temporarily fail. Do not treat them as authoritative for transaction simulation, balances, permissions, market pause state, prices, or liquidation safety. Read the relevant contracts through an RPC endpoint at a recorded block when correctness depends on live state.
The live Swagger playground and OpenAPI JSON are the source of truth for the currently published request parameters and response schemas. The checked-in specification rendered on this page is a snapshot and should be resynchronized when the live JSON changes.
Base URL
The documented read endpoints are available without authentication at these origins. Endpoint paths are appended directly to the origin; there is no /api prefix.
mainnet: https://api.venus.io
testnet: https://testnetapi.venus.ioFor example, a BNB Chain mainnet request to the default stable pools route is:
curl --get 'https://api.venus.io/pools' \
--data-urlencode 'chainId=56'Versioning
Routes that declare the accept-version request header support stable and next. Omitting the header selects stable; an unsupported value is rejected. Do not assume every API route is versioned—check the OpenAPI entry for the specific path.
stable and next can have different required query parameters and response shapes. In the published specification, this is material for /markets and /pools; read the schema for the selected version instead of deserializing both as the same object.
The current stable responses for those routes include an HTTP Warning: 299 header instructing clients to migrate to accept-version: next. Test the next schema before switching and monitor response warnings during every rollout:
When next is promoted, the server can make both header values resolve to the newly stable implementation and warn clients to remove accept-version: next. Removing that opt-in after promotion avoids silently receiving a later preview. Pin client expectations with contract tests; the header name is not a permanent schema version identifier.
This page was checked against the live v1.73.0 specification. Live service behavior and the live OpenAPI document take precedence over the checked-in snapshot rendered below.
Pool Endpoints
Returns pool data for all listed pools, optionally filterable by the pool's comptroller address.
Versioning (controlled via accept-version header):
stable(default):chainIdis required. Returns a paginated list of pools with embedded markets (filtered toisListed: true) and a top-leveltokensarray ofTokenMetadata.next:chainIdis optional; accepts a JSON array string for multi-chain queries (e.g.["56","1"]). Returns pools grouped by chainId alongside a separately paginated markets list withunderlyingTokenMetadataembedded in each market. No top-leveltokensfield.
[both] Filter by pool comptroller address.
[both] Filter by pool name.
[both] Filter by price oracle address.
[stable] Required. [next] Optional; accepts a JSON array string for multi-chain queries (e.g. ["56","1"]).
[both] Columns to sort by. Default is descending. Prepend + for ascending (e.g. +name).
[both] Maximum number of results to return.
20[both] Page number for pagination.
0Selects the API version. stable (default) requires chainId and returns a paginated list with embedded markets and a top-level tokens array. next supports multi-chain queries and returns pools grouped by chainId with markets in a separate paginated block.
Returns Pool data for all listed pools.
Malformed Query
GET /pools HTTP/1.1
Accept: */*
{
"error": "text"
}Market Endpoints
Returns market data for listed markets, optionally filterable by asset address, name, symbol, underlying address, underlying name or underlying symbol.
Versioning (controlled via accept-version header):
stable(default):chainIdis required. Response includes a top-leveltokensarray ofTokenMetadataobjects. Markets includerewardsDistributorsandpointsDistributions.next:chainIdis optional for cross-chain queries. Token metadata is embedded inside each market asunderlyingTokenMetadatawith nestedtokenPrices. SupportsaccountAddressfor Prime APY data. No top-leveltokensfield.
[stable] Required. [next] Optional. Blockchain chain ID to filter results.
[both] Filter by vToken address.
[both] Filter by asset symbol.
[both] Filter by asset name.
[both] Filter by underlying token address.
[both] Filter by underlying token name.
[both] Filter by underlying token symbol.
[both] Columns to sort by. Default is descending. Prepend + for ascending (e.g. +underlyingName).
[both] Maximum number of results to return.
20[both] Page number for pagination.
0[next only] Account address to embed personalised Prime APY boosts into each market.
Selects the API version. stable (default) requires chainId and returns a top-level tokens array. next supports cross-chain queries and embeds token data inside each market as underlyingTokenMetadata.
Returns Market data for all listed markets.
Malformed Query
GET /markets HTTP/1.1
Accept: */*
{
"error": "text"
}Fetch an array of daily snapshots of supply and borrow totals and supply and borrow apy over the previous 365 days for a given asset.
vToken address to fetch history for.
Chain ID of the network to query history for.
yearPossible values: Returns historical data for the requested asset.
Unexpected error
GET /markets/history?asset=text&chainId=text HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Returns the total value locked by all markets in the requested chains.
Comma-separated list of chain IDs to filter results. If omitted, all chains are included.
Returns the TVL data for the requested chains.
Unexpected error
GET /markets/tvl HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Governance Endpoints
Get vote summary for a given proposal, includes sums of for, against, abstain and total votes.
Proposal Id for fetching a detailed proposal
Proposal vote summary
Unexpected error
GET /governance/proposals/{proposalId}/voteSummary HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Retrieve a summary of an account's voter profile.
Account address
A summary of an account's voter profile including latest governance transactions.
Unexpected error
GET /governance/voters/{address}/summary HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Retrieve the history of proposals a given account has voted on
Account address
Array of proposals in which the given account has voted
Unexpected error
GET /governance/voters/{address}/history HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Query voter accounts ordered by votes.
Limit used for pagination
20Page number to fetch
0Returns an array of voter accounts ordered by votes
Unexpected error
GET /governance/voters HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Returns paginated array of proposals.
Filter by proposal ID
Filter by proposal state
Array of columns to order results. Default sort is descending. If '+' is prepended to a column it will be sorted ascending.
Limit used for pagination
20Page number to fetch
0Returns an array of proposals.
Unexpected error
GET /governance/proposals HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Get voter details for a given proposal.
Filter by proposal ID
Account address
Array of columns to order results. Default sort is descending. If '+' is prepended to a column it will be sorted ascending.
Limit used for pagination
20Page number to fetch
0Pagination object with paginated voter activity and a summary of proposal votes.
Unexpected error
GET /governance/proposals/votes HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Returns paginated array of proposals. It takes an optional array of proposal ids to filter by.
Proposal Id for fetching a detailed proposal
Returns an array of proposals.
Unexpected error
GET /governance/proposals/{proposalId} HTTP/1.1
Accept: */*
{
"message": "text",
"status": true
}Last updated

