{
  "openapi": "3.1.0",
  "info": {
    "title": "Distill.family API",
    "version": "1.0.0",
    "description": "Self-describing JSON API mirroring the Distill.family content tree. Each response includes _links (HATEOAS) and _meta. Content licensed CC BY-SA 4.0.\n\nLanguages: every endpoint below also exists under a locale prefix — /api/{lang}/… for en, es, fr, de, zh-Hans, ar, hi, ja, he — and each locale is enumerated in `paths`. The locale is in the URL rather than negotiated from Accept-Language because every endpoint is prerendered, and a prerendered response cannot vary by request header.\n\nTwo limits, stated rather than implied. Individual source books (/api/traditions/{slug}/books/{id}.json) have no translation in any locale and are served only from the English tree. And a translated document has been checked for structural completeness, not for accuracy — no native speaker has reviewed the corpus. Each response carries a `translated` flag reporting the per-file truth.",
    "license": {
      "name": "CC BY-SA 4.0",
      "url": "https://creativecommons.org/licenses/by-sa/4.0/"
    }
  },
  "servers": [
    {
      "url": "https://distill.family"
    }
  ],
  "paths": {
    "/api.json": {
      "get": {
        "summary": "API root index"
      }
    },
    "/api/traditions.json": {
      "get": {
        "summary": "List all 12 traditions"
      }
    },
    "/api/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition"
      }
    },
    "/api/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition"
      }
    },
    "/api/traditions/{slug}/books/{id}.json": {
      "get": {
        "summary": "Single source book (N=1 atomic statements). English only, in every locale."
      }
    },
    "/api/map.json": {
      "get": {
        "summary": "Map root"
      }
    },
    "/api/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes"
      }
    },
    "/api/map/divergence.json": {
      "get": {
        "summary": "13 held tensions"
      }
    },
    "/api/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels"
      }
    },
    "/api/compass.json": {
      "get": {
        "summary": "Full union compass"
      }
    },
    "/api/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status"
      }
    },
    "/api/en.json": {
      "get": {
        "summary": "API root index — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/map.json": {
      "get": {
        "summary": "Map root — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/en/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — en",
        "tags": [
          "lang:en"
        ]
      }
    },
    "/api/es.json": {
      "get": {
        "summary": "API root index — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/map.json": {
      "get": {
        "summary": "Map root — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/es/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — es",
        "tags": [
          "lang:es"
        ]
      }
    },
    "/api/fr.json": {
      "get": {
        "summary": "API root index — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/map.json": {
      "get": {
        "summary": "Map root — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/fr/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — fr",
        "tags": [
          "lang:fr"
        ]
      }
    },
    "/api/de.json": {
      "get": {
        "summary": "API root index — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/map.json": {
      "get": {
        "summary": "Map root — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/de/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — de",
        "tags": [
          "lang:de"
        ]
      }
    },
    "/api/zh-Hans.json": {
      "get": {
        "summary": "API root index — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/map.json": {
      "get": {
        "summary": "Map root — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/zh-Hans/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — zh-Hans",
        "tags": [
          "lang:zh-Hans"
        ]
      }
    },
    "/api/ar.json": {
      "get": {
        "summary": "API root index — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/map.json": {
      "get": {
        "summary": "Map root — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/ar/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — ar",
        "tags": [
          "lang:ar"
        ]
      }
    },
    "/api/hi.json": {
      "get": {
        "summary": "API root index — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/map.json": {
      "get": {
        "summary": "Map root — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/hi/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — hi",
        "tags": [
          "lang:hi"
        ]
      }
    },
    "/api/ja.json": {
      "get": {
        "summary": "API root index — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/map.json": {
      "get": {
        "summary": "Map root — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/ja/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — ja",
        "tags": [
          "lang:ja"
        ]
      }
    },
    "/api/he.json": {
      "get": {
        "summary": "API root index — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/traditions.json": {
      "get": {
        "summary": "List all 12 traditions — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/traditions/{slug}.json": {
      "get": {
        "summary": "Single tradition — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/traditions/{slug}/principles.json": {
      "get": {
        "summary": "N=3 principles for a tradition (translated) — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/traditions/{slug}/books.json": {
      "get": {
        "summary": "Source-book collection for a tradition — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/map.json": {
      "get": {
        "summary": "Map root — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/map/convergence.json": {
      "get": {
        "summary": "29 convergence themes (translated) — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/map/divergence.json": {
      "get": {
        "summary": "13 held tensions (translated) — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/map/jewels.json": {
      "get": {
        "summary": "41 preserved jewels (translated) — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/compass.json": {
      "get": {
        "summary": "Full union compass (translated) — he",
        "tags": [
          "lang:he"
        ]
      }
    },
    "/api/he/review-status.json": {
      "get": {
        "summary": "Corpus review + quote-verification status — he",
        "tags": [
          "lang:he"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Envelope": {
        "type": "object",
        "required": [
          "data",
          "_links",
          "_meta"
        ],
        "properties": {
          "data": {},
          "_links": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Link"
            }
          },
          "_meta": {
            "type": "object",
            "required": [
              "lang",
              "license",
              "apiVersion"
            ],
            "properties": {
              "lang": {
                "type": "string"
              },
              "etag": {
                "type": "string"
              },
              "lastModified": {
                "type": "string"
              },
              "license": {
                "type": "string"
              },
              "apiVersion": {
                "type": "string"
              }
            }
          }
        }
      },
      "Link": {
        "type": "object",
        "required": [
          "href"
        ],
        "properties": {
          "href": {
            "type": "string"
          },
          "rel": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        }
      }
    }
  }
}