{"info":{"_postman_id":"411832b8-9f1c-4da6-a488-b844b62b5ee7","name":"Rental API","description":"<html><head></head><body><p>This system is designed to manage the rental of beach products at a parador located in the Caribbean. Customers can rent a variety of products such as <strong>JetSky</strong>, <strong>Cuatriciclos</strong>, <strong>Diving Equipment</strong>, and <strong>Surfboards</strong> (for both kids and adults).</p>\n<p>The system handles the entire rental process including product availability, rental duration, payment processing, and discounts.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"11325396","collectionId":"411832b8-9f1c-4da6-a488-b844b62b5ee7","publishedId":"2sB2j4gX6N","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-05-02T21:32:12.000Z"},"item":[{"name":"Bookings","item":[{"name":"List Bookings","event":[{"listen":"test","script":{"id":"379d73a8-c376-4a67-b873-f23a01fb6303","exec":[""],"type":"text/javascript","packages":{}}}],"id":"bcd2dfce-1dbc-4291-81f0-2a487fd12f43","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/v1/bookings/","description":"<p>This endpoint retrieves a list of all the bookings made.</p>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","bookings",""],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"cfb25292-6902-4d7f-9661-5f9edbbd37df","name":"List Bookings","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/v1/bookings/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"473"},{"key":"ETag","value":"W/\"1d9-ODGKdnqUhAisFb0Njtc8tK2lIo4\""},{"key":"Date","value":"Fri, 02 May 2025 22:06:03 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"Bookings\": [\n        {\n            \"_id\": \"6814dea4ecf8db1a392f7b05\",\n            \"customerName\": \"Alice Smith\",\n            \"date\": \"2025-05-04T00:00:00.000Z\",\n            \"rentals\": [\n                {\n                    \"product\": \"6813f67d8a3fc8a2fea66fdf\",\n                    \"timeSlots\": [\n                        \"68125fa41b57da2d5b54194a\",\n                        \"68129f79e881da6514e81146\"\n                    ],\n                    \"_id\": \"6814dea4ecf8db1a392f7b06\"\n                },\n                {\n                    \"product\": \"6810d671e7112ffff7f85317\",\n                    \"timeSlots\": [\n                        \"68125fa41b57da2d5b54194a\"\n                    ],\n                    \"_id\": \"6814dea4ecf8db1a392f7b07\"\n                }\n            ],\n            \"paymentMethod\": \"cash\",\n            \"isPaid\": false,\n            \"createdAt\": \"2025-05-02T15:03:00.131Z\",\n            \"total\": 81,\n            \"__v\": 0\n        }\n    ]\n}"}],"_postman_id":"bcd2dfce-1dbc-4291-81f0-2a487fd12f43"},{"name":"Create Booking","id":"2305af48-7ed1-4ebf-993d-7d00815b87f5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"customerName\": \"Alice Smith\",\n  \"date\": \"2025-05-04\",\n  \"rentals\": [\n    {\n      \"product\": \"6813f67d8a3fc8a2fea66fdf\",\n      \"timeSlots\": [\n        \"68125fa41b57da2d5b54194a\",\n        \"68129f79e881da6514e81146\"\n      ]\n    },\n    {\n      \"product\": \"6810d671e7112ffff7f85317\",\n      \"timeSlots\": [\n        \"68125fa41b57da2d5b54194a\"\n      ]\n    }\n  ],\n  \"paymentMethod\": \"cash\",\n  \"isPaid\": false\n}\n\n","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/bookings/create","description":"<p>The endpoint creates a new booking with the provided details.</p>\n<h3 id=\"request-body\">Request Body</h3>\n<ul>\n<li><p>customerName (string): The name of the customer.</p>\n</li>\n<li><p>date (string): The date of the booking.</p>\n</li>\n<li><p>rentals (array): An array of rental details including the product and time slots.</p>\n<ul>\n<li><p>product (string): The ID of the product being rented.</p>\n</li>\n<li><p>timeSlots (array): An array of time slot IDs.</p>\n</li>\n</ul>\n</li>\n<li><p>paymentMethod (string): The method of payment.</p>\n</li>\n<li><p>isPaid (boolean): Indicates if the booking is paid.</p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The response will be a JSON object with the following schema:</p>\n<ul>\n<li><p>customerName (string): The name of the customer.</p>\n</li>\n<li><p>date (string): The date of the booking.</p>\n</li>\n<li><p>rentals (array): An array of rental details including the product, time slots, and a unique ID.</p>\n<ul>\n<li><p>product (string): The ID of the product being rented.</p>\n</li>\n<li><p>timeSlots (array): An array of time slot IDs.</p>\n</li>\n<li><p>_id (string): The unique ID of the rental.</p>\n</li>\n</ul>\n</li>\n<li><p>paymentMethod (string): The method of payment.</p>\n</li>\n<li><p>isPaid (boolean): Indicates if the booking is paid.</p>\n</li>\n<li><p>_id (string): The unique ID of the booking.</p>\n</li>\n<li><p>createdAt (string): The timestamp of when the booking was created.</p>\n</li>\n<li><p>total (number): The total amount of the booking.</p>\n</li>\n<li><p>__v (number): Version key for internal use.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","bookings","create"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"5cddca40-a784-48f9-9a18-26cef3fbe6bc","name":"Create Booking","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"customerName\": \"Alice Smith\",\n  \"date\": \"2025-05-04\",\n  \"rentals\": [\n    {\n      \"product\": \"6813f67d8a3fc8a2fea66fdf\",\n      \"timeSlots\": [\n        \"68125fa41b57da2d5b54194a\",\n        \"68129f79e881da6514e81146\"\n      ]\n    },\n    {\n      \"product\": \"6810d671e7112ffff7f85317\",\n      \"timeSlots\": [\n        \"68125fa41b57da2d5b54194a\"\n      ]\n    }\n  ],\n  \"paymentMethod\": \"cash\",\n  \"isPaid\": false\n}\n\n","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/bookings/create"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"458"},{"key":"ETag","value":"W/\"1ca-J2TFsLqfPPZjRHgNc2zXxlBGTdE\""},{"key":"Date","value":"Fri, 02 May 2025 22:07:18 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"customerName\": \"Alice Smith\",\n    \"date\": \"2025-05-04T00:00:00.000Z\",\n    \"rentals\": [\n        {\n            \"product\": \"6813f67d8a3fc8a2fea66fdf\",\n            \"timeSlots\": [\n                \"68125fa41b57da2d5b54194a\",\n                \"68129f79e881da6514e81146\"\n            ],\n            \"_id\": \"68154216ac17fc3f4575fd70\"\n        },\n        {\n            \"product\": \"6810d671e7112ffff7f85317\",\n            \"timeSlots\": [\n                \"68125fa41b57da2d5b54194a\"\n            ],\n            \"_id\": \"68154216ac17fc3f4575fd71\"\n        }\n    ],\n    \"paymentMethod\": \"cash\",\n    \"isPaid\": false,\n    \"_id\": \"68154216ac17fc3f4575fd6f\",\n    \"createdAt\": \"2025-05-02T22:07:18.749Z\",\n    \"total\": 81,\n    \"__v\": 0\n}"}],"_postman_id":"2305af48-7ed1-4ebf-993d-7d00815b87f5"}],"id":"1016fe5b-e012-4918-bde1-9a3a8948d314","_postman_id":"1016fe5b-e012-4918-bde1-9a3a8948d314","description":""},{"name":"Products","item":[{"name":"List Products","id":"af4914c7-1735-4fa8-9a5e-aa35d614d052","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/v1/products/","description":"<p>This endpoint sends an HTTP GET request to retrieve a list of products from the server. The response of this request can be documented as a JSON schema.</p>\n<p>The response will consist of an array of product objects, where each object will contain properties such as product ID, name, description, price, and any other relevant details about the products.</p>\n<p>The JSON schema for the response will define the structure of the product object, including the data types and formats of each property, as well as any required or optional fields.</p>\n<p>For example:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"productId\": {\n        \"type\": \"string\"\n      },\n      \"name\": {\n        \"type\": \"string\"\n      },\n      \"description\": {\n        \"type\": \"string\"\n      },\n      \"price\": {\n        \"type\": \"number\"\n      }\n      // ... other properties\n    },\n    \"required\": [\"productId\", \"name\", \"price\"]\n  }\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","products",""],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"4c766a90-ffd4-403e-81e9-8bbe50f3e816","name":"List Products","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/v1/products/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1870"},{"key":"ETag","value":"W/\"74e-RvW8gkWbx7Gdt0pvm1NLrTuQjXg\""},{"key":"Date","value":"Fri, 02 May 2025 22:22:27 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"products\": [\n        {\n            \"_id\": \"6810d671e7112ffff7f85317\",\n            \"name\": \"JetSki\",\n            \"category\": \"vehicle\",\n            \"requiresHelmet\": true,\n            \"requiresLifeJacket\": true,\n            \"capacity\": 2,\n            \"durationPerSlot\": 30,\n            \"isForKids\": false,\n            \"__v\": 0,\n            \"inventaryQuantity\": 5,\n            \"maxDurationConsecutive\": 90,\n            \"maxReserveAnticipation\": 48,\n            \"minReserveAnticipation\": 2,\n            \"price\": 50\n        },\n        {\n            \"maxDurationConsecutive\": 90,\n            \"minReserveAnticipation\": 2,\n            \"maxReserveAnticipation\": 48,\n            \"inventaryQuantity\": 5,\n            \"price\": 0,\n            \"_id\": \"6810d92661e6fd50824e6229\",\n            \"name\": \"Cuatriciclo\",\n            \"category\": \"vehicle\",\n            \"requiresHelmet\": true,\n            \"requiresLifeJacket\": false,\n            \"capacity\": 2,\n            \"durationPerSlot\": 30,\n            \"isForKids\": false,\n            \"__v\": 0\n        },\n        {\n            \"price\": 0,\n            \"_id\": \"6813f6708a3fc8a2fea66fdd\",\n            \"name\": \"Equipo de buceo\",\n            \"category\": \"equipment\",\n            \"requiresHelmet\": false,\n            \"requiresLifeJacket\": false,\n            \"capacity\": 1,\n            \"durationPerSlot\": 30,\n            \"maxDurationConsecutive\": 90,\n            \"minReserveAnticipation\": 2,\n            \"maxReserveAnticipation\": 48,\n            \"isForKids\": false,\n            \"inventaryQuantity\": 5,\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813f67d8a3fc8a2fea66fdf\",\n            \"name\": \"Tabla de surf (niños)\",\n            \"category\": \"equipment\",\n            \"requiresHelmet\": false,\n            \"requiresLifeJacket\": false,\n            \"capacity\": 1,\n            \"durationPerSlot\": 30,\n            \"maxDurationConsecutive\": 90,\n            \"minReserveAnticipation\": 2,\n            \"maxReserveAnticipation\": 48,\n            \"isForKids\": true,\n            \"inventaryQuantity\": 5,\n            \"__v\": 0,\n            \"price\": 20\n        },\n        {\n            \"price\": 0,\n            \"_id\": \"6813f6908a3fc8a2fea66fe1\",\n            \"name\": \"Tablas de surf (adultos)\",\n            \"category\": \"equipment\",\n            \"requiresHelmet\": false,\n            \"requiresLifeJacket\": false,\n            \"capacity\": 1,\n            \"durationPerSlot\": 60,\n            \"maxDurationConsecutive\": 90,\n            \"minReserveAnticipation\": 2,\n            \"maxReserveAnticipation\": 48,\n            \"isForKids\": false,\n            \"inventaryQuantity\": 5,\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6814c4e7db10a196b7723999\",\n            \"name\": \"Tablas de surf 2 (adultos)\",\n            \"category\": \"equipment\",\n            \"requiresHelmet\": false,\n            \"requiresLifeJacket\": false,\n            \"capacity\": 1,\n            \"durationPerSlot\": 60,\n            \"maxDurationConsecutive\": 90,\n            \"minReserveAnticipation\": 2,\n            \"maxReserveAnticipation\": 48,\n            \"isForKids\": false,\n            \"inventaryQuantity\": 5,\n            \"price\": 0,\n            \"__v\": 0\n        }\n    ]\n}"}],"_postman_id":"af4914c7-1735-4fa8-9a5e-aa35d614d052"},{"name":"Create Product","id":"08d85d1b-1e00-49e4-a120-4fb9243226eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Tablas de surf 2 (adultos)\",\n    \"category\": \"equipment\",\n    \"requiresHelmet\": false,\n    \"requiresLifeJacket\": false,\n    \"capacity\": 1,\n    \"durationPerSlot\": 60,\n    \"maxDurationConsecutive\": 90,\n    \"minReserveAnticipation\": 2,\n    \"maxReserveAnticipation\": 48,\n    \"inventaryQuantity\": 5,\n    \"isForKids\": false\n  }","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/products/create","description":"<h3 id=\"create-product\">Create Product</h3>\n<p>This endpoint allows the creation of a new product in the system.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: POST</p>\n</li>\n<li><p>URL: <code>http://localhost:5000/api/v1/products/create</code></p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p><code>name</code>: (string) The name of the product.</p>\n</li>\n<li><p><code>category</code>: (string) The category of the product.</p>\n</li>\n<li><p><code>requiresHelmet</code>: (boolean) Indicates if the product requires a helmet.</p>\n</li>\n<li><p><code>requiresLifeJacket</code>: (boolean) Indicates if the product requires a life jacket.</p>\n</li>\n<li><p><code>capacity</code>: (number) The capacity of the product.</p>\n</li>\n<li><p><code>durationPerSlot</code>: (number) The duration per slot for the product.</p>\n</li>\n<li><p><code>maxDurationConsecutive</code>: (number) The maximum consecutive duration for the product.</p>\n</li>\n<li><p><code>minReserveAnticipation</code>: (number) The minimum reservation anticipation for the product.</p>\n</li>\n<li><p><code>maxReserveAnticipation</code>: (number) The maximum reservation anticipation for the product.</p>\n</li>\n<li><p><code>inventaryQuantity</code>: (number) The quantity available in inventory for the product.</p>\n</li>\n<li><p><code>isForKids</code>: (boolean) Indicates if the product is for kids.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>The response for this request will be a JSON object conforming to the following schema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"productId\": {\n      \"type\": \"string\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"category\": {\n      \"type\": \"string\"\n    },\n    \"requiresHelmet\": {\n      \"type\": \"boolean\"\n    },\n    \"requiresLifeJacket\": {\n      \"type\": \"boolean\"\n    },\n    \"capacity\": {\n      \"type\": \"number\"\n    },\n    \"durationPerSlot\": {\n      \"type\": \"number\"\n    },\n    \"maxDurationConsecutive\": {\n      \"type\": \"number\"\n    },\n    \"minReserveAnticipation\": {\n      \"type\": \"number\"\n    },\n    \"maxReserveAnticipation\": {\n      \"type\": \"number\"\n    },\n    \"inventaryQuantity\": {\n      \"type\": \"number\"\n    },\n    \"isForKids\": {\n      \"type\": \"boolean\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","products","create"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"7f731ddb-6c6a-434d-9e2d-b2b5a966a9cb","name":"Create Product","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Tablas de surf 2 (adultos)\",\n    \"category\": \"equipment\",\n    \"requiresHelmet\": false,\n    \"requiresLifeJacket\": false,\n    \"capacity\": 1,\n    \"durationPerSlot\": 60,\n    \"maxDurationConsecutive\": 90,\n    \"minReserveAnticipation\": 2,\n    \"maxReserveAnticipation\": 48,\n    \"inventaryQuantity\": 5,\n    \"isForKids\": false\n  }","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/products/create"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"358"},{"key":"ETag","value":"W/\"166-o2+MnXQlckEXWjghZqjP9gobNX8\""},{"key":"Date","value":"Fri, 02 May 2025 22:22:37 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Product created\",\n    \"product\": {\n        \"name\": \"Tablas de surf 2 (adultos)\",\n        \"category\": \"equipment\",\n        \"requiresHelmet\": false,\n        \"requiresLifeJacket\": false,\n        \"capacity\": 1,\n        \"durationPerSlot\": 60,\n        \"maxDurationConsecutive\": 90,\n        \"minReserveAnticipation\": 2,\n        \"maxReserveAnticipation\": 48,\n        \"isForKids\": false,\n        \"inventaryQuantity\": 5,\n        \"price\": 0,\n        \"_id\": \"681545adac17fc3f4575fd76\",\n        \"__v\": 0\n    }\n}"}],"_postman_id":"08d85d1b-1e00-49e4-a120-4fb9243226eb"},{"name":"Update Product","id":"73cb852e-1ecd-4839-992c-45b6f7f69044","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"price\": 20,\n    \"name\": \"Tabla de surf (niños)\",\n    \"category\": \"equipment\",\n    \"requiresHelmet\": false,\n    \"requiresLifeJacket\": false,\n    \"capacity\": 1,\n    \"durationPerSlot\": 30,\n    \"maxDurationConsecutive\": 90,\n    \"minReserveAnticipation\": 2,\n    \"maxReserveAnticipation\": 48,\n    \"isForKids\": true,\n    \"inventaryQuantity\": 5\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/products/6813f67d8a3fc8a2fea66fdf/update","description":"<h3 id=\"update-product-details\">Update Product Details</h3>\n<p>This endpoint allows the client to update the details of a specific product.</p>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>price</code> (number): The updated price of the product.</p>\n</li>\n<li><p><code>name</code> (string): The updated name of the product.</p>\n</li>\n<li><p><code>category</code> (string): The updated category of the product.</p>\n</li>\n<li><p><code>requiresHelmet</code> (boolean): Indicates whether the product requires a helmet for use.</p>\n</li>\n<li><p><code>requiresLifeJacket</code> (boolean): Indicates whether the product requires a life jacket for use.</p>\n</li>\n<li><p><code>capacity</code> (number): The updated capacity of the product.</p>\n</li>\n<li><p><code>durationPerSlot</code> (number): The updated duration per slot for the product.</p>\n</li>\n<li><p><code>maxDurationConsecutive</code> (number): The maximum consecutive duration for the product's use.</p>\n</li>\n<li><p><code>minReserveAnticipation</code> (number): The minimum anticipation for making a reservation.</p>\n</li>\n<li><p><code>maxReserveAnticipation</code> (number): The maximum anticipation for making a reservation.</p>\n</li>\n<li><p><code>isForKids</code> (boolean): Indicates whether the product is for kids.</p>\n</li>\n<li><p><code>inventaryQuantity</code> (number): The updated inventory quantity of the product.</p>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>The response for this request will be a JSON object conforming to the following schema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"message\": {\n      \"type\": \"string\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","products","6813f67d8a3fc8a2fea66fdf","update"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"b6683b2d-57b8-4729-9cd4-30dd3a75d66d","name":"Update Product","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"price\": 20,\n    \"name\": \"Tabla de surf (niños)\",\n    \"category\": \"equipment\",\n    \"requiresHelmet\": false,\n    \"requiresLifeJacket\": false,\n    \"capacity\": 1,\n    \"durationPerSlot\": 30,\n    \"maxDurationConsecutive\": 90,\n    \"minReserveAnticipation\": 2,\n    \"maxReserveAnticipation\": 48,\n    \"isForKids\": true,\n    \"inventaryQuantity\": 5\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/products/6813f67d8a3fc8a2fea66fdf/update"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"354"},{"key":"ETag","value":"W/\"162-xQakQ4E9m8j37QNFDeM71ysmS1M\""},{"key":"Date","value":"Fri, 02 May 2025 22:22:55 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Product updated\",\n    \"product\": {\n        \"_id\": \"6813f67d8a3fc8a2fea66fdf\",\n        \"name\": \"Tabla de surf (niños)\",\n        \"category\": \"equipment\",\n        \"requiresHelmet\": false,\n        \"requiresLifeJacket\": false,\n        \"capacity\": 1,\n        \"durationPerSlot\": 30,\n        \"maxDurationConsecutive\": 90,\n        \"minReserveAnticipation\": 2,\n        \"maxReserveAnticipation\": 48,\n        \"isForKids\": true,\n        \"inventaryQuantity\": 5,\n        \"__v\": 0,\n        \"price\": 20\n    }\n}"}],"_postman_id":"73cb852e-1ecd-4839-992c-45b6f7f69044"},{"name":"Delete Product","id":"63ea8812-b2d3-4ddc-b168-56960c9a02ea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:5000/api/v1/products/6813f67d8a3fc8a2fea66fdf/delete","description":"<h3 id=\"delete-product\">Delete Product</h3>\n<p>This endpoint is used to delete a specific product.</p>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>No request body is required for this request.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>The response for this request is a JSON object with the following schema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"string\"\n}\n\n</code></pre>\n<ul>\n<li><code>message</code>: a string indicating the result of the delete operation.</li>\n</ul>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","products","6813f67d8a3fc8a2fea66fdf","delete"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"18789915-2cee-4a99-959a-1690ba141eff","name":"Delete Product","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:5000/api/v1/products/6813f67d8a3fc8a2fea66fdf/delete"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"374"},{"key":"ETag","value":"W/\"176-T5k7HgHCuvpXB3398iDy2MdVDm0\""},{"key":"Date","value":"Fri, 02 May 2025 22:23:39 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Product deleted successfully\",\n    \"deletedProduct\": {\n        \"_id\": \"6813f67d8a3fc8a2fea66fdf\",\n        \"name\": \"Tabla de surf (niños)\",\n        \"category\": \"equipment\",\n        \"requiresHelmet\": false,\n        \"requiresLifeJacket\": false,\n        \"capacity\": 1,\n        \"durationPerSlot\": 30,\n        \"maxDurationConsecutive\": 90,\n        \"minReserveAnticipation\": 2,\n        \"maxReserveAnticipation\": 48,\n        \"isForKids\": true,\n        \"inventaryQuantity\": 5,\n        \"__v\": 0,\n        \"price\": 20\n    }\n}"}],"_postman_id":"63ea8812-b2d3-4ddc-b168-56960c9a02ea"}],"id":"596c0f86-25ee-4fba-b08d-ee7ac3cd01c9","_postman_id":"596c0f86-25ee-4fba-b08d-ee7ac3cd01c9","description":""},{"name":"TimeSlots","item":[{"name":"List Timeslots","id":"3a6cc1b3-66e0-4b97-887f-e8ffce21ecd8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/v1/timeslots","description":"<p>This endpoint retrieves a list of timeslots available for scheduling. The response is in JSON format and can be documented as a JSON schema.</p>\n<p>The response schema for this endpoint can be documented as follows:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"timeslotId\": {\n        \"type\": \"string\"\n      },\n      \"startTime\": {\n        \"type\": \"string\",\n        \"format\": \"date-time\"\n      },\n      \"endTime\": {\n        \"type\": \"string\",\n        \"format\": \"date-time\"\n      },\n      \"availableCapacity\": {\n        \"type\": \"integer\"\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","timeslots"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"cf0c2784-f2bb-44bc-931c-dde11d50be94","name":"List Timeslots","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/v1/timeslots"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1716"},{"key":"ETag","value":"W/\"6b4-hu/GPIZCqZWv/ItM5N5rPinZwUs\""},{"key":"Date","value":"Fri, 02 May 2025 22:24:20 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"TimeSlots\": [\n        {\n            \"_id\": \"68125edfa3758254d77e48a2\",\n            \"startTime\": \"08:00\",\n            \"endTime\": \"08:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813f8b28a3fc8a2fea66fec\",\n            \"startTime\": \"08:30\",\n            \"endTime\": \"09:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"68125fa41b57da2d5b54194a\",\n            \"startTime\": \"09:00\",\n            \"endTime\": \"09:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813f9aac8b074500bc09280\",\n            \"startTime\": \"09:30\",\n            \"endTime\": \"10:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"68129f79e881da6514e81146\",\n            \"startTime\": \"10:00\",\n            \"endTime\": \"10:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fa4ec8b074500bc09284\",\n            \"startTime\": \"10:30\",\n            \"endTime\": \"11:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"68129fd0e881da6514e81147\",\n            \"startTime\": \"11:00\",\n            \"endTime\": \"11:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fa62c8b074500bc09287\",\n            \"startTime\": \"11:30\",\n            \"endTime\": \"12:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fa77c8b074500bc0928a\",\n            \"startTime\": \"12:00\",\n            \"endTime\": \"12:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fa84c8b074500bc0928c\",\n            \"startTime\": \"12:30\",\n            \"endTime\": \"13:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fa8ec8b074500bc0928e\",\n            \"startTime\": \"13:00\",\n            \"endTime\": \"13:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fa9cc8b074500bc09290\",\n            \"startTime\": \"13:30\",\n            \"endTime\": \"14:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813faa9c8b074500bc09292\",\n            \"startTime\": \"14:00\",\n            \"endTime\": \"14:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fac7c8b074500bc09295\",\n            \"startTime\": \"14:30\",\n            \"endTime\": \"15:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fad3c8b074500bc09297\",\n            \"startTime\": \"15:00\",\n            \"endTime\": \"15:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fae0c8b074500bc09299\",\n            \"startTime\": \"15:30\",\n            \"endTime\": \"16:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813faedc8b074500bc0929b\",\n            \"startTime\": \"16:00\",\n            \"endTime\": \"16:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fb09c8b074500bc0929e\",\n            \"startTime\": \"16:30\",\n            \"endTime\": \"17:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fb1ec8b074500bc092a0\",\n            \"startTime\": \"17:00\",\n            \"endTime\": \"17:30\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"6813fb29c8b074500bc092a2\",\n            \"startTime\": \"17:30\",\n            \"endTime\": \"18:00\",\n            \"__v\": 0\n        },\n        {\n            \"_id\": \"68154607ac17fc3f4575fd7c\",\n            \"startTime\": \"18:00\",\n            \"endTime\": \"18:30\",\n            \"__v\": 0\n        }\n    ]\n}"}],"_postman_id":"3a6cc1b3-66e0-4b97-887f-e8ffce21ecd8"},{"name":"Create Timeslot","id":"8647194e-3d95-471b-a4ad-7f35cd2e47ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"startTime\": \"18:00\",\n    \"endTime\": \"18:30\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/timeslots/create","description":"<h3 id=\"create-time-slot\">Create Time Slot</h3>\n<p>This endpoint allows the creation of a new time slot.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: POST</p>\n</li>\n<li><p>URL: <code>http://localhost:5000/api/v1/timeslots/create</code></p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>startTime (string, required): The start time of the time slot.</p>\n</li>\n<li><p>endTime (string, required): The end time of the time slot.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>The response for this request is a JSON object conforming to the following schema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\"\n    },\n    \"startTime\": {\n      \"type\": \"string\"\n    },\n    \"endTime\": {\n      \"type\": \"string\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"5000","path":["api","v1","timeslots","create"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"f2a563da-41d2-447a-ab1d-5f3eca3f200a","name":"Create Timeslot","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"startTime\": \"18:00\",\n    \"endTime\": \"18:30\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/v1/timeslots/create"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"80"},{"key":"ETag","value":"W/\"50-ofkLR7SLlT6pgz0TgwbtsccUsJY\""},{"key":"Date","value":"Fri, 02 May 2025 22:24:08 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"startTime\": \"18:00\",\n    \"endTime\": \"18:30\",\n    \"_id\": \"68154607ac17fc3f4575fd7c\",\n    \"__v\": 0\n}"}],"_postman_id":"8647194e-3d95-471b-a4ad-7f35cd2e47ef"}],"id":"b9635477-08cd-459c-bab6-4da4a4a2ff11","_postman_id":"b9635477-08cd-459c-bab6-4da4a4a2ff11","description":""}],"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"variable":[{"key":"id","value":"1"},{"key":"base_url","value":"https://postman-rest-api-learner.glitch.me/"}]}