{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"NOZLOO Public Catalog API","version":"1.0.0","summary":"Public, read-only NOZLOO product discovery for agents.","description":"This API exposes only public NOZLOO storefront catalog data. No API key, bearer token, OAuth flow, or user account is required. It does not expose customers, accounts, carts, checkouts, orders, payments, negotiated pricing, or Shopify Admin data.","contact":{"name":"NOZLOO","url":"https://nozloo.com/pages/contact"}},"servers":[{"url":"https://nozloo-agent-api.vercel.app","description":"Current NOZLOO public agent service"}],"externalDocs":{"description":"NOZLOO agent developer guide","url":"https://nozloo-agent-api.vercel.app/developers"},"security":[],"x-nozloo-authentication":{"publicCatalog":{"authentication":"none","access":"public-read-only"},"customerAccountSurfaces":{"separateFromThisApi":true,"protectedResourceMetadata":"https://nozloo.com/.well-known/oauth-protected-resource","authorizationServerMetadata":"https://nozloo.com/.well-known/oauth-authorization-server","customerAccountDiscovery":"https://nozloo.com/.well-known/customer-account-api"}},"tags":[{"name":"Catalog","description":"Validated, cached, anonymous reads of public product data."}],"paths":{"/api/catalog/products":{"get":{"tags":["Catalog"],"summary":"List public NOZLOO products","description":"Returns one deterministic page of public storefront products. This operation is anonymous and read-only.","operationId":"listCatalogProducts","security":[],"parameters":[{"name":"limit","in":"query","description":"Maximum products to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"page","in":"query","description":"One-based storefront page number.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1}}],"responses":{"200":{"description":"A page of public NOZLOO products.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListResponse"}}}},"400":{"description":"A query parameter is invalid or unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"405":{"description":"The HTTP method is not supported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"502":{"description":"The storefront returned an unusable response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"504":{"description":"The storefront did not respond before the timeout.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/catalog/products/{handle}":{"get":{"tags":["Catalog"],"summary":"Get one public NOZLOO product","description":"Resolves an exact lowercase product handle. A missing product is a real HTTP 404 with a structured recovery hint. This operation is anonymous and read-only.","operationId":"getCatalogProductByHandle","security":[],"parameters":[{"name":"handle","in":"path","required":true,"description":"Lowercase, hyphen-separated NOZLOO storefront handle.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}],"responses":{"200":{"description":"The requested public product.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"400":{"description":"The product handle is malformed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No public product has this handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"405":{"description":"The HTTP method is not supported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"502":{"description":"The storefront returned an unusable response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"504":{"description":"The storefront did not respond before the timeout.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","additionalProperties":false,"required":["code","message","resolution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"},"details":{"type":"object","additionalProperties":true}}},"ErrorEnvelope":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"$ref":"#/components/schemas/Error"}}},"ProductVariant":{"type":"object","additionalProperties":false,"required":["id","title","sku","price","compareAtPrice","currency","available","position","options"],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"sku":{"type":["string","null"]},"price":{"type":["string","null"]},"compareAtPrice":{"type":["string","null"]},"currency":{"type":"string","const":"USD"},"available":{"type":["boolean","null"]},"position":{"type":["number","null"]},"options":{"type":"array","items":{"type":"string"}}}},"ProductImage":{"type":"object","additionalProperties":false,"required":["id","src","alt","width","height","position"],"properties":{"id":{"type":["string","null"]},"src":{"type":["string","null"],"format":"uri"},"alt":{"type":["string","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"position":{"type":["number","null"]}}},"Product":{"type":"object","additionalProperties":false,"required":["id","title","handle","productUrl","descriptionHtml","vendor","productType","publishedAt","updatedAt","tags","variants","images"],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"handle":{"type":["string","null"]},"productUrl":{"type":["string","null"],"format":"uri"},"descriptionHtml":{"type":["string","null"]},"vendor":{"type":["string","null"]},"productType":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"variants":{"type":"array","items":{"$ref":"#/components/schemas/ProductVariant"}},"images":{"type":"array","items":{"$ref":"#/components/schemas/ProductImage"}}}},"ProductListResponse":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","required":["products"],"properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}}},"meta":{"type":"object","required":["count","limit","page","source"],"properties":{"count":{"type":"integer","minimum":0},"limit":{"type":"integer"},"page":{"type":"integer"},"source":{"type":"string","format":"uri"}}}}},"ProductResponse":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object","required":["product"],"properties":{"product":{"$ref":"#/components/schemas/Product"}}}}}}}}