{"info":{"_postman_id":"e7f90f25-7365-4981-b085-62589db1a15e","name":"Rate Limiter","description":"<html><head></head><body><p>The Rate Limiter API is a backend system designed to help API providers control traffic, protect resources, and monitor consumer activity through configurable rate-limiting rules.</p>\n<p>It supports:</p>\n<ul>\n<li><p>user registration and authentication</p>\n</li>\n<li><p>API key–based access to protected endpoints</p>\n</li>\n<li><p>creation and management of rate-limit rules</p>\n</li>\n<li><p>analytics for system and user-level usage</p>\n</li>\n<li><p>traffic log inspection for observability and auditing</p>\n</li>\n</ul>\n<h3 id=\"tech-stack\">Tech Stack</h3>\n<p>Backend: Spring Boot, MySQL<br>Frontend: Next.js</p>\n<h2 id=\"key-features\">Key Features</h2>\n<ul>\n<li><p>API key authentication for protected resources</p>\n</li>\n<li><p>configurable per-endpoint rate-limit rules</p>\n</li>\n<li><p>analytics reporting for usage insights</p>\n</li>\n<li><p>traffic logs for system-wide and user-level tracing</p>\n</li>\n<li><p>CRUD operations for rate-limit management</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"39216679","collectionId":"e7f90f25-7365-4981-b085-62589db1a15e","publishedId":"2sBXqCNiTR","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-04-14T08:39:12.000Z"},"item":[{"name":"Authentication","item":[{"name":"User Register","id":"6080b337-cedb-4a6e-bb56-486b7ebd6a7e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Khushbu\",\r\n  \"email\": \"khushbu@gmail.com\",\r\n  \"password\": \"123456\",\r\n  \"role\": \"USER\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/auth/register","description":"<p>Registers a new user and generates a unique API key.</p>\n<p>The API key is required to access protected endpoints.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["auth","register"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"4b1837f1-3946-4d15-86b3-90a38cb7f603","name":"200 OK - Success","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Khushbu\",\r\n  \"email\": \"khushbu@gmail.com\",\r\n  \"password\": \"123456\",\r\n  \"role\": \"USER\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/auth/register"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:10:23 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"role\": \"USER\",\n    \"apiKey\": \"your-api-key\",\n    \"name\": \"Khushbu\",\n    \"userId\": \"3\"\n}"}],"_postman_id":"6080b337-cedb-4a6e-bb56-486b7ebd6a7e"},{"name":"Login","id":"2b18fdec-03ef-4aac-bd53-99cf1999ff22","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"khushbu@gmail.com\",\r\n    \"password\": 123456\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/auth/login","description":"<p>Authenticates an existing user using email and password.</p>\n<p>Returns user details and API key for accessing protected APIs.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["auth","login"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"b037ecb7-aa4c-46c7-9deb-673de03a1426","name":"200 OK - Success","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"khushbu@gmail.com\",\r\n    \"password\": 123456\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:13:38 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"role\": \"USER\",\n    \"apiKey\": \"your-api-key\",\n    \"name\": \"Khushbu\",\n    \"userId\": \"2\"\n}"}],"_postman_id":"2b18fdec-03ef-4aac-bd53-99cf1999ff22"}],"id":"61c6c076-051d-4ea0-8c3d-641e1a40b576","description":"<p>Handles user authentication including registration and login.<br />Upon successful registration, a unique API key is generated for the user.</p>\n","_postman_id":"61c6c076-051d-4ea0-8c3d-641e1a40b576"},{"name":"Rate Limit Rules","item":[{"name":"Create Rule","id":"e950faf3-9517-451e-86f5-6f6fb3a909c6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"targetType\": \"GLOBAL\",\r\n    \"endpoint\": \"/api/data\",\r\n    \"limitCount\": 5,\r\n    \"timeWindow\": 60\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/rate-limit/create","description":"<p>Creates a new rate limiting rule for a specific endpoint.</p>\n<p>Defines how many requests are allowed within a given time window.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["rate-limit","create"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"e96a98c6-1033-49ea-ba30-0b2e188ea015","name":"200 OK - Success","originalRequest":{"method":"POST","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"targetType\": \"GLOBAL\",\r\n    \"endpoint\": \"/api/data\",\r\n    \"limitCount\": 5,\r\n    \"timeWindow\": 60\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/rate-limit/create"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:15:59 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 3,\n    \"targetType\": \"GLOBAL\",\n    \"targetValue\": null,\n    \"endpoint\": \"/api/data\",\n    \"limitCount\": 5,\n    \"timeWindow\": 60\n}"}],"_postman_id":"e950faf3-9517-451e-86f5-6f6fb3a909c6"},{"name":"List All Rules","id":"93e94e6f-a30b-4e87-81d2-e781d90ad274","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/rate-limit","description":"<p>Retrieves all configured rate limiting rules.</p>\n<p>Useful for admins to view and manage existing rules.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["rate-limit"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"94b8675c-4fbd-46d5-878b-7f771b1247b3","name":"200 OK - Success","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/rate-limit"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:17:13 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 2,\n        \"targetType\": \"GLOBAL\",\n        \"targetValue\": null,\n        \"endpoint\": \"/api/data\",\n        \"limitCount\": 5,\n        \"timeWindow\": 60\n    },\n    {\n        \"id\": 3,\n        \"targetType\": \"GLOBAL\",\n        \"targetValue\": null,\n        \"endpoint\": \"/api/data\",\n        \"limitCount\": 5,\n        \"timeWindow\": 60\n    }\n]"}],"_postman_id":"93e94e6f-a30b-4e87-81d2-e781d90ad274"},{"name":"Update Rule","id":"5c72b06d-4040-4b1a-93b3-5f323dad9f32","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"limitCount\": 10,\r\n    \"timeWindow\": 30,\r\n    \"endpoint\": \"/api/data\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/rate-limit/{id}","description":"<p>Updates an existing rate limit rule using its ID.</p>\n<p>Allows modification of limit count or time window.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["rate-limit","{id}"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"01721302-a5a0-4b5f-825c-7e16854d95c0","name":"200 OK - Success","originalRequest":{"method":"PUT","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"limitCount\": 10,\r\n    \"timeWindow\": 30,\r\n    \"endpoint\": \"/api/data\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/rate-limit/{id}"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:18:22 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 2,\n    \"targetType\": \"GLOBAL\",\n    \"targetValue\": null,\n    \"endpoint\": \"/api/data\",\n    \"limitCount\": 10,\n    \"timeWindow\": 30\n}"}],"_postman_id":"5c72b06d-4040-4b1a-93b3-5f323dad9f32"},{"name":"Delete Rule","id":"bd835913-4f5c-4867-8487-e938144a422e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/rate-limit/{id}","description":"<p>Deletes a rate limit rule by its ID.</p>\n<p>Removes the restriction applied to the endpoint.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["rate-limit","{id}"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"bb6acf52-dc27-4953-b382-fc1c3838541c","name":"200 OK - Success","originalRequest":{"method":"DELETE","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/rate-limit/{id}"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"text/plain;charset=UTF-8"},{"key":"Content-Length","value":"27"},{"key":"Date","value":"Tue, 14 Apr 2026 08:19:22 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"Rate limit rule deleted ✅"}],"_postman_id":"bd835913-4f5c-4867-8487-e938144a422e"}],"id":"f5212bc4-f3df-46f9-8264-d7f9c753971a","description":"<p>APIs for managing rate limiting rules.<br />These endpoints allow admins to create, update, view, and delete rules that control API usage limits.</p>\n","_postman_id":"f5212bc4-f3df-46f9-8264-d7f9c753971a"},{"name":"Analytics","item":[{"name":"System Summary","id":"9ee54c11-0815-41db-96f6-52b6b8fb439c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/analytics/summary","description":"<p>Returns the total number of API requests made across the system.</p>\n<p>Provides a high-level overview of system usage.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["analytics","summary"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"b01beb4f-9bc8-4441-bd61-5741d687232e","name":"200 OK - Success","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/analytics/summary"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:20:09 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"15"}],"_postman_id":"9ee54c11-0815-41db-96f6-52b6b8fb439c"},{"name":"User Stats","id":"f69ab408-0c4c-4cf7-a9d2-1a0f11a51501","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/analytics/user/{userId}","description":"<p>Returns the total number of API requests made by a specific user.</p>\n<p>Useful for tracking individual API usage.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["analytics","user","{userId}"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"05dad478-7c7b-4bed-933d-b0480e7e0abf","name":"200 OK - Success","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/analytics/user/{userId}"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:21:16 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"15"}],"_postman_id":"f69ab408-0c4c-4cf7-a9d2-1a0f11a51501"}],"id":"4da9504d-cdcd-420c-be1a-a0131862f413","description":"<p>Provides insights into API usage, including total requests and user-specific statistics.<br />Useful for monitoring system activity and performance.</p>\n","_postman_id":"4da9504d-cdcd-420c-be1a-a0131862f413"},{"name":"Logs","item":[{"name":"All Traffic Logs","id":"8d3d8452-2690-4cdb-ad1d-c2f74f698426","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/logs","description":"<p>Retrieves all API request logs across the system.</p>\n<p>Includes endpoint, status, and timestamp for each request.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["logs"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"2c1349df-902f-4dfa-8933-4e7dc3f419f7","name":"200 OK - Success","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/logs"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:22:03 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:01:07.400979\"\n    },\n    {\n        \"id\": 2,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:08:57.396642\"\n    },\n    {\n        \"id\": 3,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:08:58.538787\"\n    },\n    {\n        \"id\": 4,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:01.431361\"\n    },\n    {\n        \"id\": 5,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:03.803458\"\n    },\n    {\n        \"id\": 6,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:05.342188\"\n    },\n    {\n        \"id\": 7,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:09.430463\"\n    },\n    {\n        \"id\": 8,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:22:04.459369\"\n    },\n    {\n        \"id\": 9,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:22:50.917072\"\n    },\n    {\n        \"id\": 10,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:27:51.792166\"\n    },\n    {\n        \"id\": 11,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:29.370363\"\n    },\n    {\n        \"id\": 12,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:30.565794\"\n    },\n    {\n        \"id\": 13,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:31.818083\"\n    },\n    {\n        \"id\": 14,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:33.120588\"\n    },\n    {\n        \"id\": 15,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 429,\n        \"timestamp\": \"2026-04-14T12:28:34.309472\"\n    }\n]"}],"_postman_id":"8d3d8452-2690-4cdb-ad1d-c2f74f698426"},{"name":"Personal Logs","id":"2f47bd04-2b1c-4b44-bddc-073d3a51b86e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/logs/user/{userId}","description":"<p>Retrieves API request logs for the authenticated user only.</p>\n<p>Useful for users to monitor their own API activity.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["logs","user","{userId}"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"fa9663d0-1d0d-48e9-b8aa-b5ec7a6fa638","name":"200 OK - Success","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/logs/user/2"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:22:59 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:01:07.400979\"\n    },\n    {\n        \"id\": 2,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:08:57.396642\"\n    },\n    {\n        \"id\": 3,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:08:58.538787\"\n    },\n    {\n        \"id\": 4,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:01.431361\"\n    },\n    {\n        \"id\": 5,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:03.803458\"\n    },\n    {\n        \"id\": 6,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:05.342188\"\n    },\n    {\n        \"id\": 7,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/process\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:09:09.430463\"\n    },\n    {\n        \"id\": 8,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:22:04.459369\"\n    },\n    {\n        \"id\": 9,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 404,\n        \"timestamp\": \"2026-04-14T12:22:50.917072\"\n    },\n    {\n        \"id\": 10,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:27:51.792166\"\n    },\n    {\n        \"id\": 11,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:29.370363\"\n    },\n    {\n        \"id\": 12,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:30.565794\"\n    },\n    {\n        \"id\": 13,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:31.818083\"\n    },\n    {\n        \"id\": 14,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 200,\n        \"timestamp\": \"2026-04-14T12:28:33.120588\"\n    },\n    {\n        \"id\": 15,\n        \"userId\": 2,\n        \"apiKey\": \"c8007917-5ef1-44f8-b449-3ddb2d21444c\",\n        \"endpoint\": \"/api/data\",\n        \"method\": \"GET\",\n        \"status\": 429,\n        \"timestamp\": \"2026-04-14T12:28:34.309472\"\n    }\n]"}],"_postman_id":"2f47bd04-2b1c-4b44-bddc-073d3a51b86e"}],"id":"ae111dab-8d7e-489a-91fc-625afd3b1437","description":"<p>Endpoints for retrieving API request logs.<br />Includes both system-wide logs and user-specific request history.</p>\n","_postman_id":"ae111dab-8d7e-489a-91fc-625afd3b1437"},{"name":"Rate Limit Test","id":"2569496a-9b4f-4036-b69b-0b5e7818eaa1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/api/data","description":"<p>Simulates an API request to test rate limiting behavior.</p>\n<p>Returns success if within limit, or error if limit is exceeded.</p>\n","urlObject":{"protocol":"http","port":"8080","path":["api","data"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"b932b2d7-4300-4850-bd8f-b5babe73cd56","name":"200 OK - Success","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/api/data"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 14 Apr 2026 08:23:47 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"note\": \"You can only see this if you are within your rate limit.\",\n    \"message\": \"This is protected data from the API!\",\n    \"status\": \"Success\"\n}"},{"id":"14ea9821-4a3b-4fbb-9015-920dc1d2233c","name":"429 - Too Many Requests","originalRequest":{"method":"GET","header":[{"key":"API-KEY","value":"your-api-key","type":"text"}],"url":"http://localhost:8080/api/data"},"status":"Too Many Requests","code":429,"_postman_previewlanguage":null,"header":[{"key":"Vary","value":"Origin"},{"key":"Vary","value":"Access-Control-Request-Method"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"0"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"0"},{"key":"Date","value":"Tue, 14 Apr 2026 08:24:43 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"message\": \"Too many requests. Try again after some time.\"\r\n}"}],"_postman_id":"2569496a-9b4f-4036-b69b-0b5e7818eaa1"}]}