Protocol coverage & registry
Which Stellar DeFi protocols Orion supports, what "supported" means, and the registry endpoints for reserves, TVL, and emissions.
Orion normalizes several Stellar DeFi protocols behind one API. The registry endpoints tell you which protocols are live, what each exposes, and their protocol-level economics — reserves, TVL, and emissions — independent of any single wallet.
The protocol set
Protocol ids are a closed set. Every id-taking parameter validates against it:
protocol_id | What it is |
|---|---|
blend | Lending / borrowing pools. |
aquarius | AMM, including concentrated-liquidity pools. |
soroswap | AMM / DEX liquidity pools. |
fxdao | Collateralized-debt vaults. |
List protocols
GET /v1/protocols returns the registry — one entry per protocol with its current
support status and capabilities:
curl https://query.orionhq.run/v1/protocols \
-H "x-orion-api-key: $ORION_KEY"{
"data": {
"protocols": [
{
"protocol_id": "blend",
"display_name": "Blend",
"indexing_mode": "event_driven",
"has_activity_feed": true,
"status": "supported",
"supported_position_types": ["supply", "collateral", "liability", "backstop"],
"adapter": {
"adapter_id": "blend-v2",
"status": "healthy",
"version": "0.14.0",
"contracts_tracked": 12,
"error_count_1h": 0,
"last_sync_ledger": 3356416,
"last_sync_at": "2026-07-23T09:12:44Z"
}
}
]
},
"enrichment": { "...": "contract and asset lookups" },
"meta": { "...": "response metadata" }
}What “supported” means
The status field is the support contract for each protocol:
status | Meaning |
|---|---|
supported | Fully indexed and served; the schema is stable. |
provisional | Indexed and readable, but the shape or coverage may still change. |
deprecated | Still served, but scheduled for removal. |
Two more fields describe how a protocol is indexed:
indexing_mode—event_driven(state derived from on-chain events) orstorage_poll(state read by polling contract storage). Astorage_pollprotocol has no event stream, so itshas_activity_feedis alwaysfalse.supported_position_types— the buckets this protocol can produce, drawn fromcollateral,supply,liability,lp,backstop, andvault.
The adapter block reports live indexer health: sync position
(last_sync_ledger), recent error_count_1h, and a healthy / degraded /
down status.
Reserves
GET /v1/protocols/{id}/reserves returns per-asset reserve state — rates,
factors, and caps — as typed top-level fields, so you don’t parse protocol JSON:
curl "https://query.orionhq.run/v1/protocols/blend/reserves" \
-H "x-orion-api-key: $ORION_KEY"{
"data": {
"protocol_id": "blend",
"reserves": [
{
"contract": "CCLBPEYS...",
"asset_id": "CAS3J7GY...",
"asset_symbol": "XLM",
"status": "active",
"ledger": 3356416,
"supply_apr": "0.0221",
"borrow_apr": "0.0587",
"borrow_cap": "5000000.0000000",
"decimals": 7
}
],
"backstops": []
},
"meta": { "...": "response metadata" }
}backstops carries pool-level first-loss capital — distinct from any single
wallet’s own backstop deposit — and is an empty list when the read model has no
backstop rows yet. Nullable numerics serialize as JSON null, never a fabricated
0. Reserve reads accept as_of_ledger for a point-in-time snapshot — see
As-of-ledger & staleness.
TVL
GET /v1/protocols/{id}/tvl returns total value locked as a time series. Bound it
with from/to (RFC 3339) and a resolution of 1h, 1d, or 1w:
curl "https://query.orionhq.run/v1/protocols/blend/tvl?from=2026-07-01T00:00:00Z&to=2026-07-23T00:00:00Z&resolution=1d" \
-H "x-orion-api-key: $ORION_KEY"{
"data": {
"protocol_id": "blend",
"resolution": "1d",
"points": [
{ "timestamp": "2026-07-22T00:00:00Z", "tvl_usd": "4821004.55" },
{ "timestamp": "2026-07-23T00:00:00Z", "tvl_usd": "4903117.20" }
]
},
"meta": { "...": "response metadata" }
}Emissions
GET /v1/protocols/{id}/emissions returns per-pool emission rates, exposed as a
standalone primitive so you can build yield comparisons without fetching any
wallet’s positions:
curl "https://query.orionhq.run/v1/protocols/blend/emissions" \
-H "x-orion-api-key: $ORION_KEY"Per-wallet, per-protocol positions
To read one wallet’s positions for a single protocol — with protocol-specific detail the unified endpoint flattens — use the dedicated reads:
| Endpoint | Returns |
|---|---|
GET /v1/users/{address}/positions/blend | All Blend pools for the wallet, with per-pool health and per-asset APYs. |
GET /v1/users/{address}/positions/blend/{pool_id} | One Blend pool’s detail. pool_id is the pool contract address (starts with C); slug aliases are not accepted. |
GET /v1/users/{address}/positions/aquarius | Aquarius LP positions. |
GET /v1/users/{address}/positions/soroswap | Soroswap LP positions. |
GET /v1/users/{address}/positions/{protocol} | Generic per-protocol read for any supported id. |
See Positions concepts for the shared position model these return.
As-of-ledger & staleness
Reason about data freshness with meta.last_indexed_ledger, pin reads to a past ledger with as_of_ledger, and pull history over a ledger range.
Activity taxonomy
The normalized cross-protocol activity feed — one label set for deposits, borrows, swaps, and more, with per-event USD valuation and keyset pagination.