Developers
API reference
Public JSON endpoints. Every response is Solana mainnet data, no key required.
Basics#
- Base path:
/api/v1on the VYLO domain. - Responses are JSON with a network field set to mainnet-beta.
- Pool endpoints are cached for 60 seconds; wallet reads are never cached; token analysis is cached for 30 seconds.
- Errors return
{ error: string }with status 400 (bad input), 404 (not found) or 502 (upstream RPC error).
Endpoints#
| Method and path | Returns |
|---|---|
| GET /pools?protocol=&q=&limit= | Scored pools. protocol: bins | range | hybrid | classic (pool family). q: symbol search. limit: up to 500 (default 100). |
| GET /pools/:id | One pool from the live index, or 404. |
| GET /opportunities?risk= | Ranked pools with score components and the methodology text. risk: low | medium | high. |
| GET /tokens/:mint | Mint analysis: token program, decimals, supply, authorities, Token-2022 extensions, holder concentration, warnings. |
| GET /wallet/:address | Token balances of a wallet at live market prices, with a USD total. |
| GET /protocol/economics | Fee split and program deployment status. |
| GET /health | Status of every data source. |
The pool object#
typescript
interface ScoredPool {
id: string; // pool address
protocol: "bins" | "range" | "hybrid" | "classic"; // pool family
type: "classic" | "concentrated" | "discrete" | "stable" | "dynamic" | "launch";
base: Asset; quote: Asset; // { mint, symbol, name, decimals, logoURI, category }
feeBps: number; // may be fractional
tvlUsd: number; volume24hUsd: number; fees24hUsd: number;
price: number; priceMin24h: number | null; priceMax24h: number | null;
priceHistory: number[] | null;
createdAt: number | null; // ms
score: {
feeEfficiency: number; liquidity: number; capitalEfficiency: number;
stability: number | null; maturity: number | null;
total: number; risk: "low" | "medium" | "high";
};
}Example#
typescript
const res = await fetch("https://<vylo-domain>/api/v1/opportunities?risk=low");
const { opportunities, methodology, sources } = await res.json();
for (const p of opportunities.slice(0, 5)) {
console.log(p.base.symbol, p.quote.symbol, p.protocol, p.score.total);
}