{
  "openapi": "3.1.0",
  "info": {
    "title": "Packrift SKU Fit + Substitution Matrix",
    "version": "2026-05-28",
    "description": "Read-only public Packrift fit matrix for same-family packaging SKU review candidates. It does not approve substitutes or place orders.",
    "termsOfService": "https://packrift.com/policies/terms-of-service"
  },
  "servers": [
    {
      "url": "https://packrift-fit-substitution-matrix.vercel.app"
    }
  ],
  "paths": {
    "/": {
      "get": {
        "summary": "Human-readable matrix home",
        "responses": {
          "200": {
            "description": "HTML page with counts and downloads"
          }
        }
      }
    },
    "/methodology": {
      "get": {
        "summary": "Scoring methodology and count treatment",
        "responses": {
          "200": {
            "description": "HTML methodology page"
          }
        }
      }
    },
    "/families": {
      "get": {
        "summary": "Family summary",
        "responses": {
          "200": {
            "description": "HTML family summary"
          }
        }
      }
    },
    "/products/{slug}": {
      "get": {
        "summary": "SKU fit candidate page",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HTML SKU candidate page"
          },
          "404": {
            "description": "Unknown SKU slug"
          }
        }
      }
    },
    "/data/manifest.json": {
      "get": {
        "summary": "Dataset manifest",
        "responses": {
          "200": {
            "description": "JSON count and guardrail manifest"
          }
        }
      }
    },
    "/data/top-fit-relationships.jsonl": {
      "get": {
        "summary": "Top fit relationships as JSONL",
        "responses": {
          "200": {
            "description": "Newline-delimited relationship records"
          }
        }
      }
    },
    "/metadata.json": {
      "get": {
        "summary": "Croissant metadata",
        "responses": {
          "200": {
            "description": "MLCommons Croissant metadata"
          }
        }
      }
    }
  }
}