ETL data API
Query indexed Nolus protocol data at etl.nolus.network, from positions, pools and lenders to revenue, prices and account history, and the limits that apply.
The Nolus ETL indexes every Nolus block and contract event into a database and serves the result as a public, read-only JSON API. It answers the questions that a node answers slowly or not at all, such as time series, protocol-wide totals, liquidation and lending history, and the full position history of an account. For authoritative current state, or to submit transactions, use the chain endpoints instead.
The API is published at the following locations:
| Resource | Location |
|---|---|
| Base URL | https://etl.nolus.network, routes under /api |
| Spec (source of truth) | https://etl.nolus.network/openapi.json (OpenAPI 3.1) |
| Overview for LLM agents | https://etl.nolus.network/llms.txt |
| Browsable index | https://etl.nolus.network/ |
| Access | Public, no API key, CORS open to any origin, best effort |
Every response carries a Link header that points to the spec and to
llms.txt. Since the spec holds the full parameter list and response schema
of each endpoint, the sections below concentrate on the parts that most
integrations need.
What it covers
The spec groups its endpoints by tag, and each tag covers one area of protocol data:
| Tag | Data |
|---|---|
| Protocol, Currency | Registered protocols with their contract addresses; currencies with their per-protocol decimals and denoms |
| Metrics | TVL, supplied funds, open interest, borrowed volume, supplied versus borrowed over time, monthly active accounts |
| Treasury | Protocol revenue, NLS buybacks, staking rewards distributed, incentives pool |
| Liquidity | Earn pools (utilization, borrow APR), current and historical lenders |
| Position, Lease | Open positions with PnL and liquidation prices, markets, openings, repayments, liquidations, interest |
| Market | Price history per protocol and ticker, price feed health |
| PnL, Wallet | Realized and unrealized PnL; per-account transactions, positions, earnings and staking activity |
| Meta, Health | Version, ingested block count, liveness and readiness probes |
Useful endpoints
Most integrations start with the endpoints in this section. All of them use
GET and were verified on 2026-10-19, and wherever an endpoint needs a
protocol, you can pass SOLANA-METIS-USDC or any name that
/api/protocols/active returns.
Protocols and pools
These endpoints describe the active protocols, their currencies and the state of each lending pool:
| Endpoint | Returns |
|---|---|
/api/protocols/active | Active protocols with network, DEX, position type and contract addresses |
/api/protocols/SOLANA-METIS-USDC | One protocol |
/api/currencies/active | Currencies with per-protocol decimals and bank denoms |
/api/pools | Every pool in one call: utilization, supplied, borrowed, borrow APR |
/api/supplied-borrowed-history?protocol=SOLANA-METIS-USDC | Hourly supplied and borrowed series for one pool |
Protocol-wide figures
These endpoints return figures for the protocol as a whole:
| Endpoint | Returns |
|---|---|
/api/total-value-locked | TVL in USD (pool deposits plus open positions) |
/api/open-interest | Outstanding debt of all open positions in USD |
/api/lease-markets | Per market: open positions, value, mean leverage, 24-hour openings and price change |
/api/revenue, /api/buyback-total | Protocol revenue in USD; total NLS bought back, in NLS |
Positions and history
Position data covers the positions that are open now as well as past openings, liquidations and prices:
| Endpoint | Returns |
|---|---|
/api/positions | All open positions with PnL, current and liquidation prices |
/api/historically-opened?period=3m | Position openings in the window |
/api/liquidations?period=3m&format=csv | Liquidation events, as CSV |
/api/prices?interval=7&protocol=SOLANA-METIS-USDC&key=<ticker> | Price points [[timestampMs, price]] for the last 7 days |
In the price query, replace <ticker> with the ticker of the asset whose
price history you want.
One account
The account endpoints take a nolus1... account as the address parameter,
in place of <account> below:
| Endpoint | Returns |
|---|---|
/api/position-opens?address=<account> | Every position the account opened, newest first |
/api/leases-search?address=<account> | The account's position contract addresses |
/api/txs?address=<account>&limit=10 | The account's transactions, paginated |
/api/earnings?address=<account> | Lending earnings in USD |
/api/realized-pnl?address=<account> | Realized PnL in USD |
Health
The health endpoints report on the state of the API itself:
| Endpoint | Returns |
|---|---|
/api/blocks | Number of blocks ingested (a liveness signal, not the chain height) |
/api/version | The running API version |
/health, /ready | Liveness and readiness probes |
Example requests
The first request below prints the first pool from /api/pools, and the
second saves three months of liquidation events to a CSV file:
curl -s https://etl.nolus.network/api/pools | jq '.protocols[0]'
curl -s 'https://etl.nolus.network/api/liquidations?period=3m&format=csv' -o liquidations.csvConventions and limits
Query parameters and responses follow the same conventions across the API:
| Topic | Rule |
|---|---|
| Time window | period=3m|6m|12m|all on history endpoints, default 3m |
| Incremental sync | from=<ISO-8601>, exclusive lower bound |
| CSV | format=csv. export=true streams the full dataset and ignores period and from, and exports stop at 100,000 rows |
| Pagination | skip and limit, default 10, maximum 100, or 10 on /api/ls-loan-closing |
| Price history | interval in days, at most 100 |
| PnL over time | interval in days, at most 30 |
| Accounts | address must be a lowercase nolus1... bech32 account, and anything else returns 400 |
| Numbers | Amounts are JSON strings to parse as decimals. Token amounts use the decimals of the protocol they belong to (/api/currencies) |
| Freshness | Most aggregates are cached for 5 minutes or 1 hour, as each endpoint's description says. Hourly snapshot figures such as TVL and pools update on the hour, and per-account reads are not cached |
| Errors | JSON {"error": "...", "message": "...", "status": <code>}. An unknown protocol, currency or record returns 404 |
| Rate limits | No per-endpoint limits. On 429, back off as Retry-After says |
A few legacy fields are JSON numbers rather than strings, for example in
/api/realized-pnl, so check each endpoint's schema in the spec before you
parse its amounts.
The API is free for reasonable use. For bulk history, fetch one export=true
CSV instead of many paginated pages, and read every pool through /api/pools
instead of calling once per pool.
Public APIs
Base URLs, specs and uses of every public Nolus interface, from chain RPC, LCD and gRPC to the app REST API, WebSocket, ETL data API and NLS supply.
RPC, LCD and gRPC endpoints
Public Nolus mainnet endpoints for CometBFT RPC, REST (LCD) and gRPC, with community providers, example queries for each interface and the fair-use terms.