{"openapi": "3.1.0", "info": {"title": "The Peptide Watch API", "version": "1.0.0", "description": "Public, unauthenticated API for verifying UK research-peptide vendors and their certificates of analysis (COAs). No API key or login; the COA checker is rate-limited to 30 requests/day per IP. Vendor data is CC BY 4.0.", "contact": {"email": "info@thepeptidewatch.com", "url": "https://thepeptidewatch.com/"}, "license": {"name": "CC BY 4.0", "url": "https://creativecommons.org/licenses/by/4.0/"}}, "servers": [{"url": "https://thepeptidewatch.com"}], "paths": {"/api/check-coa": {"post": {"operationId": "checkCoa", "summary": "Forensically analyse a certificate-of-analysis image", "description": "Upload a COA image (data URL) and optional vendor domain; returns a structured verdict.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["image"], "properties": {"image": {"type": "string", "description": "COA image as a data: URL (base64) or raw base64."}, "vendor": {"type": "string", "description": "Optional vendor domain, e.g. 'lab77peptides.com'."}}}}}}, "responses": {"200": {"description": "Verdict", "content": {"application/json": {"schema": {"type": "object", "properties": {"verdict": {"type": "string", "enum": ["genuine-independent", "real-lab-not-janoshik", "self-made", "borrowed", "fabricated", "stale", "unclear"]}, "confidence": {"type": "number"}, "lab_named": {"type": "string"}, "client_field": {"type": "string"}, "green_flags": {"type": "array", "items": {"type": "string"}}, "red_flags": {"type": "array", "items": {"type": "string"}}, "plain_english": {"type": "string"}, "what_to_do": {"type": "string"}}}}}}, "429": {"description": "Daily rate limit reached (30/day/IP)."}}}}, "/data/vendors.json": {"get": {"operationId": "getVendors", "summary": "Full UK research-peptide vendor audit dataset (CC BY 4.0)", "responses": {"200": {"description": "Dataset with headline_finding and a vendors array.", "content": {"application/json": {}}}}}}, "/mcp": {"post": {"operationId": "mcp", "summary": "Model Context Protocol endpoint (Streamable HTTP, JSON-RPC 2.0)", "responses": {"200": {"description": "JSON-RPC response"}}}}, "/api/health": {"get": {"operationId": "getHealth", "summary": "Service health", "responses": {"200": {"description": "OK"}}}}}}