{
  "openapi": "3.1.0",
  "info": {
    "title": "VinSip public data API",
    "version": "1.0.0",
    "summary": "Wine facts with primary sources, country purchase rules, wine regions, directory coverage and the guide corpus. No key, CORS open, CC BY 4.0.",
    "description": "Every dataset is a static JSON file regenerated on each site build from the same sources the pages render from. There is no key, no rate limit and no authentication: the endpoints are files behind a CDN.\n\nField semantics that implementers get wrong are documented at https://vinsip.app/api/ — read that before mapping `claim`, `purchase_age`, `venues` or `locales` into your own schema.",
    "contact": {
      "name": "Vast Flow, LLP",
      "email": "hello@vinsip.app",
      "url": "https://vinsip.app/contacts/"
    },
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    }
  },
  "servers": [
    {
      "url": "https://vinsip.app/api/v1",
      "description": "Static files, no authentication"
    }
  ],
  "externalDocs": {
    "url": "https://vinsip.app/api/",
    "description": "Field-by-field documentation"
  },
  "paths": {
    "/index.json": {
      "get": {
        "summary": "Entry point: every dataset with its row count.",
        "operationId": "getIndex",
        "responses": {
          "200": {
            "description": "Entry point: every dataset with its row count.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/status.json": {
      "get": {
        "summary": "When each dataset was last rebuilt.",
        "operationId": "getStatus",
        "responses": {
          "200": {
            "description": "When each dataset was last rebuilt.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/wine-facts.json": {
      "get": {
        "summary": "98 regulated figures about wine, each with the body that published it.",
        "operationId": "getWineFacts",
        "responses": {
          "200": {
            "description": "98 regulated figures about wine, each with the body that published it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/country-rules.json": {
      "get": {
        "summary": "Legal purchase age, duty regime and trading-hours rule per country.",
        "operationId": "getCountryRules",
        "responses": {
          "200": {
            "description": "Legal purchase age, duty regime and trading-hours rule per country.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/wine-regions.json": {
      "get": {
        "summary": "29 wine regions with grape varieties and styles.",
        "operationId": "getWineRegions",
        "responses": {
          "200": {
            "description": "29 wine regions with grape varieties and styles.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/directory.json": {
      "get": {
        "summary": "Venue counts per city and per country. Counts only.",
        "operationId": "getDirectory",
        "responses": {
          "200": {
            "description": "Venue counts per city and per country. Counts only.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/guides.json": {
      "get": {
        "summary": "The guide and reference corpus with per-page locale coverage.",
        "operationId": "getGuides",
        "responses": {
          "200": {
            "description": "The guide and reference corpus with per-page locale coverage.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/vinsip.json": {
      "get": {
        "summary": "What the VinSip app does and does not do.",
        "operationId": "getVinsip",
        "responses": {
          "200": {
            "description": "What the VinSip app does and does not do.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  }
}
