{"schema_version":"1.21.6","provider":"XRPL-Utilities™","service":"XR-Telemetry","numeric_conventions":{"_pct_fields_use":"0.0 to 100.0 (e.g., 28.0 means 28%)","_pct_fields":["supply.hodl_wave_pct","amm.pairs[].apr_pct","amm.pairs[].fee_pct","amm.vaults[].utilization_pct","amm.vaults[].supply_apy_pct","amm.vaults[].borrow_apy_pct","derived_models.active_float.delta_24h_pct"],"raw_ratio_fields":["supply.escrow_release_vs_relock_ratio (count(EscrowFinish)/count(EscrowCreate) over 30d)"],"xrp_fields_in":"whole XRP, not drops","usd_fields_in":"absolute USD, not cents","utility_floor.algebraic_p_at_assumed_qv_usd":"USD per XRP. The algebraic P solved from the identity P = Q / (V*M) under the operator-set Q (institutional volume) and V (velocity) assumptions and the live M (Active Float). NOT a price prediction, NOT a fair-value claim, NOT a floor in the financial-engineering sense - it is an algebraic output reframable as 'required equilibrium price' under the assumed Q and V. The verbose name is misuse-resistant."},"data_status":{"supply.total_xrp":"static (XRPL protocol cap of 100B; real circulating differs by <0.001% from cumulative fee burns)","supply.circulating_xrp":"derived (= supply.total_xrp - supply.escrowed_xrp; not a separate measurement)","supply.escrowed_xrp":"live (slow-task cache, refreshed on a daily cadence via on-chain ledger reads of Ripple escrow holders sourced from external label attribution; sanity bound [10B, 50B] XRP, enforced both at write and read time)","supply.dormant_xrp":"live (slow-task cache, refreshed on a daily cadence via on-chain ledger reads of top XRPSCAN-listed holders, summing Balance where the last-tx ledger is older than ~10-12 months; sanity bound [3B, 60B] XRP)","supply.amm_locked_xrp":"live (sum of XRP-side reserves across amm.pairs[]; pure aggregation off the live AMM pool reads, half-of-TVL by AMM-balanced invariant)","supply.exchange_omnibus_xrp":"live (slow-task cache, refreshed on a daily cadence via on-chain ledger reads of XRPSCAN-attributed hot/warm exchange wallets in exchange_wallets.VENUE_REGION; excludes Cold/Custody/Vault/Insurance/Reserve/Treasury label patterns and wallets below 1M XRP dust floor; sanity bound [1B, 50B] XRP). RAW omnibus, converted to active orderbook depth in Active Float via proxy_ratio.","supply.exchange_venue_count":"live (count of distinct venues with at least one qualifying wallet)","supply.exchange_address_count":"live (count of qualifying addresses summed into exchange_omnibus_xrp)","supply.dex_orderbook_depth_xrp":"live (slow-task cache, refreshed on a recurring cadence via on-chain orderbook reads for XRP/RLUSD + XRP/USD-Gatehub + XRP/USD-Bitstamp; sums TakerGets across sell-XRP offers (XRP committed to open offers right now); sanity bound [0, 5B] XRP)","supply.hodl_wave_pct":"live (computed in metrics.fetch_hodl_wave_pct as 100.0 * dormant_xrp / total_xrp)","supply.exchange_outflow_24h_xrp":"live (slow-task cache, refreshed on a recurring cadence via on-chain ledger reads of XRPSCAN-attributed venue wallets in exchange_wallets.VENUE_REGION; sums net-outbound XRP where outflow > inflow per wallet; sanity bound [10K, 5B] XRP)","supply.escrow_release_vs_relock_ratio":"live (slow-task cache, refreshed on a daily cadence via 30d on-chain history scan of XRPSCAN Ripple-labeled accounts; count-based ratio = EscrowFinish / EscrowCreate; sanity bound [0.1, 10.0]). NOTE: count ratio, NOT volume ratio. Public Ripple disclosures cite ~60-80% re-locked by VOLUME; a count ratio of 1.0 (one finish per create) is consistent with that volume pattern when releases are larger but rarer than re-locks.","liquidity":"live (slow-task cache, refreshed on a recurring cadence alongside exchange_outflow_24h_xrp; aggregates per-wallet 24h inflow/outflow by region tag + top venues per region; MENA coverage is now deterministic for two named venues, Rain and CoinMENA, via an operator-curated wallet map merged into discovery; BitOasis remains an honest gap because no verifiable XRPL hot wallet has been identified after the 2024-25 VARA suspension and CoinDCX acquisition)","amm.pairs.tvl_xrp":"live (XRP/RLUSD + 4 secondary pools; pool set is curated, fetched in parallel via on-chain AMM pool reads)","amm.pairs.tvl_usd":"live","amm.pairs.depth_1pct_xrp":"live (constant-product first-order approximation)","amm.pairs.fee_pct":"live","amm.pairs.apr_pct":"live for XRP/RLUSD via amm_apr slow task; other pairs return 0.0 (per-pair APR caches are a v2 task)","amm.vaults":"awaiting amendment activation","derived_models.active_float":"DERIVED MODEL OUTPUT, NOT A MEASUREMENT. ADDITIVE: value_xrp = (exchange_omnibus_xrp * proxy_ratio) + amm_locked_xrp + dex_orderbook_depth_xrp. Only counts XRP that is verifiably resting on an open market right now. Custodial omnibus balances are converted to estimated active orderbook depth via the proxy ratio (default 10%, env-tunable). Each component is documented in mathematical_bridge.additions[] with its source. Confidence: low_to_moderate. See /agents.json active_float_methodology for full detail.","derived_models.active_float.proxy_ratio":"live (= TELEMETRY_ORDERBOOK_PROXY_RATIO env var, default 0.10). Surfaced in the response so a consumer can recompute under their own ratio.","derived_models.active_float.delta_24h_xrp":"live once metric_snapshots time-series has at least one row older than 24h. Until then, null - frontends should render 'bootstrapping'.","utility_floor.algebraic_p_at_assumed_qv_usd":"live (formula: algebraic_p_at_assumed_qv_usd = q_assumed_usd / (v_assumed * available_liquid_supply_xrp), where available_liquid_supply_xrp equals derived_models.active_float.value_xrp)","utility_floor.available_liquid_supply_xrp":"live (alias of derived_models.active_float.value_xrp; legacy field retained for shipped-frontend compatibility)","utility_floor.current_price_usd":"live (CoinGecko via get_xrp_price)"},"data_status_note":"data_status describes design intent. When a slow-task cache goes stale (e.g., repeated RPC failures), snapshot.py fails CLOSED for the affected field (returns null + an unavailable_reason marker) rather than substituting fabricated numbers. liquidity is the canonical example: stale exchange_flows cache => liquidity is null + liquidity_unavailable_reason is set. Check /healthz checks.slow_tasks for live cache freshness per task.","utility_floor_assumptions":{"q_assumed_usd_default":10000000000,"v_assumed_default":6.0,"q_assumed_usd_current":10000000000.0,"v_assumed_current":6.0,"formula":"algebraic_p_at_assumed_qv_usd = q_assumed_usd / (v_assumed * derived_models.active_float.value_xrp)"},"snapshot_refresh_seconds":300}