Independent · open · public-tier free
The protocol explorer for the Stellar network.
Every contract, every event, and every trade across Stellar protocols — CEXes, on-chain DEXes, and lending — served as verified per-protocol data plus a single VWAP price through a public REST API, alongside live world fiat rates. Every panel below shows the exact API call that produced it.
Network
Stellar pulse
System health
Diagnostics
Watch the indexer tick.
Per-source ingest cursors, refreshed every 15 seconds — see every backfill chunk advance in real time.
Open diagnostics
Top assets by activity
Ranked by trailing-24h trading volume across every venue we ingest — native XLM included. Volume sums every (base, quote) pair the asset trades in.
| # | Asset | Price | 24h % | 24h volume | 24h chart | Observations |
|---|---|---|---|---|---|---|
World currencies
Live USD-base rates for the major fiat currencies — full ~200-ticker coverage at /assets.
Top markets
Pairs ranked by trailing-24h USD volume across all sources. Click a row for chart, recent trades, and per-source breakdown.
| # | Pair | Last price | 24h volume | 24h trades |
|---|---|---|---|---|
Top movers
24-hour price change across the most active classic assets. Updates every refresh; no synthesised data.
Recent trades
Live feed merging the latest trades across the top 3 pairs by 24h USD volume. Ticks with ledger closes.
Waiting for first trades…
Recently shipped
What landed in the last release. Scrolling history at /changelog.
- AddedUnreleased
Testnet / Futurenet support — a one-line `stellar.network` switch. The indexer now runs correctly (without corrupting data) against Stellar testnet and futurenet. Grounded in a cold adversarial hardcode audit + an independent fix-verifier pass (2026-08-26). Pubnet behaviour is byte-identical (every new default resolves to the old constant). - Config:
stellar.soroban_genesis_ledger/stellar.movements_floor_ledger(pubnet values, or genesis=1 on test nets) so the SEP-41 supply and CAP-67 real-time movements feeds don't floor above the whole chain;timescale.MovementsFloor()+canonical.NetworkPassphrase()install seams resolve leaf-package reads to the configured network. - Corruption guards:SacContractIDis network-aware (was serving the pubnet contract address on testnet/v1/assets); config validation rejects a pubnet (core-live)history_archive_urlon a non-pubnet network; the cross-anchor archive filler refuses to write pubnet ledgers into a test-net archive; the SEP-41 supply genesis seed defaults its boundary from the config's network value. - Ansible: thearchival-noderole is network-aware (single-sourcestellar_passphrase— fixes the futurenet core.cfg bug — per-network history archive, boundary knobs, cap67-floor-ledger); testnet + futurenet inventory templates. - CI/CD:deploy.ymlgainstestnet/futurenettargets; a fleet-model design proposal (docs/operations/cicd-fleet-model.md). - Docs: testnet/futurenet deployment guide + reset runbook. - Changedv0.44.8 · 2026-08-26
Real-time movement latency cadence tuning (~4s → ~2s). An adversarial audit of a proposed captive-core "fast lane" found the live-movement latency is a chain of hardcoded cadence constants, not a compute floor — so no new component/second core is needed. Tuned the safe ones: the indexer's caught-up MinIO re-check (
liveTailRetryWait) 3s → 500ms (the single largest term — a caught-up indexer sat a flat ~3s behind the tip; MinIO is local, so a re-check is a cheap bucket LIST); the/v1/ledger/streampoll that drives the explorer's "watch it land" refetch 2s → 500ms; and the cap67 movements derive tick (FOLLOW_INTERVAL) 2s → 1s. The ClickHouse-part-sensitive LiveSink flush is deliberately left at 1s (sub-second flushing multiplies small parts on the capacity-bound store). An event-driven MinIO-bucket-notification ingest (still a single captive-core) is the documented next step toward ~100ms. - Addedv0.44.7 · 2026-08-26
Real-time account-movements follow daemon (5.3). The CAP-67 movements derive (
stellar.account_movements— the money trail served on/v1/accounts/{g}/movements) now runs as a continuous follow daemon (ch-cap67-movements -follow) instead of a ~30s timer + oneshot: it catches up to the CONTIGUOUS lake tip, sleeps a short interval (2s), and repeats — cutting movement latency from ~30s to ~2s behind the chain tip so a user watches their transactions land in near real time. Builds on the contiguity gate (#174,Cap67Range) so it never derives past a near-tip lake hole; the timer is retired (single writer, no watermark race);Restart=always+StartLimitBurstmake a crash-loop trip tofailed(visible to node-healthcheck.sh, which now covers the daemon); a transient ClickHouse error holds the watermark and retries (no ledger skipped). The initial P23→tip backfill runs as the daemon's first catch-up. Operator cutover: apply the ansible (or manually stop+disablecap67-movements.timerand start the-followdaemon) AFTER the ops binary is deployed.
Latest from the blog
Engineering notes + product updates. Sourced from docs/blog/*.md in the public repo.
Stellar Index API
One verified price for every Stellar pair.
The API behind this explorer — the same data, machine-readable. VWAP, TWAP, and OHLC computed from every CEX, DEX, and oracle we index, served over REST + SSE with deterministic closed-bucket semantics, alongside the ledger, contract, asset, supply and history endpoints. Anonymous reads are free forever; an API key raises your rate limit from 60 to 1,000+ requests a minute, with tiers and SLAs beyond that.
- GET /v1/price
- Latest closed-bucket VWAP for any pair.
- GET /v1/price/tip
- Rolling live price, sub-minute freshness.
- GET /v1/ohlc
- Candles — daily history back to 2015.
- GET /v1/price/stream
- Server-Sent Events push feed.
Try the API
The free public tier needs no key — pick an example and paste it straight into a terminal. An API key lifts the rate limit when you outgrow it.
$ curl 'https://api.testnet.stellarindex.io/v1/price?asset=native"e=USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN'No auth needed for the public tier — every endpoint here responds in milliseconds. Hit ▶ to run live; click any example tab above to see the curl.