{"openapi":"3.0.3","info":{"title":"Zone Healthy Public API","version":"1.1.0","description":"Unauthenticated public endpoints for site metadata. Errors use RFC 9457 application/problem+json with a machine-readable `code` and human-readable `detail`. Rate limits: 60 requests per 60 seconds; see RateLimit, RateLimit-Policy, and Retry-After on 429. Customer account and checkout APIs remain session-based on the website. Official CLI: curl -fsSL https://www.zonehealthy.com/cli/zh -o zh && chmod +x zh"},"servers":[{"url":"https://www.zonehealthy.com"}],"tags":[{"name":"public","description":"Unauthenticated catalog and health"}],"paths":{"/api/v1/health":{"get":{"tags":["public"],"summary":"Health check","operationId":"getHealth","responses":{"200":{"description":"Service is reachable","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"400":{"description":"Bad request (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Unknown API path (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}},"Retry-After":{"description":"Seconds to wait before retrying a 429","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/site":{"get":{"tags":["public"],"summary":"Public site profile","operationId":"getSite","responses":{"200":{"description":"Organization links and product categories","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}}},"400":{"description":"Bad request (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Unknown API path (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}},"Retry-After":{"description":"Seconds to wait before retrying a 429","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error (RFC 9457)","headers":{"RateLimit":{"description":"IETF RateLimit header: limit, remaining, reset (seconds until window refresh)","schema":{"type":"string","example":"limit=60, remaining=59, reset=45"}},"RateLimit-Policy":{"description":"Quota and window in seconds","schema":{"type":"string","example":"60;w=60"}},"X-RateLimit-Limit":{"schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":59}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer","example":45}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail"],"properties":{"type":{"type":"string","format":"uri","description":"URI identifying this problem type"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"code":{"type":"string","description":"Machine-readable error code","example":"rate_limited"},"detail":{"type":"string","description":"Human-readable explanation"},"instance":{"type":"string"}}},"HealthResponse":{"type":"object","additionalProperties":false,"required":["ok","service","version"],"properties":{"ok":{"type":"boolean","example":true},"service":{"type":"string","example":"zonehealthy-public"},"version":{"type":"string","example":"1"}}},"SiteResponse":{"type":"object","additionalProperties":false,"required":["name","description","url","contact","links","products"],"properties":{"name":{"type":"string","example":"Zone Healthy"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"contact":{"type":"object","required":["email","phone"],"properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"}}},"links":{"type":"object","required":["home","mealPlans","zoneSelect","developers","llms","sitemap","openapi","health","cli"],"properties":{"home":{"type":"string","format":"uri"},"mealPlans":{"type":"string","format":"uri"},"zoneSelect":{"type":"string","format":"uri"},"developers":{"type":"string","format":"uri"},"llms":{"type":"string","format":"uri"},"sitemap":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"health":{"type":"string","format":"uri"},"cli":{"type":"string","format":"uri"}}},"products":{"type":"array","items":{"type":"string"}}}}}}}