{"openapi":"3.1.0","info":{"title":"PepVial Research Peptides Catalog API","version":"1.0.0","description":"Public, read-only research product catalog. No authentication required. Prices, availability, shipping and checkout are available on the regional storefront. Products are for laboratory research only, not human consumption.","contact":{"email":"support@pepvial.com"}},"servers":[{"url":"https://pepvial.com"}],"security":[],"externalDocs":{"description":"PepVial developer documentation","url":"https://pepvial.com/developers"},"paths":{"/api/agent/v1":{"get":{"operationId":"getPepVialApi","summary":"Discover the PepVial API","description":"Get links to the public catalog, OpenAPI document and developer documentation.","responses":{"200":{"description":"API discovery","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discovery"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/agent/v1/products":{"get":{"operationId":"listPepVialProducts","summary":"Search the research product catalog","description":"List public products with bounded offset pagination and optional full-text search. Does not expose customer data, regional prices or inventory quantities.","parameters":[{"name":"limit","in":"query","description":"Maximum number of products to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Number of matching products to skip.","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}},{"name":"q","in":"query","description":"Search text matched by the catalog.","schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"Matching products","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductList"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/agent/v1/products/{handle}":{"get":{"operationId":"getPepVialProduct","summary":"Read one research product","description":"Retrieve a product by the exact handle returned by listPepVialProducts. Returns 404 when the handle is no longer published.","parameters":[{"name":"handle","in":"path","required":true,"description":"Public product handle from the catalog.","schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":200}}],"responses":{"200":{"description":"Product details","content":{"application/json":{"schema":{"type":"object","required":["product"],"additionalProperties":false,"properties":{"product":{"$ref":"#/components/schemas/Product"}}}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Discovery":{"type":"object","additionalProperties":false,"required":["name","version","docs","openapi","products"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"products":{"type":"string","format":"uri"}}},"Variant":{"type":"object","additionalProperties":false,"required":["id","title","sku"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"sku":{"type":["string","null"]}}},"Product":{"type":"object","additionalProperties":false,"required":["id","handle","title","description","thumbnail","url","variants"],"properties":{"id":{"type":"string"},"handle":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail":{"type":["string","null"],"format":"uri"},"url":{"type":"string","format":"uri"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/Variant"}}}},"ProductList":{"type":"object","additionalProperties":false,"required":["products","count","limit","offset"],"properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"count":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0}}},"Error":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","hint","docs"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"},"docs":{"type":"string","format":"uri"}}}}}}}}