{"openapi":"3.1.0","info":{"title":"PepTok public catalog API","version":"0.1.0","description":"Read-only JSON endpoints for nutrition foods, meals, peptides, and protocol templates."},"servers":[{"url":"https://www.peptokapp.com/api/public"}],"paths":{"/health":{"get":{"summary":"Health check","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"time":{"type":"string","format":"date-time"},"version":{"type":"string"}}}}}}}}},"/categories":{"get":{"summary":"List peptide category options","responses":{"200":{"description":"Category rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}}}}}}}}}},"/foods":{"get":{"summary":"List foods in the nutrition catalog (paginated)","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string","enum":["ingredient","drink"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":30}},{"name":"cursor","in":"query","description":"Opaque cursor JSON (base64url): {\"usageCount\":number,\"id\":string}","schema":{"type":"string"}}],"responses":{"200":{"description":"Page of foods","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/foods/{id}":{"get":{"summary":"Get food by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Food detail","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}},"/meals":{"get":{"summary":"List meals in the discover catalog (paginated)","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"filter","in":"query","schema":{"type":"string","enum":["all","high_protein","low_carb","bulking","cutting"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":30}},{"name":"cursor","in":"query","description":"Opaque cursor: ISO date + meal id","schema":{"type":"string"}}],"responses":{"200":{"description":"Page of meals","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/meals/{id}":{"get":{"summary":"Get meal by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Meal detail","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}},"/peptides":{"get":{"summary":"List published peptides (paginated)","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":30}},{"name":"cursor","in":"query","description":"Opaque cursor JSON (base64url): {\"priority\":number,\"views\":number,\"id\":string}","schema":{"type":"string"}}],"responses":{"200":{"description":"Page of peptides","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/peptides/{slug}":{"get":{"summary":"Get peptide by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Peptide detail","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}},"/protocols":{"get":{"summary":"List published protocol templates (paginated)","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","description":"Comma-separated peptide category ids or slugs","schema":{"type":"string"}},{"name":"levels","in":"query","description":"Comma-separated level values","schema":{"type":"string"}},{"name":"peptideIds","in":"query","description":"Comma-separated peptide product ids","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":30}},{"name":"cursor","in":"query","description":"Opaque cursor JSON (base64url): {\"title\":string,\"id\":string}","schema":{"type":"string"}}],"responses":{"200":{"description":"Page of protocol templates","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/protocols/{id}":{"get":{"summary":"Get protocol template by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Protocol template detail","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}}}}