{
  "schema_version": "2026-04",
  "name": "XR-Telemetry",
  "service_status": "in_development",
  "payments_enabled": false,
  "service_status_note": "XR-Telemetry is in active development. Several payload fields use placeholder values (see data_status block). Payment endpoints (/scan, /quote) are temporarily disabled while the slow-task framework lands. Discovery surface, /healthz, and /stats remain available.",
  "description": "Agent-payable XRPL macro telemetry. Returns a network snapshot: supply (total / dormant / escrowed / HODL wave), per-region liquidity flows, AMM pool depth and APR, and an algebraic implied price-floor derived from assumed institutional settlement volume and velocity.",
  "getting_started": "Two payment surfaces serve the same TelemetryPayload from a 5-minute-refreshed snapshot. Agents single-shot via POST /scan with an x402 PAYMENT-SIGNATURE header. Browsers (or any non-x402 caller) use the invoice flow: POST /quote, then poll GET /status/{invoice_id} until paid:true, then GET /results/{invoice_id}. Before your first call, GET /schema once and cache it — it documents the data_status block, the numeric conventions, and the per-field provenance.",
  "location": "Cloud-Native / Global",
  "data_residency": "agnostic",
  "pii": "none",
  "capabilities": {
    "domain": "XRPL macro telemetry",
    "snapshot_refresh_seconds": 300,
    "outputs": [
      "supply.total_xrp",
      "supply.dormant_xrp",
      "supply.escrowed_xrp",
      "supply.hodl_wave_pct",
      "supply.exchange_outflow_24h_xrp",
      "supply.escrow_release_vs_relock_ratio",
      "liquidity[region].inflow_24h_xrp",
      "liquidity[region].outflow_24h_xrp",
      "liquidity[region].net_flow_24h_xrp",
      "liquidity[region].top_venues",
      "amm.pairs[].tvl_xrp",
      "amm.pairs[].tvl_usd",
      "amm.pairs[].depth_1pct_xrp",
      "amm.pairs[].apr_pct",
      "amm.pairs[].fee_pct",
      "amm.vaults[].asset",
      "amm.vaults[].tvl_xrp_equivalent",
      "amm.vaults[].utilization_pct",
      "amm.vaults[].supply_apy_pct",
      "amm.vaults[].borrow_apy_pct",
      "utility_floor.baseline_usd",
      "utility_floor.current_price_usd",
      "utility_floor.available_liquid_supply_xrp",
      "utility_floor.q_assumed_usd",
      "utility_floor.v_assumed"
    ],
    "not_provided": ["price_prediction", "investment_recommendation", "trading_signal"]
  },
  "numeric_conventions": {
    "_pct_fields_use": "0.0 to 100.0 (e.g., 28.0 means 28%)",
    "_pct_fields_list": [
      "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"
    ],
    "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.baseline_usd": "dimensionally USD per XRP (price floor) despite the field name omitting the suffix; the value IS a per-XRP price"
  },
  "data_status": {
    "supply.total_xrp": "static (XRPL protocol cap of 100B; real circulating differs by <0.001% from cumulative fee burns)",
    "supply.escrowed_xrp": "mocked",
    "supply.dormant_xrp": "mocked",
    "supply.hodl_wave_pct": "mocked",
    "supply.exchange_outflow_24h_xrp": "mocked",
    "supply.escrow_release_vs_relock_ratio": "mocked",
    "liquidity": "mocked",
    "amm.pairs.tvl_xrp": "live (XRP/RLUSD only in v1)",
    "amm.pairs.tvl_usd": "live (XRP/RLUSD only in v1)",
    "amm.pairs.depth_1pct_xrp": "live (XRP/RLUSD only in v1; constant-product first-order approximation)",
    "amm.pairs.fee_pct": "live (XRP/RLUSD only in v1)",
    "amm.pairs.apr_pct": "mocked",
    "amm.vaults": "awaiting amendment activation",
    "utility_floor.baseline_usd": "live (formula computed from current supply; assumes mocked dormant_xrp via available_liquid_supply_xrp)",
    "utility_floor.current_price_usd": "live (CoinGecko via get_xrp_price)"
  },
  "utility_floor_assumptions": {
    "q_assumed_usd_default": 10000000000,
    "v_assumed_default": 6.0,
    "formula": "baseline_usd = q_assumed_usd / (v_assumed * available_liquid_supply_xrp)",
    "notes": "Q (institutional volume) and V (velocity) are operator-tunable assumptions, not measurements. baseline_usd is a sensitivity output, not a price prediction."
  },
  "payment": {
    "spec": "x402",
    "x402_version": 2,
    "scheme": "exact",
    "network": "xrpl:0",
    "facilitator_url": "https://xrpl-facilitator-mainnet.t54.ai",
    "amount_usd": "0.10",
    "recipient": "rKxTzCKYKPPdXEzuioEQ6KekQK26w2DBd5",
    "currencies_accepted": ["XRP", "RLUSD"],
    "rlusd": {
      "amount": "0.10",
      "issuer": "rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De",
      "currency_hex": "524C555344000000000000000000000000000000"
    },
    "auth_header": "PAYMENT-SIGNATURE",
    "auth_value": "Base64(JSON) of a v2 PaymentPayload with `accepted` set to the chosen PaymentRequirements, `payload.signedTxBlob` (presigned XRPL Payment hex), and `payload.invoiceId` matching accepts[].extra.invoiceId.",
    "settlement_header": "PAYMENT-RESPONSE",
    "settlement_value": "Base64(JSON) of the facilitator settle response on success.",
    "challenge_format": "x402-spec PaymentRequired body with accepts[]; mirrored base64 in PAYMENT-REQUIRED header.",
    "freshness_seconds": 600,
    "scope": "single use per invoice; bound by extra.invoiceId and replay-protected by the facilitator.",
    "client_sdk": "x402-xrpl (PyPI) or any x402 v2 client supporting the XRPL exact scheme.",
    "verify_before_settle": true
  },
  "invoice_flow": {
    "for": "browsers and any non-x402 caller (powers xrpl-utilities.com/telemetry)",
    "endpoints": {
      "quote":   "POST /quote      -> {invoice_id, amount_drops, destination, destination_tag, deep_link, qr_code, expires_at}",
      "status":  "GET  /status/{invoice_id}  -> {paid: bool, tx_hash?: string}",
      "results": "GET  /results/{invoice_id} -> TelemetryPayload (only when paid)"
    },
    "binding": "DestinationTag minted per invoice; payer sends a regular XRPL Payment to recipient with that tag. Server polls the seller wallet every 15s and matches by tag.",
    "expiry_seconds": 1800,
    "results_ttl_seconds": 86400
  },
  "endpoints": {
    "base_url": "https://telemetry.xrpl-utilities.io",
    "discovery": "/llms.txt",
    "schema": "/schema",
    "tos": "/tos",
    "scan": "/scan",
    "quote": "/quote",
    "status": "/status/{invoice_id}",
    "results": "/results/{invoice_id}",
    "manifest": "/agents.json",
    "well_known_manifest": "/.well-known/agents.json",
    "health": "/healthz",
    "stats": "/stats"
  },
  "rate_limits": {
    "requests_per_minute": 15
  },
  "legal": {
    "notice": "ON-CHAIN NETWORK TELEMETRY + ALGEBRAIC IMPLIED-FLOOR COMPUTATION ONLY. Not a price prediction, investment recommendation, trading signal, or financial advice. The Burst Math output is a sensitivity tool — it shows what the math implies under explicit assumptions, not what XRP will or should be priced at.",
    "user_responsibility": "XRPL-Utilities provides on-chain data classification and technical ledger analysis. We do not provide financial advice, risk ratings, or investment forensics. Users are responsible for ensuring their use of these tools complies with local digital asset regulations, including the California Digital Financial Assets Law and the Colorado AI Act where applicable."
  }
}
