{"openapi":"3.0.3","info":{"title":"Orbit Store / API Shield Lab","version":"1.0.0","description":"Intentionally vulnerable synthetic-data lab. This document describes the allowed request contract, not the vulnerable implementation behavior."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/api/v1/auth/login":{"post":{"summary":"Login with the published demo credentials","security":[],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string","minLength":1,"maxLength":100,"format":"email"},"password":{"type":"string","minLength":1,"maxLength":100}},"required":["email","password"]}}}}}},"/api/v1/products":{"get":{"summary":"Search products","security":[],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}},"parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":200}}]}},"/api/v1/directory":{"get":{"summary":"Public customer directory","security":[],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}}}},"/api/v1/users/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"get":{"summary":"Read a customer profile; ownership is required","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}}},"patch":{"summary":"Update the name of your own profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":60}},"required":["name"]}}}}}},"/api/v1/me":{"get":{"summary":"Read the authenticated profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}}}},"/api/v1/admin/export":{"get":{"summary":"Export customers; administrator role required","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}}}},"/api/v1/preview":{"get":{"summary":"HTML preview","security":[],"responses":{"200":{"description":"HTML preview","content":{"text/html":{"schema":{"type":"string"}}}}},"parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":1000}}]}},"/api/v1/orders":{"get":{"summary":"Read your orders","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}}},"post":{"summary":"Create a demo order","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid quantity or product"},"401":{"description":"Authentication required"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"product_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1,"maximum":10}},"required":["product_id","quantity"]}}}}}},"/api/v1/coupons/check":{"post":{"summary":"Check a synthetic coupon","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Demo API response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"429":{"description":"Rate limit exceeded"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","pattern":"^[A-Z0-9]{1,20}$"}},"required":["code"]}}}}}}}}