{"openapi":"3.1.0","info":{"title":"Hell’s Pantry Catalog API","version":"1.0.0","description":"Read-only access to the same public catalog used by the Sauce Matrix. Flavor scores are estimates; null means unknown, not zero. No private pantry or account data."},"servers":[{"url":"https://hellspantry.com"}],"paths":{"/api/v1/sauces":{"get":{"operationId":"listSauces","summary":"Filter, sort and page through the sauce catalog","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200,"description":"Search sauce, maker, pepper and tasting notes."}},{"name":"maker","in":"query","required":false,"schema":{"type":"string","description":"Exact maker id from get_catalog_schema, such as queen-majesty."}},{"name":"pepper","in":"query","required":false,"schema":{"type":"string","description":"Pepper id from get_catalog_schema, such as habanero or ghost-pepper."}},{"name":"style","in":"query","required":false,"schema":{"type":"string","description":"Exact style from get_catalog_schema."}},{"name":"texture","in":"query","required":false,"schema":{"type":"string","enum":["thin","pourable","thick","chunky"]}},{"name":"flavors","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated flavor ids. All must match."}},{"name":"minHeat","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"maxHeat","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"reviewed","in":"query","required":false,"schema":{"type":"boolean","description":"Only sauces with a linked independent review."}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["maker","name","heat","sweet","acid","smoke","garlic","fruit","savory"]}},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},{"name":"format","in":"query","schema":{"type":"string","enum":["json","csv"],"default":"json"}}],"responses":{"200":{"description":"Matching records. CSV uses the same page, filters and ordering as JSON. Use limit=500 for a full current-catalog export.","content":{"application/json":{"schema":{"type":"object","required":["items","total","count","limit","offset","next"],"properties":{"apiVersion":{"type":"string"},"catalogCount":{"type":"integer"},"makerCount":{"type":"integer"},"lastResearchedAt":{"type":["string","null"],"format":"date"},"total":{"type":"integer"},"count":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"},"next":{"type":["string","null"]},"previous":{"type":["string","null"]},"filters":{"type":"object"},"sort":{"type":"object"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Sauce"}}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid query or unknown record","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}},"schema":{"type":"string","format":"uri"}}}}}}}}},"/api/v1/sauces/{id}":{"get":{"operationId":"getSauce","summary":"Get one full public sauce record","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sauce record","content":{"application/json":{"schema":{"type":"object","properties":{"apiVersion":{"type":"string"},"item":{"$ref":"#/components/schemas/Sauce"}}}}}},"404":{"description":"Invalid query or unknown record","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}},"schema":{"type":"string","format":"uri"}}}}}}}}},"/api/v1/sauces/schema":{"get":{"operationId":"getCatalogSchema","summary":"Get field definitions, filter values and catalog counts","responses":{"200":{"description":"Catalog field semantics and global facets","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"schemas":{"Sauce":{"type":"object","required":["id","name","maker","heatTier","flavorScores","sources"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"maker":{"type":"string"},"makerId":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"},"heatTier":{"type":"integer","minimum":1,"maximum":5},"heatLabel":{"type":"string"},"peppers":{"type":"array","items":{"type":"string"}},"pepperTypes":{"type":"array","items":{"type":"string"}},"style":{"type":"string"},"flavorTags":{"type":"array","items":{"type":"string"}},"flavorScores":{"type":"object","required":["sweet","acid","smoke","garlic","fruit","savory"],"properties":{"sweet":{"type":["integer","null"],"minimum":0,"maximum":5},"acid":{"type":["integer","null"],"minimum":0,"maximum":5},"smoke":{"type":["integer","null"],"minimum":0,"maximum":5},"garlic":{"type":["integer","null"],"minimum":0,"maximum":5},"fruit":{"type":["integer","null"],"minimum":0,"maximum":5},"savory":{"type":["integer","null"],"minimum":0,"maximum":5}},"additionalProperties":false},"profileBasis":{"type":"string"},"profileResearch":{"type":["object","null"],"properties":{"checkedAt":{"type":"string","format":"date"},"scoreEvidence":{"type":"object","description":"Additional scores supported by this research pass, not all existing scores.","additionalProperties":{"type":"object","required":["value","confidence","basis","rationale","sourceUrls"],"properties":{"value":{"type":"integer","minimum":0,"maximum":5},"confidence":{"type":"string","enum":["medium","high"]},"basis":{"type":"string","enum":["tasting-description","ingredient-inference"]},"rationale":{"type":"string"},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}}}}},"unresolved":{"type":"object","additionalProperties":{"type":"string"}},"checkedSources":{"type":"array","items":{"type":"object"}}}},"texture":{"type":["object","null"],"properties":{"value":{"type":"string","enum":["thin","pourable","thick","chunky"]},"note":{"type":"string"},"source":{"$ref":"#/components/schemas/Source"}}},"country":{"type":["string","null"]},"pairingIdeas":{"type":"array","items":{"type":"string"}},"researchedAt":{"type":["string","null"],"format":"date"},"ingredients":{"type":["object","null"]},"heatEvidence":{"type":["object","null"]},"flavorEvidence":{"type":["object","null"]},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"hasIndependentReview":{"type":"boolean"},"image":{"type":["object","null"],"properties":{"url":{"type":"string","format":"uri"},"sourceUrl":{"type":["string","null"]},"rights":{"type":"string","enum":["approved","unverified"]}}},"buyLinks":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"label":{"type":"string"},"affiliate":{"type":"boolean"},"type":{"type":"string"}}}}}},"Source":{"type":"object","required":["title","url","type"],"properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"},"type":{"type":"string","enum":["maker","retailer","review"]}}}}}}