{
  "name": "Indo Crypto Landscape public data",
  "version": "v1",
  "generated_at": "2026-07-29T21:34:11+07:00",
  "base_url": "./",
  "license": {
    "terms": "CC BY 4.0. Reuse freely with attribution.",
    "attribution": "Indo Crypto Landscape, Utopia Club",
    "citation_note": "Cite the dataset's own generated_at, not the date you downloaded it. Live venue figures move every 30 minutes and a stale citation misattributes a number to a moment it was never true.",
    "warranty": "No warranty. Read the claim_class on every dataset: 'reported' means a third party asserted it and we relayed it, not that we verified it."
  },
  "read_this_first": "Every dataset carries freshness, completeness and claim_class. claim_class is the one that changes how you may use a number: 'observed' was measured by us from the system that owns it, 'reported' was asserted by a third party and relayed, 'derived' was computed by us and is no stronger than its inputs, 'interpreted' is our judgement. A 'degraded' completeness means the payload arrived partial and the rows here are a subset of the real universe.",
  "datasets": [
    {
      "key": "cex-volume",
      "title": "Indonesian CEX 24h volume",
      "description": "Per-venue 24h traded volume in IDR. source_type distinguishes a venue's own API from an aggregator's figure; in_credible_core marks rows surviving the wash filter.",
      "json": "v1/cex-volume.json",
      "csv": "v1/cex-volume.csv",
      "columns": [
        "venue",
        "volume_idr_24h",
        "source_type",
        "in_credible_core",
        "note",
        "as_of"
      ],
      "row_count": 9,
      "source_generated_at": "2026-07-29T21:30:56.786470+07:00",
      "source_file": "cex_volume.json",
      "source_note": "Direct keyless exchange API where verified (Indodax, Luno-ID, Bittime). CoinGecko raw exchange-reported 24h volume (BTC->IDR) for Indo-domiciled exchanges whose direct endpoint is key-gated or geo-blocked. App-only + no-volume-API players excluded.",
      "freshness": "fresh",
      "freshness_age": "3m ago",
      "completeness": "complete",
      "completeness_detail": "9 items",
      "claim_class": "observed",
      "methodology": "methodology.html#cex-volume"
    },
    {
      "key": "spreads",
      "title": "Median bid-ask spread by pair",
      "description": "Median top-of-book spread across quoting venues, per pair, with the tightest and widest venue named.",
      "json": "v1/spreads.json",
      "csv": "v1/spreads.csv",
      "columns": [
        "pair",
        "median_spread_pct",
        "venues_quoting",
        "tightest_venue",
        "tightest_spread_pct",
        "widest_venue",
        "widest_spread_pct",
        "dislocated_venues",
        "as_of"
      ],
      "row_count": 8,
      "source_generated_at": "2026-07-29T21:30:59.682110+07:00",
      "source_file": "exch_pulse.json",
      "source_note": "",
      "freshness": "fresh",
      "freshness_age": "3m ago",
      "completeness": "complete",
      "completeness_detail": "8 items",
      "claim_class": "observed",
      "methodology": "methodology.html#execution-quality"
    },
    {
      "key": "depth-slippage",
      "title": "Size-banded slippage by venue",
      "description": "VWAP slippage walking the live ladder at three order sizes. Rows with a null band are venues that could NOT be measured, kept in so coverage is visible.",
      "json": "v1/depth-slippage.json",
      "csv": "v1/depth-slippage.csv",
      "columns": [
        "pair",
        "venue",
        "band",
        "side",
        "slippage_pct",
        "fillable",
        "status",
        "as_of"
      ],
      "row_count": 57,
      "source_generated_at": "2026-07-29T14:31:00.420132+00:00",
      "source_file": "depth.json",
      "source_note": "VWAP of a market order walked through the live ladder, versus mid. Buy walks asks, sell walks bids. Unfillable bands report max reachable rather than an extrapolated price.",
      "freshness": "fresh",
      "freshness_age": "3m ago",
      "completeness": "complete",
      "completeness_detail": "5/6 status in ok",
      "claim_class": "derived",
      "methodology": "methodology.html#depth-slippage"
    },
    {
      "key": "fx-deviation",
      "title": "USDT/IDR vs official USD/IDR",
      "description": "Stablecoin rate against the official interbank rate. Series points carry days_before_last rather than a date, because the source supplies no per-point date.",
      "json": "v1/fx-deviation.json",
      "csv": "v1/fx-deviation.csv",
      "columns": [
        "metric",
        "days_before_last",
        "usdt_idr",
        "usdc_idr",
        "official_usd_idr",
        "deviation_pct",
        "as_of"
      ],
      "row_count": 55,
      "source_generated_at": "2026-07-29T21:30:43.354845+07:00",
      "source_file": "fx_deviation.json",
      "source_note": "",
      "freshness": "fresh",
      "freshness_age": "3m ago",
      "completeness": "not-contracted",
      "completeness_detail": "",
      "claim_class": "derived",
      "methodology": "methodology.html#fx-deviation"
    },
    {
      "key": "idr-stablecoins",
      "title": "IDR stablecoin supply, chain-verified",
      "description": "Circulating supply read from the chain rather than from the issuer, split per chain. token_total_supply_idr repeats the token-level total on every row.",
      "json": "v1/idr-stablecoins.json",
      "csv": "v1/idr-stablecoins.csv",
      "columns": [
        "token",
        "chain",
        "supply_idr",
        "token_total_supply_idr",
        "share_of_token_pct",
        "verified_on_chain",
        "as_of"
      ],
      "row_count": 22,
      "source_generated_at": "2026-07-29T21:30:22.471843+07:00",
      "source_file": "onchain_stables.json",
      "source_note": "",
      "freshness": "fresh",
      "freshness_age": "3m ago",
      "completeness": "complete",
      "completeness_detail": "4 items",
      "claim_class": "observed",
      "methodology": "methodology.html#idr-stablecoins"
    },
    {
      "key": "regulation",
      "title": "Indonesian crypto regulation index",
      "description": "Index of Indonesian crypto rules with agency, status and effective dates. Summaries are ours; the instruments are primary.",
      "json": "v1/regulation.json",
      "csv": "v1/regulation.csv",
      "columns": [
        "group",
        "ref",
        "title",
        "agency",
        "status",
        "date",
        "summary",
        "impact"
      ],
      "row_count": 25,
      "source_generated_at": "2026-07-10T22:00:00+07:00",
      "source_file": "reg_library.json",
      "source_note": "",
      "freshness": "reference",
      "freshness_age": "19d ago",
      "completeness": "complete",
      "completeness_detail": "7 items",
      "claim_class": "reported",
      "methodology": "methodology.html#regulation"
    },
    {
      "key": "history",
      "title": "Cycle-level time series",
      "description": "One row per 30-minute data cycle from the append-only archive. This is the only dataset here with real history; it starts when the archive did, not when the dashboard did.",
      "json": "v1/history.json",
      "csv": "v1/history.csv",
      "columns": [
        "ts",
        "cex_total_idr",
        "cex_core_idr",
        "venues_reporting",
        "usdt_idr",
        "usdt_idr_reconstructed",
        "official_usd_idr",
        "fx_deviation_pct",
        "spread_btc_idr_pct",
        "spread_usdt_idr_pct",
        "alert_status"
      ],
      "row_count": 200,
      "source_generated_at": null,
      "source_file": "archive/*.ndjson",
      "source_note": "",
      "freshness": "unknown",
      "freshness_age": null,
      "completeness": "not-contracted",
      "completeness_detail": "",
      "claim_class": "observed",
      "methodology": "methodology.html#history"
    }
  ]
}
