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_idWhat it is
blendLending / borrowing pools.
aquariusAMM, including concentrated-liquidity pools.
soroswapAMM / DEX liquidity pools.
fxdaoCollateralized-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:

statusMeaning
supportedFully indexed and served; the schema is stable.
provisionalIndexed and readable, but the shape or coverage may still change.
deprecatedStill served, but scheduled for removal.

Two more fields describe how a protocol is indexed:

  • indexing_modeevent_driven (state derived from on-chain events) or storage_poll (state read by polling contract storage). A storage_poll protocol has no event stream, so its has_activity_feed is always false.
  • supported_position_types — the buckets this protocol can produce, drawn from collateral, supply, liability, lp, backstop, and vault.

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:

EndpointReturns
GET /v1/users/{address}/positions/blendAll 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/aquariusAquarius LP positions.
GET /v1/users/{address}/positions/soroswapSoroswap 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.