REST API reference

Public, no key required, rate-limited per IP (120 requests/minute). Data honesty rules: volume and analytics are null when unmeasured (never fabricated zeros); the token list is discovered from chain, refreshed about every 30 minutes; price history is forward-only sampled and never backfilled.

Endpoints

text
GET https://splitshot-dex-be.onrender.com/healthz
  { ok, chain, db, degraded }

GET https://splitshot-dex-be.onrender.com/v1/quote        -> see Swap API

GET https://splitshot-dex-be.onrender.com/v1/tokens
  { chainId, updatedAt, degraded, indexableCount, volumeCoverage,
    tokens: [{ symbol, name, address, decimals, priceUsd, tvlUsd,
               volume24hUsd, volume24hMeasured, priceChange1hPct,
               priceChange24hPct, sparkline: [[t, priceUsd]...],
               fdvUsd, poolCount, slug, indexable, flagged, anchor }] }
  Honest-null convention: null means NOT MEASURED, never zero.

GET https://splitshot-dex-be.onrender.com/v1/pools
  { chainId, pools: [{ address, venue, fee, token0, token1, tvlUsd,
                       priceToken0InToken1, token0Reserve, token1Reserve }] }

GET https://splitshot-dex-be.onrender.com/v1/stats
  { chainId, pools, tvlUsd, volume24hUsd, routesComputed, updatedAt }

GET https://splitshot-dex-be.onrender.com/v1/transactions?limit=25
  recent Swap/Mint/Burn across live pools

GET https://splitshot-dex-be.onrender.com/v1/portfolio?address=0x...
  { address, totalUsd, tokens, positions, activity }

GET https://splitshot-dex-be.onrender.com/v1/price-history?token=0x...&range=1D
  forward-only sampled series; never backfilled