{
  "schema": "tg4.explain.v1",
  "license": "CC0-1.0",
  "source": "https://4ddraw.com/api/explain.json",
  "generated_at": "2026-05-17T03:08:36.104Z",
  "note": "One-line plain-English description for every endpoint. Some endpoints are only exposed on a subset of TG4 sites — see /api/feed-formats.json on each site for what's actually live there.",
  "endpoint_count": 52,
  "endpoints": [
    {
      "path": "/api/today.json",
      "desc": "Today's 4D results for every operator on this site, as structured JSON.",
      "url": "https://4ddraw.com/api/today.json"
    },
    {
      "path": "/api/today.csv",
      "desc": "Same as today.json but flattened to CSV (operator, prize_tier, number, position).",
      "url": "https://4ddraw.com/api/today.csv"
    },
    {
      "path": "/api/today.md",
      "desc": "Today's results formatted as human-readable Markdown.",
      "url": "https://4ddraw.com/api/today.md"
    },
    {
      "path": "/api/today.txt",
      "desc": "Today's results as plain text (operator: 1st/2nd/3rd).",
      "url": "https://4ddraw.com/api/today.txt"
    },
    {
      "path": "/api/today.yaml",
      "desc": "Today's results as YAML for config-style consumers.",
      "url": "https://4ddraw.com/api/today.yaml"
    },
    {
      "path": "/api/today.xml",
      "desc": "Today's results as legacy XML.",
      "url": "https://4ddraw.com/api/today.xml"
    },
    {
      "path": "/api/today-headline.txt",
      "desc": "≤280-char single-tweet summary of today.",
      "url": "https://4ddraw.com/api/today-headline.txt"
    },
    {
      "path": "/api/today-hash.txt",
      "desc": "SHA-256 of the today.json body. Use for cheap change detection.",
      "url": "https://4ddraw.com/api/today-hash.txt"
    },
    {
      "path": "/api/now.json",
      "desc": "Tiny endpoint: server now() in UTC and MYT, plus build version.",
      "url": "https://4ddraw.com/api/now.json"
    },
    {
      "path": "/api/version.json",
      "desc": "Build version + commit-ish + generated_at.",
      "url": "https://4ddraw.com/api/version.json"
    },
    {
      "path": "/api/changelog.json",
      "desc": "Recent build changes with version numbers.",
      "url": "https://4ddraw.com/api/changelog.json"
    },
    {
      "path": "/api/yesterday.json",
      "desc": "Yesterday's snapshot in the same shape as today.json.",
      "url": "https://4ddraw.com/api/yesterday.json"
    },
    {
      "path": "/api/diff.json",
      "desc": "Per-operator diff between today.json and yesterday.json.",
      "url": "https://4ddraw.com/api/diff.json"
    },
    {
      "path": "/api/diff.csv",
      "desc": "CSV form of diff.json.",
      "url": "https://4ddraw.com/api/diff.csv"
    },
    {
      "path": "/api/upcoming.json",
      "desc": "Next draws per operator with MYT timestamps and seconds_to_draw.",
      "url": "https://4ddraw.com/api/upcoming.json"
    },
    {
      "path": "/api/draws.ics",
      "desc": "iCalendar VEVENTs for upcoming draws — drop into Google/Apple Calendar.",
      "url": "https://4ddraw.com/api/draws.ics"
    },
    {
      "path": "/api/holidays.json",
      "desc": "Malaysian public holiday calendar for the current year.",
      "url": "https://4ddraw.com/api/holidays.json"
    },
    {
      "path": "/api/calendar.json",
      "desc": "Current MYT month operator-by-day draw grid.",
      "url": "https://4ddraw.com/api/calendar.json"
    },
    {
      "path": "/api/timezone.json",
      "desc": "Asia/Kuala_Lumpur (+08:00, no DST) and draw cutover semantics.",
      "url": "https://4ddraw.com/api/timezone.json"
    },
    {
      "path": "/api/operators.json",
      "desc": "Operator directory with slug, name, days, jackpot, today's prizes.",
      "url": "https://4ddraw.com/api/operators.json"
    },
    {
      "path": "/api/operators.csv",
      "desc": "Operator directory in CSV.",
      "url": "https://4ddraw.com/api/operators.csv"
    },
    {
      "path": "/api/operators.yaml",
      "desc": "Operator directory in YAML.",
      "url": "https://4ddraw.com/api/operators.yaml"
    },
    {
      "path": "/api/operators/<slug>.json",
      "desc": "Per-operator JSON with today's full prize set.",
      "url": "https://4ddraw.com/api/operators/<slug>.json"
    },
    {
      "path": "/api/operators/<slug>.csv",
      "desc": "Per-operator CSV.",
      "url": "https://4ddraw.com/api/operators/<slug>.csv"
    },
    {
      "path": "/api/operators/<slug>.yaml",
      "desc": "Per-operator YAML.",
      "url": "https://4ddraw.com/api/operators/<slug>.yaml"
    },
    {
      "path": "/api/operators/<slug>.md",
      "desc": "Per-operator Markdown card.",
      "url": "https://4ddraw.com/api/operators/<slug>.md"
    },
    {
      "path": "/api/operator-status.json",
      "desc": "Per-operator freshness signal — green/amber/red + age.",
      "url": "https://4ddraw.com/api/operator-status.json"
    },
    {
      "path": "/api/prize-tiers.json",
      "desc": "Documentation of each operator's 1st/2nd/3rd + special + consolation structure.",
      "url": "https://4ddraw.com/api/prize-tiers.json"
    },
    {
      "path": "/api/heatmap.json",
      "desc": "4×10 digit-frequency matrix from today's top-3 prizes.",
      "url": "https://4ddraw.com/api/heatmap.json"
    },
    {
      "path": "/api/digit-distribution.json",
      "desc": "Per-position digit statistics (mean/median/mode/stdev/min/max).",
      "url": "https://4ddraw.com/api/digit-distribution.json"
    },
    {
      "path": "/api/digit-sum.json",
      "desc": "Sum-of-digits per draw + digital root + distribution.",
      "url": "https://4ddraw.com/api/digit-sum.json"
    },
    {
      "path": "/api/digit-pairs.json",
      "desc": "Adjacent-digit pair frequency 10×10 matrices for each pair slot.",
      "url": "https://4ddraw.com/api/digit-pairs.json"
    },
    {
      "path": "/api/parity.json",
      "desc": "Odd/even digit distribution per operator + aggregate.",
      "url": "https://4ddraw.com/api/parity.json"
    },
    {
      "path": "/api/big-small.json",
      "desc": "Big (5–9) vs small (0–4) digit distribution per operator.",
      "url": "https://4ddraw.com/api/big-small.json"
    },
    {
      "path": "/api/anomalies.json",
      "desc": "Detected anomalies: cross-operator duplicates, palindromes, sequentials, missing operators.",
      "url": "https://4ddraw.com/api/anomalies.json"
    },
    {
      "path": "/api/numbers/featured.json",
      "desc": "Today's notable top-3 winners — palindromes, doubles, sequentials.",
      "url": "https://4ddraw.com/api/numbers/featured.json"
    },
    {
      "path": "/api/checksums.json",
      "desc": "SHA-256 + MD5 + byte size of key endpoints for change detection.",
      "url": "https://4ddraw.com/api/checksums.json"
    },
    {
      "path": "/api/last-updated.json",
      "desc": "Registry of last-modified timestamps per endpoint.",
      "url": "https://4ddraw.com/api/last-updated.json"
    },
    {
      "path": "/api/health.json",
      "desc": "Healthcheck: build_recent + results_recent + schema_published + license_declared.",
      "url": "https://4ddraw.com/api/health.json"
    },
    {
      "path": "/api/feed-formats.json",
      "desc": "Discovery doc: every machine-readable format this site exposes.",
      "url": "https://4ddraw.com/api/feed-formats.json"
    },
    {
      "path": "/api/sources.json",
      "desc": "Operator data source manifest with freshness contract.",
      "url": "https://4ddraw.com/api/sources.json"
    },
    {
      "path": "/api/license.json",
      "desc": "CC0-1.0 data-license manifest.",
      "url": "https://4ddraw.com/api/license.json"
    },
    {
      "path": "/api/network.json",
      "desc": "TG4 sister-site manifest (7 sites, role, color).",
      "url": "https://4ddraw.com/api/network.json"
    },
    {
      "path": "/api/about.json",
      "desc": "Machine-readable site facts (role, audience, language, content focus).",
      "url": "https://4ddraw.com/api/about.json"
    },
    {
      "path": "/api/contact.json",
      "desc": "Structured contact methods (Telegram, security, errata, press, accessibility).",
      "url": "https://4ddraw.com/api/contact.json"
    },
    {
      "path": "/api/explain.json",
      "desc": "This document — every endpoint with a one-line plain-English description.",
      "url": "https://4ddraw.com/api/explain.json"
    },
    {
      "path": "/api/index.json",
      "desc": "Hypermedia API index with HATEOAS links.",
      "url": "https://4ddraw.com/api/index.json"
    },
    {
      "path": "/api/openapi.yaml",
      "desc": "OpenAPI 3.1 spec covering the JSON endpoints.",
      "url": "https://4ddraw.com/api/openapi.yaml"
    },
    {
      "path": "/api/openapi.json",
      "desc": "JSON mirror of the OpenAPI spec.",
      "url": "https://4ddraw.com/api/openapi.json"
    },
    {
      "path": "/api/today.schema.json",
      "desc": "JSON Schema (2020-12) describing today.json structure.",
      "url": "https://4ddraw.com/api/today.schema.json"
    },
    {
      "path": "/api/badge.svg",
      "desc": "Embeddable network status SVG badge.",
      "url": "https://4ddraw.com/api/badge.svg"
    },
    {
      "path": "/api/embed-config.json",
      "desc": "Widget configuration manifest for embed iframes.",
      "url": "https://4ddraw.com/api/embed-config.json"
    }
  ]
}