{"openapi":"3.0.3","info":{"title":"QAFakeAPI","description":"Free Mock REST API Sandbox built for QA Engineers, SDETs, and API Automation Testing Practice.","version":"2.0.0","contact":{"name":"Ziara TechQ Labs","url":"https://www.ziaratechqlabs.in/"}},"servers":[{"url":"http://localhost:3000","description":"Local Mock Sandbox Server"},{"url":"https://qafakeapi.ziaratechqlabs.in","description":"Production Cloud Sandbox"}],"tags":[{"name":"Authentication","description":"JWT Bearer token generation, session verification, and revocation"},{"name":"Products","description":"Catalog CRUD, search, category filtering, pagination, and sorting"},{"name":"Users","description":"User registration and directory management"},{"name":"Orders","description":"Nested relational e-commerce orders and schema validation payloads"},{"name":"QA Simulators","description":"Negative status code testing (200-503) and latency delay simulation"},{"name":"System","description":"Health monitoring and database reset"}],"paths":{"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"User Login & JWT Token Generation","description":"Authenticate with test credentials (aquil / test1234) to receive a Bearer token.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"type":"string","example":"aquil"},"password":{"type":"string","example":"test1234"}}}}}},"responses":{"200":{"description":"Authentication successful, Bearer token returned"},"401":{"description":"Invalid credentials"}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Authenticated User Profile","description":"Returns profile of current user. Requires Bearer token header.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"User profile retrieved"},"401":{"description":"Missing or invalid token"}}}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout & Revoke Token","description":"Revokes the active Bearer token from in-memory session.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Logged out successfully"},"401":{"description":"Missing token"}}}},"/api/v1/products":{"get":{"tags":["Products"],"summary":"List All Products","description":"Fetch products catalog with optional search, category filter, and pagination.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Search term for name/description"},{"name":"category","in":"query","schema":{"type":"string","enum":["electronics","audio","accessories","wearables"]}},{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":10}},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["price","name","stock"]}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"List of products"}}},"post":{"tags":["Products"],"summary":"Create New Product","description":"Add a new product to the catalog. Requires Bearer token authentication.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","price"],"properties":{"name":{"type":"string","example":"Wireless Mechanical Keyboard"},"price":{"type":"number","example":2499},"stock":{"type":"integer","example":20},"category":{"type":"string","example":"electronics"}}}}}},"responses":{"201":{"description":"Product created successfully"},"401":{"description":"Unauthorized"}}}},"/api/v1/products/{id}":{"get":{"tags":["Products"],"summary":"Get Product by ID","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"example":1}],"responses":{"200":{"description":"Product found"},"404":{"description":"Product not found"}}},"put":{"tags":["Products"],"summary":"Update Existing Product","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"example":1}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"price":{"type":"number","example":549},"stock":{"type":"integer","example":40}}}}}},"responses":{"200":{"description":"Product updated"},"401":{"description":"Unauthorized"},"404":{"description":"Product not found"}}},"delete":{"tags":["Products"],"summary":"Delete Product","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"example":4}],"responses":{"200":{"description":"Product deleted"},"401":{"description":"Unauthorized"},"404":{"description":"Product not found"}}}},"/api/v1/users":{"get":{"tags":["Users"],"summary":"Get All Users","description":"Fetch list of all registered test users without password hashes.","responses":{"200":{"description":"List of users"}}},"post":{"tags":["Users"],"summary":"Register New User","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"type":"string","example":"qa_lead_alex"},"password":{"type":"string","example":"pass2026"},"role":{"type":"string","example":"tester"}}}}}},"responses":{"201":{"description":"User created"},"400":{"description":"Validation error"}}}},"/api/v1/orders":{"get":{"tags":["Orders"],"summary":"Get All Orders","description":"Fetch nested relational e-commerce orders with items, quantities, and status.","responses":{"200":{"description":"List of orders"}}}},"/api/v1/orders/{id}":{"get":{"tags":["Orders"],"summary":"Get Order by ID","description":"Fetch single order details including line items, user ID, and payment status.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"example":101}],"responses":{"200":{"description":"Order details found"},"404":{"description":"Order not found"}}}},"/api/v1/mock/status/{code}":{"get":{"tags":["QA Simulators"],"summary":"Simulate Any HTTP Status Code","description":"Returns the specified HTTP status code (400, 401, 403, 404, 422, 429, 500, 503) for error boundary testing.","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"integer"},"example":404}],"responses":{"200":{"description":"Simulated 200"},"400":{"description":"Simulated 400"},"404":{"description":"Simulated 404"},"500":{"description":"Simulated 500"}}}},"/api/v1/mock/delay/{ms}":{"get":{"tags":["QA Simulators"],"summary":"Simulate Network Latency Delay","description":"Delays the response by the specified number of milliseconds (0-5000ms).","parameters":[{"name":"ms","in":"path","required":true,"schema":{"type":"integer"},"example":1500}],"responses":{"200":{"description":"Delayed response returned"}}}},"/api/v1/reset":{"post":{"tags":["System"],"summary":"Reset Database to Clean Defaults","description":"Wipes all created/edited products, users, and tokens in 1ms, restoring 10 default products and 4 users.","responses":{"200":{"description":"Database reset confirmation"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}}