Jupiter Lend icon

Jupiter Lend Data API

Pay-per-call Solana Jupiter Lend data via x402. Pay in USDC on Base or Solana. No signup, no API keys.

x402 · USDC · Base & Solana

Endpoints & prices

EndpointPer call
GET /liquidations
Jupiter Lend vault liquidations (newest first), optional vault id / liquidator / since-day filter.
?vault=40&limit=10
$0.005
GET /rates/daily
Daily per-token liquidity-layer stats for the last `days` UTC days of the dataset: last borrow rate & utilization (bps), exchange prices (1e12-scaled), net supply/borrow change.
?mint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&days=7
$0.002
GET /earn/wallet
One wallet's Jupiter Lend Earn deposit/withdraw history (as receiver/owner/sender).
?wallet=7z9nBbRYkregqubfaXjVdCpRgNTMee7rSEqawXugejDQ&limit=10
$0.003
GET /dex/swaps/daily
Daily Jupiter Lend DEX pool stats for the last `days` UTC days of the dataset: swaps, volume and fees per token side, with pool token mints/decimals.
?days=7
$0.002
GET /lend-jupiter-join
Lend DEX swaps that were routed through the Jupiter aggregator in the same tx (joined on signature), with the outer Jupiter route. Requires the jupiter_swaps table; returns 503 (no charge) until it is loaded.
?limit=5
$0.01

Paid routes need an x402 client (e.g. @x402/fetch). Free routes are only /coverage, /api, /health, and /stats — call a priced path to get HTTP 402 + PAYMENT-REQUIRED.

How it works

Call any endpoint. Without payment you get HTTP 402 with a PAYMENT-REQUIRED header describing the price and accepted networks. An x402 client (e.g. @x402/fetch) pays in USDC and retries automatically. Invalid parameters return 400 before any payment is requested.

$ curl -i "https://lend-api-production.up.railway.app/liquidations?vault=40&limit=3"
HTTP/1.1 402 Payment Required
payment-required: eyJ4NDAyVmVyc2lvbiI6Mi...   # base64 JSON: price, network, payTo

$ curl https://lend-api-production.up.railway.app/api      # machine-readable endpoint list (free)
$ curl https://lend-api-production.up.railway.app/coverage # dataset time range (free)
$ curl https://lend-api-production.up.railway.app/health   # {"ok":true}

Data

~30 days of Solana Jupiter Lend data, refreshed every 6 hours (America/New_York). Exact range at /coverage. The first and last UTC day are partial (partial: true). Not block-by-block real-time; days counts back from the latest day in the dataset. Unknown tokens have symbol: null plus a display-only shortened mint_label. Daily borrow rate/utilization are null on days with no on-chain rate-update event (see rate_source). Decoded with the jupiter-lend-substreams package.

Every response is {rows, count, coverage}. Raw on-chain amounts are base-unit integer strings (exact); *_ui fields are decimal-adjusted numbers. days (1–31, default 7) counts back from the latest day in the dataset.