{"info":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","description":"<html><head></head><body><h1 id=\"ironwifi-rest-api\">IronWiFi REST API</h1>\n<p>The IronWiFi REST API allows you to programmatically manage WiFi networks, users, devices, and more.</p>\n<h2 id=\"quick-start\">Quick Start</h2>\n<ol>\n<li><strong>Set your API token</strong>: Go to IronWiFi Console &gt; Account &gt; API Keys to generate a token</li>\n<li><strong>Configure environment</strong>: Set <code>auth_bearer_token</code> in your Postman environment</li>\n<li><strong>Select region</strong>: Update <code>baseUrl</code> subdomain for your region (default: console.ironwifi.io)</li>\n</ol>\n<h2 id=\"authentication\">Authentication</h2>\n<p>All requests use Bearer token authentication:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer {your_api_token}\n</code></pre><h2 id=\"common-operations\">Common Operations</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Task</th>\n<th>Endpoint</th>\n<th>Method</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>List all users</td>\n<td><code>/users</code></td>\n<td>GET</td>\n</tr>\n<tr>\n<td>Create a user</td>\n<td><code>/users</code></td>\n<td>POST</td>\n</tr>\n<tr>\n<td>Get authentication logs</td>\n<td><code>/reports/110</code></td>\n<td>GET</td>\n</tr>\n<tr>\n<td>Create a voucher</td>\n<td><code>/vouchers</code></td>\n<td>POST</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response-format\">Response Format</h2>\n<p>Responses use HAL+JSON format with:</p>\n<ul>\n<li><code>_embedded</code>: Contains the resource data</li>\n<li><code>_links</code>: Navigation links (self, next, prev)</li>\n<li><code>total_items</code>, <code>page</code>, <code>page_size</code>: Pagination info</li>\n</ul>\n<h2 id=\"regions\">Regions</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Region</th>\n<th>Base URL</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Global (default)</td>\n<td><code>console.ironwifi.io</code></td>\n</tr>\n<tr>\n<td>Europe West</td>\n<td><code>europe-west1.ironwifi.io</code></td>\n</tr>\n<tr>\n<td>US Central</td>\n<td><code>us-central1.ironwifi.io</code></td>\n</tr>\n<tr>\n<td>Asia Pacific</td>\n<td><code>asia-southeast1.ironwifi.io</code></td>\n</tr>\n<tr>\n<td>Australia</td>\n<td><code>australia-southeast1.ironwifi.io</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>See full region list in the collection description.</p>\n<h2 id=\"error-codes\">Error Codes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>400</td>\n<td>Bad Request - Check your request syntax</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Unauthorized - Invalid or missing API token</td>\n</tr>\n<tr>\n<td>403</td>\n<td>Forbidden - Insufficient permissions</td>\n</tr>\n<tr>\n<td>404</td>\n<td>Not Found - Resource doesn't exist</td>\n</tr>\n<tr>\n<td>422</td>\n<td>Validation Error - Check required fields</td>\n</tr>\n<tr>\n<td>429</td>\n<td>Rate Limited - Too many requests</td>\n</tr>\n<tr>\n<td>500</td>\n<td>Server Error - Contact support</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"rate-limits\">Rate Limits</h2>\n<ul>\n<li>100 requests per minute per API key</li>\n<li>Bulk operations have additional limits</li>\n</ul>\n<h2 id=\"support\">Support</h2>\n<ul>\n<li>Email: <a href=\"mailto:support@ironwifi.com\">support@ironwifi.com</a></li>\n<li>Schedule a call: <a href=\"https://meetings.ironwifi.com\">https://meetings.ironwifi.com</a></li>\n<li>Documentation: <a href=\"https://www.ironwifi.com/documentation/\">https://www.ironwifi.com/documentation/</a></li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"IronWiFi REST API","slug":"ironwifi-rest-api"}],"owner":"326693","collectionId":"503cc635-74a4-4602-8f97-d854eea0bd29","publishedId":"2sB3dQwVZe","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-12-10T06:07:43.000Z"},"item":[{"name":"Workflow Examples","item":[{"name":"1. Create User Workflow","item":[{"name":"1.1 Create Group","event":[{"listen":"test","script":{"exec":["pm.test('Group created successfully', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});","","if (pm.response.code === 201 || pm.response.code === 200) {","    const data = pm.response.json();","    pm.collectionVariables.set('workflow_group_id', data.id);","    console.log('Created group:', data.id);","}"],"type":"text/javascript","id":"c1d42d65-dab7-43ca-b7a5-7db09a5a1f9b"}}],"id":"536ea4ec-bae4-4ffd-8581-6aad2036533b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Workflow Test Group\",\n    \"comment\": \"Created by workflow example\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/user-groups","description":"<p>Creates a new user group to organize RADIUS users. Groups can have shared attributes and policies.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["user-groups"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"9092b72e-c13d-4948-919a-195ba7f14997","name":"1.1 Create Group","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Workflow Test Group\",\n    \"comment\": \"Created by workflow example\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/user-groups","description":"Creates a new user group to organize RADIUS users. Groups can have shared attributes and policies."},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"81d7b4ea-e46c-4081-8d1f-e91e993c79ba\",\n  \"name\": \"Workflow Test Group\",\n  \"comment\": \"Created by workflow example\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/user-groups/{id}\"\n    }\n  }\n}"}],"_postman_id":"536ea4ec-bae4-4ffd-8581-6aad2036533b"},{"name":"1.2 Create User in Group","event":[{"listen":"test","script":{"exec":["pm.test('User created successfully', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});","","if (pm.response.code === 201 || pm.response.code === 200) {","    const data = pm.response.json();","    pm.collectionVariables.set('workflow_user_id', data.id);","    console.log('Created user:', data.id);","}"],"type":"text/javascript","id":"6ce6e7b9-0720-4fe7-8ac1-3f00cb4471e0"}}],"id":"ffd348a7-ceda-4ab4-8f4a-55ff0407a7d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"workflow-test-user@example.com\",\n    \"password\": \"SecurePassword123!\",\n    \"group_id\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"<p>Creates a RADIUS user and assigns them to the previously created group.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"7d35d8ed-4b40-4a30-9ecd-7f349d4282e8","name":"1.2 Create User in Group","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"workflow-test-user@example.com\",\n    \"password\": \"SecurePassword123!\",\n    \"group_id\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"Creates a RADIUS user and assigns them to the previously created group."},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"e65c3f9a-a520-4ccc-92f6-7b5e8f46159c\",\n  \"username\": \"workflow-test-user@example.com\",\n  \"group_id\": \"6ca646c9-3a67-49c6-9f48-c7451ec385eb\",\n  \"disabled\": 0,\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/users/{id}\"\n    }\n  }\n}"}],"_postman_id":"ffd348a7-ceda-4ab4-8f4a-55ff0407a7d1"},{"name":"1.3 Verify User","event":[{"listen":"test","script":{"exec":["pm.test('User retrieved successfully', function () {","    pm.expect(pm.response.code).to.equal(200);","});","","pm.test('User has correct group', function () {","    const data = pm.response.json();","    pm.expect(data.group_id).to.equal(pm.collectionVariables.get('workflow_group_id'));","});"],"type":"text/javascript","id":"f28949da-6694-40e7-a155-302b59076cf9"}}],"id":"9bebf1cc-f9b6-4abd-8f08-4fe585c83eea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/users/","description":"<p>Retrieves the created user to verify all properties were set correctly.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"ef2c5ac3-a864-4ca8-8688-8b6fdbd44c6c","name":"1.3 Verify User","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/users/","description":"Retrieves the created user to verify all properties were set correctly."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"9f61790f-82c3-410b-b067-9e78490d309a\",\n  \"username\": \"workflow-test-user@example.com\",\n  \"group_id\": \"7ba98438-35b1-4660-a65b-51307c72aa4e\",\n  \"disabled\": 0,\n  \"created\": \"2025-12-10T04:51:11Z\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/users/{id}\"\n    }\n  }\n}"}],"_postman_id":"9bebf1cc-f9b6-4abd-8f08-4fe585c83eea"},{"name":"1.4 Cleanup - Delete User","event":[{"listen":"test","script":{"exec":["pm.test('User deleted successfully', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 204]);","});"],"type":"text/javascript","id":"3bf41bf8-f151-41ce-b4d0-8d5292932e19"}}],"id":"528e5f0e-62f9-4f88-9a56-36b927142ea0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/users/","description":"<p>Removes the test user. In production, this would deactivate their network access.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"92e486bd-2d8c-46b2-9623-ed548dd518b2","name":"1.4 Cleanup - Delete User","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/users/","description":"Removes the test user. In production, this would deactivate their network access."},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"528e5f0e-62f9-4f88-9a56-36b927142ea0"},{"name":"1.5 Cleanup - Delete Group","event":[{"listen":"test","script":{"exec":["pm.test('Group deleted successfully', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 204]);","});"],"type":"text/javascript","id":"e1f4812e-e05e-4225-aaf4-2f51b286b0cd"}}],"id":"e919d910-0786-4f34-b068-f54ef2535b53","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/user-groups/","description":"<p>Removes the test group. Groups cannot be deleted if they contain users.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["user-groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"146accac-ebb4-4adb-87b2-9f1d5d766ad7","name":"1.5 Cleanup - Delete Group","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/user-groups/","description":"Removes the test group. Groups cannot be deleted if they contain users."},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"e919d910-0786-4f34-b068-f54ef2535b53"}],"id":"fcddd2a1-5acb-4794-9c0c-edb829883fb1","description":"<p>Complete workflow to create a user group, add a user to it, verify the user, and clean up.</p>\n","_postman_id":"fcddd2a1-5acb-4794-9c0c-edb829883fb1","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"2. Voucher Generation Workflow","item":[{"name":"2.1 Create Voucher Series","event":[{"listen":"test","script":{"exec":["pm.test('Vouchers created successfully', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);","});","","const data = pm.response.json();","if (data.series) {","    pm.collectionVariables.set('workflow_voucher_series', data.series);","    console.log('Created voucher series:', data.series);","}"],"type":"text/javascript","id":"a6f86815-dbcc-4f74-9dcf-b6267ac88b45"}}],"id":"c63933f6-1a27-4bac-b6dc-516e9a5baadc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"quantity\": 5,\n    \"validity_hours\": 24,\n    \"bandwidth_limit_down\": 10000000,\n    \"bandwidth_limit_up\": 5000000,\n    \"comment\": \"API Test Vouchers\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers","description":"<p>Generates a batch of vouchers with specified validity and bandwidth limits.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"c3d5d791-7c37-4074-a389-a2f768cf42bc","name":"2.1 Create Voucher Series","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"quantity\": 5,\n    \"validity_hours\": 24,\n    \"bandwidth_limit_down\": 10000000,\n    \"bandwidth_limit_up\": 5000000,\n    \"comment\": \"API Test Vouchers\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers","description":"Generates a batch of vouchers with specified validity and bandwidth limits."},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"series\": \"VS-47865626\",\n  \"quantity\": 5,\n  \"vouchers\": [\n    {\n      \"code\": \"ABCD-1234-EFGH\",\n      \"status\": \"unused\"\n    },\n    {\n      \"code\": \"IJKL-5678-MNOP\",\n      \"status\": \"unused\"\n    },\n    {\n      \"code\": \"QRST-9012-UVWX\",\n      \"status\": \"unused\"\n    },\n    {\n      \"code\": \"YZAB-3456-CDEF\",\n      \"status\": \"unused\"\n    },\n    {\n      \"code\": \"GHIJ-7890-KLMN\",\n      \"status\": \"unused\"\n    }\n  ]\n}"}],"_postman_id":"c63933f6-1a27-4bac-b6dc-516e9a5baadc"},{"name":"2.2 List Vouchers in Series","event":[{"listen":"test","script":{"exec":["pm.test('Vouchers retrieved successfully', function () {","    pm.expect(pm.response.code).to.equal(200);","});","","pm.test('Correct number of vouchers', function () {","    const data = pm.response.json();","    pm.expect(data.total_items).to.be.at.least(5);","});"],"type":"text/javascript","id":"079dcc09-6c38-4143-992c-e72517c7e891"}}],"id":"971d6db2-6781-4f27-9c11-47124fb64cfc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers?filter=series:","description":"<p>Retrieves all vouchers in the created series to verify generation.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":"series:"}],"variable":[]}},"response":[{"id":"261418f1-159b-4582-ac9c-7f446dd0efbe","name":"2.2 List Vouchers in Series","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/vouchers?filter=series:","host":["{{baseUrl}}"],"path":["vouchers"],"query":[{"key":"filter","value":"series:","description":"Filter expression (e.g., name:value, status:active)"}]},"description":"Retrieves all vouchers in the created series to verify generation."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"vouchers\": [\n      {\n        \"id\": \"ffda52b4-7efc-4612-9d6b-84a6e75755c3\",\n        \"code\": \"ABCD-1234-EFGH\",\n        \"status\": \"unused\",\n        \"validity_hours\": 24\n      },\n      {\n        \"id\": \"bb592ff6-7254-49f5-98df-940dafc96350\",\n        \"code\": \"IJKL-5678-MNOP\",\n        \"status\": \"unused\",\n        \"validity_hours\": 24\n      }\n    ]\n  },\n  \"total_items\": 5,\n  \"page\": 1,\n  \"page_size\": 25\n}"}],"_postman_id":"971d6db2-6781-4f27-9c11-47124fb64cfc"},{"name":"2.3 Delete Voucher Series","event":[{"listen":"test","script":{"exec":["pm.test('Voucher series deleted', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 204]);","});"],"type":"text/javascript","id":"e49d4520-bb42-4098-b73a-ab1a158a1d24"}}],"id":"536e8f8a-aefe-4792-8f40-63e4c8e1e24c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers?series=","description":"<p>Bulk deletes all vouchers in a series. Useful for cleanup or expiring unused vouchers.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Voucher series/batch identifier</p>\n","type":"text/plain"},"key":"series","value":""}],"variable":[]}},"response":[{"id":"66d74004-6813-490b-9504-18cc3ba45425","name":"2.3 Delete Voucher Series","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"{{baseUrl}}/vouchers?series=","host":["{{baseUrl}}"],"path":["vouchers"],"query":[{"key":"series","value":"","description":"Voucher series/batch identifier"}]},"description":"Bulk deletes all vouchers in a series. Useful for cleanup or expiring unused vouchers."},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"536e8f8a-aefe-4792-8f40-63e4c8e1e24c"}],"id":"27ef59e0-2915-44c8-87f6-eaa426c6df6e","description":"<p>Generate a batch of vouchers and manage them.</p>\n","_postman_id":"27ef59e0-2915-44c8-87f6-eaa426c6df6e","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"3. Reports Workflow","item":[{"name":"3.1 Get Auth Logs (Last 24h)","event":[{"listen":"test","script":{"exec":["pm.test('Report retrieved successfully', function () {","    pm.expect(pm.response.code).to.equal(200);","});","","pm.test('Report has data structure', function () {","    const data = pm.response.json();","    pm.expect(data).to.have.any.keys('_embedded', 'total_items', 'rows');","});"],"type":"text/javascript","id":"c04092ad-8da9-4e0a-8bea-1618c3d081a5"}}],"id":"5463e912-f192-4d09-8b27-1f51b20dd864","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/reports/110?earliest=-24h&latest=now&page=1&page_size=100","description":"<p>Retrieves RADIUS authentication logs for the last 24 hours. Shows login attempts, successes, and failures.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports","110"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Start time for reports (-7d, -24h, or ISO date)</p>\n","type":"text/plain"},"key":"earliest","value":"-24h"},{"description":{"content":"<p>End time for reports (now, -1h, or ISO date)</p>\n","type":"text/plain"},"key":"latest","value":"now"},{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"100"}],"variable":[]}},"response":[{"id":"323404b9-4b26-41ad-a62f-78bfeafad511","name":"3.1 Get Auth Logs (Last 24h)","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/reports/110?earliest=-24h&latest=now&page=1&page_size=100","host":["{{baseUrl}}"],"path":["reports","110"],"query":[{"key":"earliest","value":"-24h","description":"Start time for reports (-7d, -24h, or ISO date)"},{"key":"latest","value":"now","description":"End time for reports (now, -1h, or ISO date)"},{"key":"page","value":"1","description":"Page number for pagination (starts at 1)"},{"key":"page_size","value":"100","description":"Number of items per page (default: 25, max: 100)"}]},"description":"Retrieves RADIUS authentication logs for the last 24 hours. Shows login attempts, successes, and failures."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"reports\": [\n      {\n        \"timestamp\": \"2025-12-10T04:51:11Z\",\n        \"username\": \"user@example.com\",\n        \"nas_ip_address\": \"192.168.1.1\",\n        \"calling_station_id\": \"AA:BB:CC:DD:EE:FF\",\n        \"reply\": \"Access-Accept\",\n        \"reply_message\": \"OK\"\n      }\n    ]\n  },\n  \"total_items\": 150,\n  \"page\": 1,\n  \"page_size\": 100\n}"}],"_postman_id":"5463e912-f192-4d09-8b27-1f51b20dd864"},{"name":"3.2 Get Accounting Logs (Last 7 days)","event":[{"listen":"test","script":{"exec":["pm.test('Report retrieved successfully', function () {","    pm.expect(pm.response.code).to.equal(200);","});"],"type":"text/javascript","id":"cb982e06-5af0-4668-ae3a-bb9291300e48"}}],"id":"17639b2e-fb38-4fcd-88ec-a4842634cf2f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/reports/111?earliest=-7d&latest=now","description":"<p>Retrieves RADIUS accounting data showing session duration, data usage, and connection times.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports","111"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Start time for reports (-7d, -24h, or ISO date)</p>\n","type":"text/plain"},"key":"earliest","value":"-7d"},{"description":{"content":"<p>End time for reports (now, -1h, or ISO date)</p>\n","type":"text/plain"},"key":"latest","value":"now"}],"variable":[]}},"response":[{"id":"ecff6de6-66d2-4db1-b162-698c3ae9659e","name":"3.2 Get Accounting Logs (Last 7 days)","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/reports/111?earliest=-7d&latest=now","host":["{{baseUrl}}"],"path":["reports","111"],"query":[{"key":"earliest","value":"-7d","description":"Start time for reports (-7d, -24h, or ISO date)"},{"key":"latest","value":"now","description":"End time for reports (now, -1h, or ISO date)"}]},"description":"Retrieves RADIUS accounting data showing session duration, data usage, and connection times."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"reports\": [\n      {\n        \"username\": \"user@example.com\",\n        \"session_time\": 3600,\n        \"input_octets\": 104857600,\n        \"output_octets\": 52428800,\n        \"start_time\": \"2025-12-10T04:51:11Z\",\n        \"stop_time\": \"2025-12-10T04:51:11Z\"\n      }\n    ]\n  },\n  \"total_items\": 45,\n  \"page\": 1,\n  \"page_size\": 25\n}"}],"_postman_id":"17639b2e-fb38-4fcd-88ec-a4842634cf2f"},{"name":"3.3 Export Report as CSV","event":[{"listen":"test","script":{"exec":["pm.test('CSV export successful', function () {","    pm.expect(pm.response.code).to.equal(200);","});","","pm.test('Response is CSV format', function () {","    const contentType = pm.response.headers.get('Content-Type');","    pm.expect(contentType).to.include('csv');","});"],"type":"text/javascript","id":"c105ef8b-12c9-4968-af58-acd3a6424540"}}],"id":"89a14b87-2f3f-4f50-adf0-1cc56f2dfb44","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/reports/110?earliest=-24h&latest=now&format=csv","description":"<p>Exports authentication logs in CSV format for external analysis or reporting.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports","110"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Start time for reports (-7d, -24h, or ISO date)</p>\n","type":"text/plain"},"key":"earliest","value":"-24h"},{"description":{"content":"<p>End time for reports (now, -1h, or ISO date)</p>\n","type":"text/plain"},"key":"latest","value":"now"},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":"csv"}],"variable":[]}},"response":[{"id":"5cd92ce8-8a8e-4e79-bd51-4cade3042f58","name":"3.3 Export Report as CSV","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/reports/110?earliest=-24h&latest=now&format=csv","host":["{{baseUrl}}"],"path":["reports","110"],"query":[{"key":"earliest","value":"-24h","description":"Start time for reports (-7d, -24h, or ISO date)"},{"key":"latest","value":"now","description":"End time for reports (now, -1h, or ISO date)"},{"key":"format","value":"csv","description":"Response format: json (default) or csv"}]},"description":"Exports authentication logs in CSV format for external analysis or reporting."},"status":"OK","code":200,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"\"timestamp,username,nas_ip_address,reply\\n2024-12-09T12:00:00Z,user@example.com,192.168.1.1,Access-Accept\""}],"_postman_id":"89a14b87-2f3f-4f50-adf0-1cc56f2dfb44"}],"id":"fbd3d12e-5afa-4012-a1d4-2069a9fd9885","description":"<p>Retrieve various reports and export data.</p>\n","_postman_id":"fbd3d12e-5afa-4012-a1d4-2069a9fd9885","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}}],"id":"15a126d6-3393-4860-adec-1b5946dfa2d4","description":"<p>Common API workflow examples showing how to combine multiple endpoints to accomplish tasks.</p>\n<p>Run these in order to see the complete workflow.</p>\n","_postman_id":"15a126d6-3393-4860-adec-1b5946dfa2d4","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Error Examples","item":[{"name":"401 Unauthorized - Missing Token","event":[{"listen":"test","script":{"exec":["pm.test('Returns 401 Unauthorized', function () {","    pm.expect(pm.response.code).to.equal(401);","});","","pm.test('Error response has correct format', function () {","    const data = pm.response.json();","    pm.expect(data).to.have.property('status', 401);","    pm.expect(data).to.have.property('title');","});"],"type":"text/javascript","id":"6a09fbab-a807-4f67-8f7e-fe9730b6a047"}}],"id":"f1afe587-d685-4c1b-8cf0-e6680ac0019c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"{{baseUrl}}/users","description":"<p>Example of a request without authentication. The API will return a 401 error.</p>\n","urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"a3443ab3-5b29-460d-b7f5-0900c144ff8d","name":"401 Unauthorized","originalRequest":{"auth":{"type":"noauth"},"method":"GET","header":[],"url":"{{baseUrl}}/users","description":"Example of a request without authentication. The API will return a 401 error."},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Unauthorized\",\n  \"status\": 401,\n  \"detail\": \"Missing or invalid authentication token\"\n}"}],"_postman_id":"f1afe587-d685-4c1b-8cf0-e6680ac0019c"},{"name":"401 Unauthorized - Invalid Token","event":[{"listen":"test","script":{"exec":["pm.test('Returns 401 Unauthorized', function () {","    pm.expect(pm.response.code).to.equal(401);","});"],"type":"text/javascript","id":"0d407172-ed3e-4538-9146-616c1dc3f7bb"}}],"id":"53e11790-45e5-4a7e-86d8-fd1086d3d17a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{vault:authorization-secret}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{baseUrl}}/users","description":"<p>Example of a request with an invalid authentication token.</p>\n","urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"5aa95300-7225-4b66-be66-0c4e8ecbba4e","name":"401 Unauthorized - Invalid Token","originalRequest":{"auth":{"type":"bearer","bearer":{"token":"invalid_token_12345"}},"method":"GET","header":[],"url":"{{baseUrl}}/users","description":"Example of a request with an invalid authentication token."},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Unauthorized\",\n  \"status\": 401,\n  \"detail\": \"Invalid or expired authentication token\"\n}"}],"_postman_id":"53e11790-45e5-4a7e-86d8-fd1086d3d17a"},{"name":"403 Forbidden - Insufficient Permissions","event":[{"listen":"test","script":{"exec":["pm.test('Returns 403 Forbidden', function () {","    pm.expect(pm.response.code).to.equal(403);","});"],"type":"text/javascript","id":"f2c8284b-ba4e-45cf-871d-f59e83389a88"}}],"id":"28cd7b5b-06a5-4492-8f8c-663702a4c871","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/users/","description":"<p>Example when your API token doesn't have permission for this operation.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"64a624bd-4f77-41f0-9da1-675a9e0fb6d1","name":"403 Forbidden","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/users/","description":"Example when your API token doesn't have permission for this operation."},"status":"Forbidden","code":403,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Forbidden\",\n  \"status\": 403,\n  \"detail\": \"You do not have permission to perform this action\"\n}"}],"_postman_id":"28cd7b5b-06a5-4492-8f8c-663702a4c871"},{"name":"404 Not Found - Resource Doesn't Exist","event":[{"listen":"test","script":{"exec":["pm.test('Returns 404 Not Found', function () {","    pm.expect(pm.response.code).to.equal(404);","});","","pm.test('Error includes detail message', function () {","    const data = pm.response.json();","    pm.expect(data).to.have.property('detail');","});"],"type":"text/javascript","id":"c1672199-3a6a-4dd1-93a9-69be9c4f0d8a"}}],"id":"036242ef-cc64-468f-80cb-ed3653fed3ab","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/users/00000000-0000-0000-0000-000000000000","description":"<p>Example when requesting a resource that doesn't exist.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users","00000000-0000-0000-0000-000000000000"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"ad08d865-3418-4733-b99d-11e70e3fb495","name":"404 Not Found","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/users/00000000-0000-0000-0000-000000000000","description":"Example when requesting a resource that doesn't exist."},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"User with ID 00000000-0000-0000-0000-000000000000 not found\"\n}"}],"_postman_id":"036242ef-cc64-468f-80cb-ed3653fed3ab"},{"name":"422 Validation Error - Missing Required Field","event":[{"listen":"test","script":{"exec":["pm.test('Returns 422 Unprocessable Entity', function () {","    pm.expect(pm.response.code).to.equal(422);","});","","pm.test('Response includes validation messages', function () {","    const data = pm.response.json();","    pm.expect(data).to.have.property('validation_messages');","});"],"type":"text/javascript","id":"948dab44-4ef1-42c0-9869-9cc4298901a5"}}],"id":"cfc05ff5-216c-41cf-8b4a-e18af2802652","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"invalid_field\": \"test\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"<p>Example of a validation error when required fields are missing.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"67eca803-45b4-4e65-ab34-b6c7c98076e5","name":"422 Unprocessable Entity","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"invalid_field\": \"test\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"Example of a validation error when required fields are missing."},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Unprocessable Entity\",\n  \"status\": 422,\n  \"validation_messages\": {\n    \"username\": {\n      \"isEmpty\": \"Value is required and can't be empty\"\n    },\n    \"group_id\": {\n      \"isEmpty\": \"Value is required and can't be empty\"\n    }\n  }\n}"}],"_postman_id":"cfc05ff5-216c-41cf-8b4a-e18af2802652"},{"name":"422 Validation Error - Invalid Format","event":[{"listen":"test","script":{"exec":["pm.test('Returns 422 Unprocessable Entity', function () {","    pm.expect(pm.response.code).to.equal(422);","});"],"type":"text/javascript","id":"005d7232-8ab5-48a2-95e3-82ce91193816"}}],"id":"1b1d1261-a24e-4769-b55e-0983c95d19d5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"invalid-email\",\n    \"group_id\": \"not-a-uuid\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"<p>Example of validation errors for invalid field formats.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"3679f39e-2da2-4e92-b1b3-97d8f82d2227","name":"422 Invalid Format","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"invalid-email\",\n    \"group_id\": \"not-a-uuid\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"Example of validation errors for invalid field formats."},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Unprocessable Entity\",\n  \"status\": 422,\n  \"validation_messages\": {\n    \"username\": {\n      \"emailAddressInvalidFormat\": \"The input is not a valid email address\"\n    },\n    \"group_id\": {\n      \"notUuid\": \"The input is not a valid UUID\"\n    }\n  }\n}"}],"_postman_id":"1b1d1261-a24e-4769-b55e-0983c95d19d5"},{"name":"429 Rate Limited","event":[{"listen":"test","script":{"exec":["pm.test('Returns 429 Too Many Requests', function () {","    pm.expect(pm.response.code).to.equal(429);","});","","pm.test('Response includes Retry-After header', function () {","    pm.expect(pm.response.headers.get('Retry-After')).to.exist;","});"],"type":"text/javascript","id":"2081f757-640c-4afb-9dfe-163610011640"}}],"id":"b95adbb5-594c-46c8-be8b-3a608123adbd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/users","description":"<p>Example of rate limiting response. Occurs when you exceed 100 requests per minute.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"0497775c-8df8-4a7a-a6ff-fe36c9ed46a5","name":"429 Too Many Requests","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/users","description":"Example of rate limiting response. Occurs when you exceed 100 requests per minute."},"status":"Too Many Requests","code":429,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"},{"key":"Retry-After","value":"45"},{"key":"X-RateLimit-Limit","value":"100"},{"key":"X-RateLimit-Remaining","value":"0"},{"key":"X-RateLimit-Reset","value":"1702123200"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Too Many Requests\",\n  \"status\": 429,\n  \"detail\": \"Rate limit exceeded. Please retry after 45 seconds.\",\n  \"retry_after\": 45\n}"}],"_postman_id":"b95adbb5-594c-46c8-be8b-3a608123adbd"},{"name":"409 Conflict - Resource Already Exists","event":[{"listen":"test","script":{"exec":["pm.test('Returns 409 Conflict', function () {","    pm.expect(pm.response.code).to.equal(409);","});"],"type":"text/javascript","id":"33984226-dcd5-48c3-aede-0d8182130b77"}}],"id":"4d32f417-d976-45e0-b124-def66da80a9e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"existing-user@example.com\",\n    \"group_id\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"<p>Example when trying to create a resource that already exists.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"0cf4b150-4fba-43a4-ba7b-32f67a6ee5d0","name":"409 Conflict","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"existing-user@example.com\",\n    \"group_id\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"Example when trying to create a resource that already exists."},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/problem+json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Conflict\",\n  \"status\": 409,\n  \"detail\": \"A user with this username already exists\"\n}"}],"_postman_id":"4d32f417-d976-45e0-b124-def66da80a9e"}],"id":"d5fca3d5-70d8-4630-ba57-5377ce7547ef","description":"<p>Common API error responses for reference. These show what to expect when requests fail.</p>\n<p>Error responses follow RFC 7807 (Problem Details for HTTP APIs) format.</p>\n","_postman_id":"d5fca3d5-70d8-4630-ba57-5377ce7547ef","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Networks","item":[{"name":"Add network","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add network');"],"type":"text/javascript","packages":{},"id":"cfa94a3c-49cd-4bbc-974e-4bf65feb004a"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"71f80e32-4751-4bf9-80bb-37ddd96b2d62"}}],"id":"606882bf-099d-49f7-a650-39513ed0d7dc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"nasname\": \"nesciunt\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/networks","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>nasname</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["networks"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"0b1d68f3-06d9-49ea-99b5-6484e1a05875","name":"Add network","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"nasname\": \"voluptas alias numquam\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/networks"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"0e536e31dadd8713e2a29c755fe82c78"},{"key":"date","value":"Thu, 17 Jul 2025 22:14:19 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"280"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"id\": \"5e0a16be-a73f-4555-ada1-bf89a865dfa4\",\n    \"primary_ip\": \"1.2.3.4\",\n    \"backup_ip\": \"1.2.3.5\",\n    \"secret\": \"************\",\n    \"auth_port\": 1812,\n    \"acct_port\": 1813,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4\"\n        }\n    }\n}"}],"_postman_id":"606882bf-099d-49f7-a650-39513ed0d7dc"},{"name":"Get all networks","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all networks');"],"type":"text/javascript","packages":{},"id":"1caf9fa0-8f96-42f7-aa57-62724407b73d"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"71f84215-878f-4293-95a6-ffda2db61983"}}],"id":"5aca7457-35d9-4dc7-ac83-e06d9723a9bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/networks?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["networks"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"fbf6367f-9669-4d32-a7be-e6fb0c05ce4f","name":"Get all networks","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/networks?page=1&filter=&sort=&format=&type=&page_size=25","host":["{{baseUrl}}"],"path":["networks"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"type","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"f36a73c544e0dc6ca98a98443e4625a7"},{"key":"date","value":"Thu, 17 Jul 2025 22:15:22 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\"_embedded\":{\"networks\":[{\"id\":\"5e0a16be-a73f-4555-ada1-bf89a865dfa4\",\"nasname\":\"magnam quidem cumque\",\"shortname\":null,\"region\":\"console-dev\",\"auth_port\":1812,\"acct_port\":1813,\"primary_ip\":\"1.2.3.4\",\"backup_ip\":\"1.2.3.5\",\"secret\":\"**********\",\"ipv6\":0,\"unknown_users\":0,\"open_roaming\":0,\"eduroam\":0,\"radsec\":0}]},\"total_items\":1,\"page\":1,\"page_size\":25,\"page_count\":1}"}],"_postman_id":"5aca7457-35d9-4dc7-ac83-e06d9723a9bd"},{"name":"Get network","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get network');"],"type":"text/javascript","packages":{},"id":"199af6aa-4d22-4ed5-8e1e-d8125d8c4da8"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"dddf945b-a9cf-48a7-bdfa-3bab931c5b2a"}}],"id":"a8efa77b-74a9-4e5e-a30a-7288ba7fbc6b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/networks/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>network_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["networks",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"960be985-73bb-46ee-a377-6e4091f49301","name":"Get network","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/networks/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"4780b9ee584a912f56fd7964e15374d2"},{"key":"date","value":"Thu, 17 Jul 2025 22:15:35 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1097"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"id\": \"5e0a16be-a73f-4555-ada1-bf89a865dfa4\",\n    \"nasname\": \"magnam quidem cumque\",\n    \"shortname\": null,\n    \"type\": \"trusted\",\n    \"ports\": null,\n    \"auth_port\": 1812,\n    \"acct_port\": 1813,\n    \"secret\": \"************\",\n    \"server\": \"auth\",\n    \"community\": null,\n    \"description\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"modification_date\": \"2025-07-17T22:14:18.274533921Z\",\n    \"region\": \"console-dev\",\n    \"primary_ip\": \"1.2.3.4\",\n    \"backup_ip\": \"1.2.3.5\",\n    \"proxy_to\": null,\n    \"realm\": null,\n    \"monitor_availability\": 0,\n    \"radius_status\": null,\n    \"radius_status_update\": null,\n    \"unknown_users\": 0,\n    \"ipv6\": 0,\n    \"open_roaming\": 0,\n    \"migration_shard_id\": \"22f4c432-471d-4751-b7a6-fcf3f123373c\",\n    \"radsec\": 0,\n    \"coa\": 0,\n    \"coa_vendor\": null,\n    \"eduroam\": 0,\n    \"or_ssid1\": null,\n    \"or_ssid2\": null,\n    \"or_ssid3\": null,\n    \"or_tier1\": null,\n    \"or_tier2\": null,\n    \"or_tier3\": null,\n    \"or_tier_price1\": null,\n    \"or_tier_price2\": null,\n    \"or_tier_price3\": null,\n    \"or_tier_currency1\": null,\n    \"or_tier_currency2\": null,\n    \"or_tier_currency3\": null,\n    \"or_tier_octet1\": null,\n    \"or_tier_octet2\": null,\n    \"or_tier_octet3\": null,\n    \"or_accepted_realms\": null,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4\"\n        }\n    }\n}"}],"_postman_id":"a8efa77b-74a9-4e5e-a30a-7288ba7fbc6b"},{"name":"Update network","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update network');"],"type":"text/javascript","packages":{},"id":"cf7622db-157d-4a33-916b-16ae3140fe64"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"8e1eca39-95cf-422e-85dc-403d87d9cbf4"}}],"id":"33c4c63d-31ac-49f4-bd47-159e63ca9b92","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"nasname\":\"veritatis ducimus enim\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/networks/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>network_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>nasname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>shortname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>unknown_users</code> (Body parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>ipv6</code> (Body parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>open_roaming</code> (Body parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>radsec</code> (Body parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>coa</code> (Body parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>coa_vendor</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>eduroam</code> (Body parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>or_ssid1</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>or_tier1</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>or_tier_price1</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>or_tier_currency1</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>or_accepted_realms</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["networks",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"bb8ea86b-46b1-46e4-9d1b-7156c65a52a9","name":"Update network","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"nasname\":\"changed_network_name\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/networks/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"40d416eadae9f8db09336bd9a4e046a6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:15:56 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"150"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"nasname\": \"changed_network_name\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4\"\n        }\n    }\n}"}],"_postman_id":"33c4c63d-31ac-49f4-bd47-159e63ca9b92"},{"name":"Delete network","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete network');"],"type":"text/javascript","packages":{},"id":"f9f0fdf0-0e45-40ab-9185-1cb03ab904ce"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"8f63483d-403c-467a-97b0-7aba76cd13f6"}}],"id":"0bf3bc01-8ce8-462b-a987-8ad8ef0ea3b3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/networks/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>network_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["networks",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"ab028eab-18de-4fe1-9bb2-434746274344","name":"Delete network","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/networks/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"288c5dd44029b7b509e09baa0154878f;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:16:10 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"0bf3bc01-8ce8-462b-a987-8ad8ef0ea3b3"}],"id":"47f06938-e702-451a-8224-fccf767c7be2","description":"<p>Manage RADIUS networks (NAS clients).</p>\n<p>Networks represent your network devices (routers, APs, controllers) that send authentication requests to IronWiFi.</p>\n<p><strong>Common operations:</strong></p>\n<ul>\n<li>Add a network to register a new NAS client</li>\n<li>Get network details including RADIUS secret and ports</li>\n<li>Update network settings (CoA, RadSec, OpenRoaming)</li>\n<li>Delete networks that are no longer needed</li>\n</ul>\n<p><strong>Key fields:</strong></p>\n<ul>\n<li><code>nasname</code>: Display name for the network</li>\n<li><code>primary_ip</code>, <code>backup_ip</code>: RADIUS server IPs assigned to this network</li>\n<li><code>secret</code>: RADIUS shared secret</li>\n<li><code>auth_port</code>, <code>acct_port</code>: RADIUS ports (default 1812/1813)</li>\n</ul>\n","_postman_id":"47f06938-e702-451a-8224-fccf767c7be2","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Reports","item":[{"name":"Get report","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get report');"],"type":"text/javascript","packages":{},"id":"13190f87-9455-46f3-b517-9fbd0a781fe7"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"5dc8af9f-98b5-4fce-9f14-dd73f2845adc"}}],"id":"e56e3d48-8548-40be-b635-4604480fba1f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/reports/110?earliest=-7d&latest=now&filter=&page=1&format=","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>report_id</code> (Query parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>earliest</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>latest</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports","110"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Start time for reports (-7d, -24h, or ISO date)</p>\n","type":"text/plain"},"key":"earliest","value":"-7d"},{"description":{"content":"<p>End time for reports (now, -1h, or ISO date)</p>\n","type":"text/plain"},"key":"latest","value":"now"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""}],"variable":[]}},"response":[{"id":"4b723742-a9fd-476d-9f40-8c284841da9b","name":"Get report","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/reports/110?earliest=-7d&latest=now&filter=&page=1&format=","host":["{{baseUrl}}"],"path":["reports","110"],"query":[{"key":"earliest","value":"-7d"},{"key":"latest","value":"now"},{"key":"filter","value":""},{"key":"page","value":"1"},{"key":"format","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"reports\": [\n            {\n                \"timestamp\": \"2024-01-15T10:30:45Z\",\n                \"username\": \"user@example.com\",\n                \"nas_ip_address\": \"192.168.1.1\",\n                \"reply\": \"Access-Accept\",\n                \"auth_type\": \"PAP\"\n            }\n        ]\n    },\n    \"total_items\": 150,\n    \"page\": 1,\n    \"page_size\": 25,\n    \"page_count\": 6\n}"}],"_postman_id":"e56e3d48-8548-40be-b635-4604480fba1f"},{"name":"Get task result","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get task result');"],"type":"text/javascript","packages":{},"id":"6dc015a1-d5db-4f36-99e6-b997be7b7176"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"d10a3f44-ee4b-4329-afad-da42a036be2b"}}],"id":"452db212-e231-44df-a0fe-1605e3c81aa4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/reports/tasks?task_name=","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>task_name</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports","tasks"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Async task name to check status</p>\n","type":"text/plain"},"key":"task_name","value":""}],"variable":[]}},"response":[{"id":"a83903d3-58b7-4c67-a2e2-a8981d2e8f3c","name":"Get task result","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/reports/tasks?task_name=","host":["{{baseUrl}}"],"path":["reports","tasks"],"query":[{"key":"task_name","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"reports\": [\n            {\n                \"timestamp\": \"2024-01-15T10:30:45Z\",\n                \"username\": \"user@example.com\",\n                \"nas_ip_address\": \"192.168.1.1\",\n                \"reply\": \"Access-Accept\",\n                \"auth_type\": \"PAP\"\n            }\n        ]\n    },\n    \"total_items\": 150,\n    \"page\": 1,\n    \"page_size\": 25,\n    \"page_count\": 6\n}"}],"_postman_id":"452db212-e231-44df-a0fe-1605e3c81aa4"},{"name":"Add scheduled report","event":[{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"b215d864-c273-4926-898c-006d0bbec0b2"}}],"id":"f0d7d337-2b87-4181-a51a-86a2575b77bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"id\": 110,\n    \"name\": \"non accusantium cupiditate\",\n    \"recipient\": \"dev+postman@ironwifi.com\",\n    \"earliest\": \"-1d\",\n    \"method\": \"email\",\n    \"latest\": \"now\",\n    \"frequency\": \"daily\",\n    \"execution_time\": \"12:00\",\n    \"execution_minute\": \"00\",\n    \"execution_day\": \"monday\",\n    \"execution_date\": \"1\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/reports","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>earliest</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>latest</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>filter</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>frequency</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>method</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>recipient</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>execution_date</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>execution_day</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>execution_minute</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>execution_time</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f0d7d337-2b87-4181-a51a-86a2575b77bd"},{"name":"Delete scheduled report","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"54f95ddc-9c9c-4f60-bf79-3e2707d63296"}}],"id":"8d063c92-a2c7-4171-8123-dbf0af9df0b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/reports/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>scheduled_report_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["reports",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"8d063c92-a2c7-4171-8123-dbf0af9df0b9"}],"id":"fc7761be-d6a9-4606-b2ab-689dd1709e25","description":"<p>Generate and retrieve reports from IronWiFi.</p>\n<p>Reports provide analytics and logging data for authentication, accounting, and system events.</p>\n<p><strong>Report IDs:</strong></p>\n<ul>\n<li>110: Authentication logs</li>\n<li>111: Accounting logs</li>\n<li>112: System events</li>\n<li>113: Captive portal logins</li>\n</ul>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>earliest</code>: Start time (e.g., -7d, -24h, 2024-01-01)</li>\n<li><code>latest</code>: End time (e.g., now, -1h)</li>\n<li><code>filter</code>: Filter expression</li>\n<li><code>format</code>: Output format (json, csv)</li>\n</ul>\n","_postman_id":"fc7761be-d6a9-4606-b2ab-689dd1709e25","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Nodes (APs)","item":[{"name":"Get all access points","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"98e2ada7-254e-4839-9ecf-94e7a3b8ae4b"}}],"id":"ee8711d4-e8d9-4570-88ef-a504728826be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/nodes?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["nodes"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"2b617a2d-8c74-4d5b-b760-9ab34796dfa9","name":"Get all access points","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/nodes?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["nodes"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"nodes\": [\n            {\n                \"id\": \"88c5fad0-d6f7-43d1-b3e6-85ecb7549dc2\",\n                \"mac_address\": \"AA:BB:CC:DD:EE:FF\",\n                \"ip_address\": \"192.168.1.100\",\n                \"name\": \"Office AP 1\",\n                \"status\": \"online\",\n                \"last_seen\": \"2025-12-10T04:48:22.518886Z\"\n            }\n        ]\n    },\n    \"total_items\": 5,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"ee8711d4-e8d9-4570-88ef-a504728826be"},{"name":"Get access point","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"2821c791-78fa-4fe4-a4c7-08b2c006bc60"}}],"id":"98f38b84-131b-4464-b407-5009febd312e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/nodes/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>node_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["nodes",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"94561add-bcf8-4fea-a39b-8b101e9dc62e","name":"Get access point","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/nodes/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"6969014b-c60f-4aa8-85fa-bce7b4e11a95\",\n    \"mac_address\": \"AA:BB:CC:DD:EE:FF\",\n    \"ip_address\": \"192.168.1.100\",\n    \"name\": \"Office AP 1\",\n    \"status\": \"online\",\n    \"last_seen\": \"2025-12-10T04:48:22.519372Z\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/nodes/{id}\"\n        }\n    }\n}"}],"_postman_id":"98f38b84-131b-4464-b407-5009febd312e"},{"name":"Delete access point","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete access point');"],"type":"text/javascript","packages":{},"id":"6cae06d8-8b2a-4e96-92d6-0d6420a5e273"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"1ff2b0d3-b3cb-48ac-8812-46877c9def91"}}],"id":"1018e31d-480f-4ae1-b450-0e40835e3536","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/nodes/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>node_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["nodes",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"6bbca65f-d328-4b46-9805-e551ac1c47da","name":"Delete access point","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/nodes/"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"1018e31d-480f-4ae1-b450-0e40835e3536"}],"id":"387e2151-282b-49b6-ad82-c45e93ed663c","description":"<p>Manage access points and network nodes.</p>\n<p>Nodes represent individual access points that have been discovered or registered in IronWiFi.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>View connected access points</li>\n<li>Monitor AP status and connectivity</li>\n<li>Delete outdated or unused nodes</li>\n</ul>\n","_postman_id":"387e2151-282b-49b6-ad82-c45e93ed663c","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Venues","item":[{"name":"Get all venues","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"465dae33-fb77-4b17-bed1-dcd6a806d68a"}}],"id":"5b150740-2fb6-455c-8982-364b9b91a75e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/venues?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["venues"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"c77f74df-5975-4b16-a0ac-61234301d764","name":"Get all venues","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/venues?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["venues"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"venues\": [\n            {\n                \"id\": \"69ba2a91-4cc5-4684-91da-acc94c4cc9d7\",\n                \"name\": \"Main Office\",\n                \"address\": \"123 Business St\",\n                \"city\": \"San Francisco\",\n                \"country\": \"US\"\n            }\n        ]\n    },\n    \"total_items\": 3,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"5b150740-2fb6-455c-8982-364b9b91a75e"},{"name":"Get venue","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"e7248f39-7dd5-4686-a00a-c8989d3ed852"}}],"id":"08dff4af-e457-49f2-83a0-25ac94a1daea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/venue/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>venue_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["venue",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"de90c600-2cbd-49fb-ba47-b22c73d06927","name":"Get venue","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/venue/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"2a480ce9-f0e0-4d4f-baaf-db64dd0d45b8\",\n    \"name\": \"Main Office\",\n    \"address\": \"123 Business St\",\n    \"city\": \"San Francisco\",\n    \"country\": \"US\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/venues/{id}\"\n        }\n    }\n}"}],"_postman_id":"08dff4af-e457-49f2-83a0-25ac94a1daea"},{"name":"Update venue","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update venue');"],"type":"text/javascript","packages":{},"id":"72d8cbd8-3864-448b-8b2b-7403d43ab857"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"46944061-67a0-4935-9fbf-9145e92ebf38"}}],"id":"be081e92-d4ce-4a06-a948-692499e58cea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"nasname\":\"changed_network_name\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/venues/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>venue_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>venue_name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>venue_phone</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["venues",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"e8937302-0701-4c51-9a40-ce444d0d3179","name":"Update venue","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"nasname\":\"changed_network_name\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/venues/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"cc324c13-6cbe-4e8e-a914-5512fe70c859\",\n    \"name\": \"Updated Venue\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/venues/{id}\"\n        }\n    }\n}"}],"_postman_id":"be081e92-d4ce-4a06-a948-692499e58cea"},{"name":"Delete venue","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete venue');"],"type":"text/javascript","packages":{},"id":"28e4fff2-3eed-468c-8c72-654fd721b12a"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"46da30fa-9275-4437-ba59-374f9665ae5b"}}],"id":"f9d060a6-1c28-4425-a5ed-9d7e36168a2d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/venue/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>venue_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["venue",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"40c7d6c4-7e6c-4748-991d-0db8c63215fc","name":"Delete venue","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/venue/"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"f9d060a6-1c28-4425-a5ed-9d7e36168a2d"}],"id":"345ab707-571e-4c5e-91aa-b37c605b4477","description":"<p>Manage physical venue locations.</p>\n<p>Venues represent physical locations where WiFi is provided (offices, stores, hotels, etc.).</p>\n<p><strong>Use cases:</strong></p>\n<ul>\n<li>Organize networks by location</li>\n<li>Configure location-specific settings</li>\n<li>Group captive portals by venue</li>\n</ul>\n","_postman_id":"345ab707-571e-4c5e-91aa-b37c605b4477","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Captive portals","item":[{"name":"Add captive portal","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add captive portal');"],"type":"text/javascript","packages":{},"id":"f2632433-1b90-4fef-8dcb-4abdb3eb637d"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"3063e0cf-ba7d-43b5-a66c-840f329e7591"}}],"id":"93354c55-0615-424b-952e-c8aa505dd546","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"language\":\"en\",\n\t\"name\":\"{{generated_captive_name}}\",\n\t\"network_id\":\"\",\n\t\"vendor\":\"Virtual\",\n\t\"success_redir_url\":\"Requested URL\",\n\t\"web_gui\":\"on\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/captive-portals","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>network_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>vendor</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>success_redir_url</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>language</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["captive-portals"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"a3659d8f-5d0c-4b85-9ad8-8c325e21bb90","name":"Add captive portal","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"language\":\"en\",\n\t\"name\":\"{{generated_captive_name}}\",\n\t\"network_id\":\"\",\n\t\"vendor\":\"Virtual\",\n\t\"success_redir_url\":\"Requested URL\",\n\t\"web_gui\":\"on\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/captive-portals"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"ec558115-3fa8-409e-a884-f4ec92e2d9f1\",\n    \"name\": \"New Portal\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n        }\n    }\n}"}],"_postman_id":"93354c55-0615-424b-952e-c8aa505dd546"},{"name":"Test captive portal - anonymous","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Test captive portal - anonymous');"],"type":"text/javascript","packages":{},"id":"05387724-71bc-4a40-b7a5-bdcdc7bfc3c1"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"ddba9af7-2053-4841-a76b-6039beb8f2e3"}}],"id":"9ae596dd-bd01-4cf4-adff-d07aba768258","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"?mac=01:22:33:44:55:66&url=https://www.ironwifi.com","urlObject":{"host":[""],"query":[{"description":{"content":"<p>MAC address filter</p>\n","type":"text/plain"},"key":"mac","value":"01:22:33:44:55:66"},{"key":"url","value":"https://www.ironwifi.com"}],"variable":[]}},"response":[{"id":"799eb440-813c-4c7f-b484-21a3c5fc8b0d","name":"Test captive portal - anonymous","originalRequest":{"method":"GET","header":[],"url":{"raw":"?mac=01:22:33:44:55:66&url=https://www.ironwifi.com","host":[""],"query":[{"key":"mac","value":"01:22:33:44:55:66"},{"key":"url","value":"https://www.ironwifi.com"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"722b5a25-1e58-4763-a675-5d52a641e352\",\n    \"name\": \"Guest WiFi Portal\",\n    \"theme_id\": \"cb9501ab-7d72-4b25-9fa5-e31aa55bea4d\",\n    \"auth_methods\": [\n        \"social\",\n        \"email\",\n        \"sms\"\n    ],\n    \"redirect_url\": \"https://example.com\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n        }\n    }\n}"}],"_postman_id":"9ae596dd-bd01-4cf4-adff-d07aba768258"},{"name":"Clone captive portal","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Clone captive portal');"],"type":"text/javascript","packages":{},"id":"f847662a-c8ca-43f3-9e96-eb140bf2b8d4"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"f97b0fd9-a7d2-4508-a796-41f844b00050"}}],"id":"3528ccdb-f548-4244-ab52-7e354fe9fc9a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"language\":\"en\",\n\t\"name\":\"{{generated_captive_name}}\",\n\t\"network_id\":\"\",\n\t\"vendor\":\"Virtual\",\n\t\"success_redir_url\":\"Requested URL\",\n\t\"web_gui\":\"on\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/captive-portals","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>clone_cp</code> (Body parameter, type: <code>boolean</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>cp_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["captive-portals"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"d1777b05-0a4a-433f-9e36-ad5020f1fd09","name":"Clone captive portal","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"language\":\"en\",\n\t\"name\":\"{{generated_captive_name}}\",\n\t\"network_id\":\"\",\n\t\"vendor\":\"Virtual\",\n\t\"success_redir_url\":\"Requested URL\",\n\t\"web_gui\":\"on\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/captive-portals"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"ec558115-3fa8-409e-a884-f4ec92e2d9f1\",\n    \"name\": \"New Portal\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n        }\n    }\n}"}],"_postman_id":"3528ccdb-f548-4244-ab52-7e354fe9fc9a"},{"name":"Get all captive portals","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all captive portals');"],"type":"text/javascript","packages":{},"id":"c4292945-3c7c-4179-b576-e0c607102385"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"7d3a5cf4-2e7b-435b-b07a-32830ea19e53"}}],"id":"5d19f018-affa-419f-a5dd-27aac4a16519","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/captive-portals?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["captive-portals"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"4aff4f12-1e25-4b90-bf92-25af881a733f","name":"Get all captive portals","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/captive-portals?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["captive-portals"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"captive-portals\": [\n            {\n                \"id\": \"89339f3d-39e0-449f-a2ef-d6d741ff671c\",\n                \"name\": \"Guest WiFi Portal\",\n                \"theme_id\": \"76f63705-cc9f-4784-ab28-adc0d08c85d3\",\n                \"auth_methods\": [\n                    \"social\",\n                    \"email\",\n                    \"sms\"\n                ]\n            }\n        ]\n    },\n    \"total_items\": 2,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"5d19f018-affa-419f-a5dd-27aac4a16519"},{"name":"Get captive portal","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get captive portal');"],"type":"text/javascript","packages":{},"id":"b6f03c3a-3044-4024-b439-29f2650206d6"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"324147b9-7c14-45d2-88d2-10efbd6bffe6"}}],"id":"8c4dd9fe-a014-4dc9-9a25-43e82de8351d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/captive-portals/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>captive_portal_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["captive-portals",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"570f85fb-f370-4b4d-ae63-6df2279fa857","name":"Get captive portal","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/captive-portals/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"722b5a25-1e58-4763-a675-5d52a641e352\",\n    \"name\": \"Guest WiFi Portal\",\n    \"theme_id\": \"cb9501ab-7d72-4b25-9fa5-e31aa55bea4d\",\n    \"auth_methods\": [\n        \"social\",\n        \"email\",\n        \"sms\"\n    ],\n    \"redirect_url\": \"https://example.com\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n        }\n    }\n}"}],"_postman_id":"8c4dd9fe-a014-4dc9-9a25-43e82de8351d"},{"name":"Update captive portal","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update captive portal');"],"type":"text/javascript","packages":{},"id":"56b32aab-2910-44c9-9430-aed7cafb057e"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"fd542065-5a1f-42d0-b175-b5f30b62df0d"}}],"id":"dce0cc34-2e44-4a6d-b6cd-a36aa1a3fe34","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"description\":\"changed_description\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/captive-portals/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>captive_portal_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>network_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>) - <code>enum</code></p>\n</li>\n<li><p><code>vendor</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>splash_page</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>success_page</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>language</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>success_redir_url</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>custom_domain</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>protected_ssid</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>rcoi</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>global_profile</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>controller_url</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>controller_url_backup</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>controller_user</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>controller_password</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>use_proxy</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>mac_authentication</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>mac_expiration_time</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>ip_whitelist</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>webhook_url</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>webhook_trigger</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>webhook_format</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>portal_theme</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>business_name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>support_address</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>support_phone</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>support_email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sendgrid_token</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sg_sender_email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sg_sender_name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sg_guest_email_subject</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sg_guest_email_id</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["captive-portals",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"dce0cc34-2e44-4a6d-b6cd-a36aa1a3fe34"},{"name":"Delete captive portal","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete captive portal');"],"type":"text/javascript","packages":{},"id":"6ed5d627-d49f-4fe0-b6ea-a5058bdc61ac"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"4c536ffb-cc66-4f48-a293-0a21321dc96f"}}],"id":"dc6b8dd9-93c2-489e-8835-03743b2341a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/captive-portals/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>captive_portal_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["captive-portals",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"5d4f16e8-431f-4e55-8324-675c43e3607e","name":"Delete captive portal","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/captive-portals/"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"dc6b8dd9-93c2-489e-8835-03743b2341a6"}],"id":"94ba6bd5-8646-4cf5-9c7f-3f59daf39ea3","description":"<p>Configure and manage captive portal pages.</p>\n<p>Captive portals are the splash pages shown to users when they connect to your WiFi network.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Create custom branded login pages</li>\n<li>Configure authentication methods (social login, SMS, vouchers)</li>\n<li>Clone existing portals as templates</li>\n<li>Test portal functionality</li>\n</ul>\n","_postman_id":"94ba6bd5-8646-4cf5-9c7f-3f59daf39ea3","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Themes","item":[{"name":"Add theme","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add theme');"],"type":"text/javascript","packages":{},"id":"bd4a183d-6e8a-4d68-b0aa-d299af94cd38"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"93772ad6-28a8-4072-9764-f8eddb22268b"}}],"id":"af861f9a-cd6b-49a9-870d-0b8d8a83e68d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"name\":\"perferendis\",\n    \"description\":\"quia\",\n\t\"captive_portal_id\":\"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/themes","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>captive_portal_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>data</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>filename</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["themes"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"9841cf80-e6b6-4729-a113-6493e126e7fd","name":"Add theme","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"name\":\"ad\",\n    \"description\":\"eveniet\",\n\t\"captive_portal_id\":\"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/themes"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"13b9ab26-bca7-4b11-a6f6-7f34bf9a199c\",\n    \"name\": \"New Theme\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/themes/{id}\"\n        }\n    }\n}"}],"_postman_id":"af861f9a-cd6b-49a9-870d-0b8d8a83e68d"},{"name":"Get all themes","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all themes');"],"type":"text/javascript","packages":{},"id":"6fd361fa-3e37-4a58-b0cf-e5f33cc13030"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"ca64f51b-0b70-4212-a70a-04f9ffd7c1a4"}}],"id":"b9ecadf3-5293-481a-87a6-729d49b57364","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/themes?captive_portal_id=&page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>captive_portal_id</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["themes"],"host":["{{baseUrl}}"],"query":[{"key":"captive_portal_id","value":""},{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"972fe448-d521-4c5c-ace4-65fc12a7cd39","name":"Get all themes","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/themes?captive_portal_id=&page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["themes"],"query":[{"key":"captive_portal_id","value":""},{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"themes\": [\n            {\n                \"id\": \"46b5aaef-27d6-45ef-a97c-82ee61d23422\",\n                \"name\": \"Corporate Theme\",\n                \"primary_color\": \"#0066CC\",\n                \"logo_url\": \"https://example.com/logo.png\"\n            }\n        ]\n    },\n    \"total_items\": 1,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"b9ecadf3-5293-481a-87a6-729d49b57364"},{"name":"Update theme","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update theme');"],"type":"text/javascript","packages":{},"id":"8b20dbe6-b11c-4782-8085-2e6dad8114e6"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"41e472a0-7007-4b42-b4bc-cd81ed25790c"}}],"id":"f1801131-414a-4c39-8660-860782bed8e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"name\":\"corrupti\",\n\t\"description\":\"natus\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/themes/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>captive_portal_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>data</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>filename</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["themes",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f1801131-414a-4c39-8660-860782bed8e2"},{"name":"Delete theme","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete theme');"],"type":"text/javascript","packages":{},"id":"7e1f9678-acce-4093-b581-5742a605d25e"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"4224b127-4668-4f8e-ade7-65bc5e15d469"}}],"id":"47820222-6771-45b6-b09e-e4bee2cd9a65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/themes/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>theme_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["themes",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"011e98b5-ae63-46db-b60c-5ee062c0828c","name":"Delete theme","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/themes/"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"47820222-6771-45b6-b09e-e4bee2cd9a65"}],"id":"c818de6c-316c-4d45-bcdb-cc1febef185b","description":"<p>Manage captive portal themes and styling.</p>\n<p>Themes control the visual appearance of captive portal pages.</p>\n<p><strong>Customization options:</strong></p>\n<ul>\n<li>Colors, fonts, logos</li>\n<li>Custom CSS</li>\n<li>Background images</li>\n</ul>\n","_postman_id":"c818de6c-316c-4d45-bcdb-cc1febef185b","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Shared Files","item":[{"name":"Add shared file","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add shared file');"],"type":"text/javascript","packages":{},"id":"c9c9ce66-faaa-4645-8a35-8940fef2fffa"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"997bb183-fdd4-4e61-8636-77fdc4940ad1"}}],"id":"db408d94-0fbd-4434-84fe-6ccb2ebe94bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"filename\": \"test.html\",\n    \"data\":\"data:text/html;base64\",\n    \"captive_portal_id\":\"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/shared-files","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>captive_portal_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>data</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>filename</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["shared-files"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"f8d75942-254f-46c5-b6a2-689cf7044b35","name":"Add shared file","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"filename\": \"test.html\",\n    \"data\":\"data:text/html;base64\",\n    \"captive_portal_id\":\"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/shared-files","description":"**Parameters:**\n\n- `name` (Body parameter, type: `string`, required: `yes`)\n    \n- `captive_portal_id` (Body parameter, type: `string`, required: `yes`)\n    \n- `data` (Body parameter, type: `string`, required: `yes`)\n    \n- `filename` (Body parameter, type: `string`, required: `yes`)"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"62a1ebc4-b6b3-42eb-904d-bada9e8f9916\",\n  \"filename\": \"uploaded.png\",\n  \"url\": \"https://storage.ironwifi.io/files/uploaded.png\"\n}"}],"_postman_id":"db408d94-0fbd-4434-84fe-6ccb2ebe94bc"},{"name":"Get all shared files","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all shared files');"],"type":"text/javascript","packages":{},"id":"fd0f1761-4d20-4d16-b785-90a2b31d02ab"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"ee48eac1-c265-424a-b8f9-012709895c09"}}],"id":"7e2f615b-e077-43e1-bc4f-ec694d701edd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/shared-files?captive_portal_id=&page=1&filter=&sort=&format=&type=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>captive_portal_id</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["shared-files"],"host":["{{baseUrl}}"],"query":[{"key":"captive_portal_id","value":""},{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Resource type filter</p>\n","type":"text/plain"},"key":"type","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"eb7ebca8-87dc-401f-ba02-05a880c70044","name":"Get all shared files","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/shared-files?captive_portal_id=&page=1&filter=&sort=&format=&type=&page_size=25","host":["{{baseUrl}}"],"path":["shared-files"],"query":[{"key":"captive_portal_id","value":""},{"key":"page","value":"1","description":"Page number for pagination (starts at 1)"},{"key":"filter","value":"","description":"Filter expression (e.g., name:value, status:active)"},{"key":"sort","value":"","description":"Sort field and direction (e.g., name:asc, created:desc)"},{"key":"format","value":"","description":"Response format: json (default) or csv"},{"key":"type","value":"","description":"Resource type filter"},{"key":"page_size","value":"25","description":"Number of items per page (default: 25, max: 100)"}]},"description":"**Parameters:**\n\n- `captive_portal_id` (Query parameter, type: `string`, required: `no`)\n    \n- `page` (Query parameter, type: `integer`, required: `no`)\n    \n- `filter` (Query parameter, type: `string`, required: `no`)\n    \n- `sort` (Query parameter, type: `string`, required: `no`)\n    \n- `format` (Query parameter, type: `string`, required: `no`) - `enum`\n    \n- `page_size` (Query parameter, type: `integer`, required: `no`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"shared-files\": [\n      {\n        \"id\": \"4c442cc8-7f7b-42db-a264-1a79fcf8afb4\",\n        \"filename\": \"logo.png\",\n        \"content_type\": \"image/png\",\n        \"size\": 15234\n      }\n    ]\n  },\n  \"total_items\": 3,\n  \"page\": 1\n}"}],"_postman_id":"7e2f615b-e077-43e1-bc4f-ec694d701edd"},{"name":"Update shared file","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update shared file');"],"type":"text/javascript","packages":{},"id":"513619ec-61d7-422a-aeb8-d3c8bb733b42"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"197a731f-9ffa-43dd-b284-2129cbfdb922"}}],"id":"bf67e683-80d0-4952-ac31-524e539486c1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"description\":\"changed_description\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/shared-files/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>shared_file_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["shared-files",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"bf67e683-80d0-4952-ac31-524e539486c1"},{"name":"Delete shared file","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete shared file');"],"type":"text/javascript","packages":{},"id":"5c99c1f4-7d0f-4616-87e4-cfb53e49543d"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"f3412d9e-c023-4143-a93c-fd12d4c855cd"}}],"id":"404a420d-f507-44f1-bb30-c37e1c718507","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/shared-files/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>shared_file_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["shared-files",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"2dc3e64a-d3ed-4840-8ef2-a2fdbb1d171e","name":"Delete shared file","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/shared-files/","description":"**Parameters:**\n\n- `shared_file_id` (Query parameter, type: `string`, required: `yes`)"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"404a420d-f507-44f1-bb30-c37e1c718507"}],"id":"b1865912-5720-4be1-8e01-2ad156e4dd2b","description":"<p>Manage uploaded files for captive portals.</p>\n<p>Store images, documents, and other assets that can be used in captive portal pages.</p>\n<p><strong>Supported files:</strong></p>\n<ul>\n<li>Images (PNG, JPG, SVG)</li>\n<li>Documents (PDF, TOS)</li>\n<li>Custom assets</li>\n</ul>\n","_postman_id":"b1865912-5720-4be1-8e01-2ad156e4dd2b","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Variables","item":[{"name":"Add variable","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add variable');"],"type":"text/javascript","packages":{},"id":"9761ecf0-66bb-4f47-9e1d-2ed89be76b5c"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"fc50c2d8-ea73-46ea-88a4-c0e96cff43f0"}}],"id":"a5aed452-007f-4baa-949d-3f7e36c05e8a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"value\": \"test123\",\n    \"name\":\"__TEST__\",\n    \"captive_portal_id\":\"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/variables","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>captive_portal_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>value</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["variables"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"c822e23e-c270-4241-95ee-89a3e5ef65f9","name":"Add variable","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"value\": \"test123\",\n    \"name\":\"__TEST__\",\n    \"captive_portal_id\":\"\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/variables","description":"**Parameters:**\n\n- `captive_portal_id` (Body parameter, type: `string`, required: `yes`)\n    \n- `name` (Body parameter, type: `string`, required: `yes`)\n    \n- `value` (Body parameter, type: `string`, required: `yes`)"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"d480b670-b9d4-4775-9670-9ccf76d3137e\",\n  \"name\": \"new_variable\",\n  \"value\": \"test\"\n}"}],"_postman_id":"a5aed452-007f-4baa-949d-3f7e36c05e8a"},{"name":"Get all variable","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all variable');"],"type":"text/javascript","packages":{},"id":"e1278e1a-c6e8-4025-8295-ead48be378fb"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"a7a0dccd-4e54-4e58-a01c-58a04fb6cc7b"}}],"id":"4bfa78c3-4a1a-4bc5-9afb-4b68249fc5fa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/variables?captive_portal_id=&page=1&filter=&sort=&format=&type=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>captive_portal_id</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["variables"],"host":["{{baseUrl}}"],"query":[{"key":"captive_portal_id","value":""},{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Resource type filter</p>\n","type":"text/plain"},"key":"type","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"0ab4e958-91c5-41de-a9c6-4be04096e28c","name":"Get all variable","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/variables?captive_portal_id=&page=1&filter=&sort=&format=&type=&page_size=25","host":["{{baseUrl}}"],"path":["variables"],"query":[{"key":"captive_portal_id","value":""},{"key":"page","value":"1","description":"Page number for pagination (starts at 1)"},{"key":"filter","value":"","description":"Filter expression (e.g., name:value, status:active)"},{"key":"sort","value":"","description":"Sort field and direction (e.g., name:asc, created:desc)"},{"key":"format","value":"","description":"Response format: json (default) or csv"},{"key":"type","value":"","description":"Resource type filter"},{"key":"page_size","value":"25","description":"Number of items per page (default: 25, max: 100)"}]},"description":"**Parameters:**\n\n- `captive_portal_id` (Query parameter, type: `string`, required: `no`)\n    \n- `page` (Query parameter, type: `integer`, required: `no`)\n    \n- `filter` (Query parameter, type: `string`, required: `no`)\n    \n- `sort` (Query parameter, type: `string`, required: `no`)\n    \n- `format` (Query parameter, type: `string`, required: `no`) - `enum`\n    \n- `page_size` (Query parameter, type: `integer`, required: `no`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"variables\": [\n      {\n        \"id\": \"fc8dfd0f-7ede-45c0-98fa-c77b46addc5f\",\n        \"name\": \"company_name\",\n        \"value\": \"ACME Corp\"\n      }\n    ]\n  },\n  \"total_items\": 5,\n  \"page\": 1\n}"}],"_postman_id":"4bfa78c3-4a1a-4bc5-9afb-4b68249fc5fa"},{"name":"Update variable","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update variable');"],"type":"text/javascript","packages":{},"id":"328d6f78-bced-49ef-b6d5-ef26b3510c8e"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"f482da3e-e958-4fe8-a50b-d0afd8e0efe3"}}],"id":"2f828c91-ad69-4ec9-96bf-f0f3b1c574da","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"name\":\"__CHANGED_NAME__\",\n\t\"value\":\"changed_value\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/variables/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>variable_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>value</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["variables",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"2f828c91-ad69-4ec9-96bf-f0f3b1c574da"},{"name":"Delete variable","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete variable');"],"type":"text/javascript","packages":{},"id":"556cfa2a-20b1-4075-b7c7-d3c0c111233d"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"3f192e44-4333-4f65-ace1-e558fb9f899e"}}],"id":"f0e3dd12-af08-45d2-971f-02c0b58b62ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/variables/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>variable_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["variables",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"6ccff9b2-1f2d-4f84-821c-74f532c6b04b","name":"Delete variable","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/variables/","description":"**Parameters:**\n\n- `variable_id` (Query parameter, type: `string`, required: `yes`)"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"f0e3dd12-af08-45d2-971f-02c0b58b62ec"}],"id":"b6e010b4-72a0-48b9-b6ff-6c66049e5561","description":"<p>Manage configuration variables.</p>\n<p>Variables allow dynamic content in captive portals and configurations.</p>\n<p><strong>Use cases:</strong></p>\n<ul>\n<li>Store reusable text snippets</li>\n<li>Configure dynamic values</li>\n<li>Manage translations</li>\n</ul>\n","_postman_id":"b6e010b4-72a0-48b9-b6ff-6c66049e5561","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Guest Profiles","item":[{"name":"Add guest profile","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add guest profile');"],"type":"text/javascript","packages":{},"id":"45a7e573-af6e-467d-a9fd-27b0e3f7fb63"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"53098e5c-878c-40d0-9ab4-dcd62d254d0a"}}],"id":"2a14f21e-13cb-4ebc-a294-132d1d7bd4d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"language\":\"en\",\n\t\"name\":\"{{generated_captive_name}}\",\n\t\"network_id\":\"\",\n\t\"vendor\":\"Virtual\",\n\t\"success_redir_url\":\"Requested URL\",\n\t\"web_gui\":\"on\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/guest-profiles","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>profile_name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>captive_portal_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_username_method</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_username_length</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_password_method</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_password_length</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>guest_welcome_email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_mailchimp</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_hubspot</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_opt_in</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_to_expire</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_expire_after</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guest-profiles"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"9a8ffcf4-b3b0-4f96-8079-6f7065e17467","name":"Add guest profile","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"language\":\"en\",\n\t\"name\":\"{{generated_captive_name}}\",\n\t\"network_id\":\"\",\n\t\"vendor\":\"Virtual\",\n\t\"success_redir_url\":\"Requested URL\",\n\t\"web_gui\":\"on\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/guest-profiles","description":"**Parameters:**\n\n- `profile_name` (Body parameter, type: `string`, required: `yes`)\n    \n- `captive_portal_id` (Body parameter, type: `string`, required: `yes`)\n    \n- `random_username_method` (Body parameter, type: `string`, required: `yes`)\n    \n- `random_username_length` (Body parameter, type: `integer`, required: `yes`)\n    \n- `random_password_method` (Body parameter, type: `string`, required: `yes`)\n    \n- `random_password_length` (Body parameter, type: `integer`, required: `yes`)\n    \n- `guest_welcome_email` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_mailchimp` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_hubspot` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_opt_in` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_to_expire` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_expire_after` (Body parameter, type: `string`, required: `no`)"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"b499fa0b-e16c-46d4-afab-3d704510f214\",\n  \"name\": \"New Profile\"\n}"}],"_postman_id":"2a14f21e-13cb-4ebc-a294-132d1d7bd4d1"},{"name":"Get all guest profiles","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all guest profiles');"],"type":"text/javascript","packages":{},"id":"2c1b9549-16be-4628-b441-b8c51773ed99"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"59984c99-fbb7-4a01-b1a2-842fc8b9c366"}}],"id":"68c3a1cc-3c29-4d28-9aee-68e8977a0b0b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/guest-profiles?page=1&filter=&sort=&format=&type=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guest-profiles"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Resource type filter</p>\n","type":"text/plain"},"key":"type","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"c0928b71-0964-4900-af6b-74c8c35b253d","name":"Get all guest profiles","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/guest-profiles?page=1&filter=&sort=&format=&type=&page_size=25","host":["{{baseUrl}}"],"path":["guest-profiles"],"query":[{"key":"page","value":"1","description":"Page number for pagination (starts at 1)"},{"key":"filter","value":"","description":"Filter expression (e.g., name:value, status:active)"},{"key":"sort","value":"","description":"Sort field and direction (e.g., name:asc, created:desc)"},{"key":"format","value":"","description":"Response format: json (default) or csv"},{"key":"type","value":"","description":"Resource type filter"},{"key":"page_size","value":"25","description":"Number of items per page (default: 25, max: 100)"}]},"description":"**Parameters:**\n\n- `page` (Query parameter, type: `integer`, required: `no`)\n    \n- `filter` (Query parameter, type: `string`, required: `no`)\n    \n- `sort` (Query parameter, type: `string`, required: `no`)\n    \n- `format` (Query parameter, type: `string`, required: `no`) - `enum`\n    \n- `page_size` (Query parameter, type: `integer`, required: `no`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"guest-profiles\": [\n      {\n        \"id\": \"9681679f-72e2-434a-a66e-f9b3965523b0\",\n        \"name\": \"Default Guest\",\n        \"session_timeout\": 3600\n      }\n    ]\n  },\n  \"total_items\": 2,\n  \"page\": 1\n}"}],"_postman_id":"68c3a1cc-3c29-4d28-9aee-68e8977a0b0b"},{"name":"Get guest profile","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get guest profile');"],"type":"text/javascript","packages":{},"id":"f46b22e1-1acc-439b-b18a-607447553c9b"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"af2ca7a3-466b-4a6b-97a3-9fd422db79ac"}}],"id":"a960614e-fa31-4ecc-ab0f-32d26e70289e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/guest-profiles/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>guest_profile_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guest-profiles",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"bfcc9f1d-90b5-4e50-8160-4b7efa65a607","name":"Get guest profile","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/guest-profiles/","description":"**Parameters:**\n\n- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"b877e002-b57d-486b-99d0-b57dfa33f1ff\",\n  \"name\": \"Default Guest\",\n  \"session_timeout\": 3600,\n  \"bandwidth_down\": 10000000\n}"}],"_postman_id":"a960614e-fa31-4ecc-ab0f-32d26e70289e"},{"name":"Update guest profile","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update guest profile');"],"type":"text/javascript","packages":{},"id":"453783d5-9e6b-4143-8a48-880cbaee27e4"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"34c85f0e-92dc-4fee-8357-d18359175646"}}],"id":"d029faf0-072e-4abc-9be6-36c7459c9148","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"description\":\"changed_description\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/guest-profiles/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>guest_profile_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>profile_name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_username_method</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_username_length</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_password_method</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>random_password_length</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>guest_welcome_email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_mailchimp</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_hubspot</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_opt_in</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_to_expire</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>guest_expire_after</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guest-profiles",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"b940fd23-541a-471b-80b5-bd52841e18ab","name":"Update guest profile","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"description\":\"changed_description\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/guest-profiles/","description":"**Parameters:**\n\n- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)\n    \n- `profile_name` (Body parameter, type: `string`, required: `yes`)\n    \n- `random_username_method` (Body parameter, type: `string`, required: `yes`)\n    \n- `random_username_length` (Body parameter, type: `integer`, required: `yes`)\n    \n- `random_password_method` (Body parameter, type: `string`, required: `yes`)\n    \n- `random_password_length` (Body parameter, type: `integer`, required: `yes`)\n    \n- `guest_welcome_email` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_mailchimp` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_hubspot` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_opt_in` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_to_expire` (Body parameter, type: `string`, required: `no`)\n    \n- `guest_expire_after` (Body parameter, type: `string`, required: `no`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"0980d507-44af-4cf3-b108-3b8c42ee5792\",\n  \"name\": \"Updated Profile\"\n}"}],"_postman_id":"d029faf0-072e-4abc-9be6-36c7459c9148"},{"name":"Delete guest profile","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete guest profile');"],"type":"text/javascript","packages":{},"id":"718d2f2f-a2b6-455c-ba7b-7fc7338ce2f4"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"ef68e3a8-11b9-45fc-9528-307df3d34dab"}}],"id":"c4eb9a52-a504-4e28-ac9a-620e15e99173","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/guest-profiles/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>guest_profile_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guest-profiles",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"3de8d347-9e31-4e62-9055-1e2de525eadd","name":"Delete guest profile","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/guest-profiles/","description":"**Parameters:**\n\n- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"c4eb9a52-a504-4e28-ac9a-620e15e99173"}],"id":"4c8a7b66-6a0e-4ee9-be58-de7780f32dc8","description":"<p>Manage guest WiFi profiles and policies.</p>\n<p>Guest profiles define the rules and limits for guest WiFi users.</p>\n<p><strong>Settings:</strong></p>\n<ul>\n<li>Bandwidth limits</li>\n<li>Session duration</li>\n<li>Access schedules</li>\n<li>Device limits</li>\n</ul>\n","_postman_id":"4c8a7b66-6a0e-4ee9-be58-de7780f32dc8","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Employees","item":[{"name":"Add employee","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add employee');"],"type":"text/javascript","packages":{},"id":"3b3827d4-8c22-41c7-9e06-9a1a6bdfbd08"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"421b1259-f83e-4980-a12c-fe1b825ed95b"}}],"id":"4eefcd06-a75b-4f81-9229-42c47e202d2b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Monica.Quitzon\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>username</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["employees"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"e29d2988-5bca-4fdc-99b2-ad07dbf92078","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Prince_Buckridge\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"4eefcd06-a75b-4f81-9229-42c47e202d2b"},{"name":"Get all employees","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"75b37312-6bbd-4791-b606-32ea87aa328f"}}],"id":"544ae55c-779f-458d-ba95-aa8d793787b5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/employees?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of employees</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["employees"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"752a2acc-4797-4865-b3a7-458d0db5b1a0","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"544ae55c-779f-458d-ba95-aa8d793787b5"},{"name":"Get employee","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c331dffc-1179-4ce3-a07a-423c75e6c510"}}],"id":"2e24b584-4d66-4651-9788-df96c4365e4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>employee_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["employees",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"04826720-5322-4c0e-9bee-d92231536ec3","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"2e24b584-4d66-4651-9788-df96c4365e4f"},{"name":"Update employee","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update employee');"],"type":"text/javascript","packages":{},"id":"b330a908-bf15-41b8-8eb7-fe40f9e188d2"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"43271352-2a66-43ce-bc6f-3bb5813aa7f7"}}],"id":"d9817aad-346f-44a9-8a62-f9c2c1bf0b77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Amira\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>employee_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>username</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>firstname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>lastname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>authsource</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>add_mac</code> (Body parameter, type: <code>string (MAC address)</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["employees","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"27342aff-df57-41b4-ab52-30fcc76cc998","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Dell\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"d9817aad-346f-44a9-8a62-f9c2c1bf0b77"},{"name":"Delete employee","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"399ae024-17b5-4e7e-9bfa-32c6101df6d3"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete employee');"],"type":"text/javascript","packages":{},"id":"a735d128-29a1-48b4-bd4d-c3b23a136720"}}],"id":"fabbfd1f-14a2-4838-bf58-ce139c7f51bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>employee_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["employees",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"234bf3aa-1cb0-4684-855c-8100c2183b5f","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"fabbfd1f-14a2-4838-bf58-ce139c7f51bf"}],"id":"0cd89764-141c-40a6-9b4d-1c6ff39482ae","description":"<p>Manage employee accounts for enterprise WiFi.</p>\n<p>Employees are internal users who authenticate via 802.1X or captive portal.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Create employee accounts</li>\n<li>Set credentials and certificates</li>\n<li>Manage group membership</li>\n</ul>\n","_postman_id":"0cd89764-141c-40a6-9b4d-1c6ff39482ae","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Devices","item":[{"name":"Add device","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add device');"],"type":"text/javascript","packages":{},"id":"9342b3cf-0258-41d0-b6c0-de4da04386f7"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c96615c9-892c-4193-a229-98d2ece56b66"}}],"id":"b8ee7e14-28cf-4cd7-8bea-441d18c52a15","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Lonny55\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/devices","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>username</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["devices"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"adadd4f1-892a-46d2-b9cd-cafdc69ee821","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Ally_Sauer\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"b8ee7e14-28cf-4cd7-8bea-441d18c52a15"},{"name":"Get all devices","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"eb7fb5b8-4129-44a8-aeeb-9ef43f4f14c0"}}],"id":"91e27a63-d814-4890-8ca6-2d924fa18d30","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/devices?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of employees</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["devices"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"3e003d33-6ffb-4b86-b974-c1dfa41776b4","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"91e27a63-d814-4890-8ca6-2d924fa18d30"},{"name":"Get device","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"38eeb327-bfae-44d1-8074-75f8eeedaa18"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get device');"],"type":"text/javascript","packages":{},"id":"e257106b-a321-4314-b25e-ea8ed30353d3"}}],"id":"8f4da65d-89ae-44c2-abb2-62137a3072cf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/devices/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>device_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["devices",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"db205479-35c8-4306-ba2b-066dba0ef3f7","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"8f4da65d-89ae-44c2-abb2-62137a3072cf"},{"name":"Update device","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update device');"],"type":"text/javascript","packages":{},"id":"63f8cf06-0576-46f7-9410-17408669c83f"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"037584dc-86de-4f34-8efc-44cbb1a48f70"}}],"id":"bf513238-2332-40e2-b1ff-3f5b083aa0cc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"username\":\"Trenton.Simonis\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/devices/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>device_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>username</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>firstname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>lastname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>authsource</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["devices","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"463783a6-7751-4ef2-ab74-ba68806b1bbc","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Queenie\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"bf513238-2332-40e2-b1ff-3f5b083aa0cc"},{"name":"Delete device","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"df36d860-3e74-465c-a772-1be349ef4cdd"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete device');"],"type":"text/javascript","packages":{},"id":"f59d3cdb-f69e-48e9-83db-07dcd29700ed"}}],"id":"aa0b7862-1647-4bb7-8f21-1d824e4f0670","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/devices/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>device_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["devices",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"8ec014af-b617-4af4-ad31-6b846e5f3d45","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"aa0b7862-1647-4bb7-8f21-1d824e4f0670"}],"id":"579e3013-2611-4a93-8e9c-f6fda0f11f11","description":"<p>Manage registered devices.</p>\n<p>Track and control devices that have connected to your network.</p>\n<p><strong>Device info:</strong></p>\n<ul>\n<li>MAC address</li>\n<li>Device type</li>\n<li>Connection history</li>\n<li>Owner assignment</li>\n</ul>\n","_postman_id":"579e3013-2611-4a93-8e9c-f6fda0f11f11","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Fleets","item":[{"name":"Add fleet","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add fleet');"],"type":"text/javascript","packages":{},"id":"c9ec2c07-e967-4cb0-81e7-bd8b6886c51c"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"00112f66-f442-4ed3-a67c-e5d8f1c96c49"}}],"id":"161eaaae-0375-4556-80a7-7ca0cb5f9942","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Marshall.Balistreri43\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/fleets","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>phone</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>airline</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>configuration</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["fleets"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"1e10b6e4-ea5c-4069-81af-465ba34ea0b8","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Godfrey40\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"161eaaae-0375-4556-80a7-7ca0cb5f9942"},{"name":"Get all fleets","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"a519b67a-0526-4428-8a18-1601515ea250"}}],"id":"e730fc1a-0b05-4e63-8e23-8bae35310245","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/fleets?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["fleets"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"89f0f6ba-36d1-42c7-9299-6a9c669c855b","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"e730fc1a-0b05-4e63-8e23-8bae35310245"},{"name":"Get fleet","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"79bfa3c8-7360-4cc2-80c9-757dfb605509"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get fleet');"],"type":"text/javascript","packages":{},"id":"052b80a5-dc92-40ae-a942-2afbfea7d2a5"}}],"id":"190e9b88-b4e0-4185-83df-ddb2a919edce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/fleets/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>fleet_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["fleets",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"c5005bde-3452-4d18-b0c2-80c3f3bd832b","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"190e9b88-b4e0-4185-83df-ddb2a919edce"},{"name":"Update fleet","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update fleet');"],"type":"text/javascript","packages":{},"id":"1f32790d-ac8c-460a-9576-d4615f11b93b"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"dc538929-3506-446b-8163-9e4fafcbc723"}}],"id":"209c93a2-1707-4f9f-98e3-ebbb44ab93c0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"username\":\"Virgil10\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/fleets/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>fleet_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["fleets","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"7d4e3200-c19b-4327-bbf0-241e2315bf8a","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Nakia\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"209c93a2-1707-4f9f-98e3-ebbb44ab93c0"},{"name":"Delete fleet","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"fc769da5-6858-484f-b2a5-f504f958c99c"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete fleet');"],"type":"text/javascript","packages":{},"id":"e4cb591b-f2ef-4fa3-9b9f-e7a864b11ad8"}}],"id":"da13975b-3f23-4406-a276-2612b83b241f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/fleets/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>fleet_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["fleets",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"8e9d517c-06bc-493f-83c3-e099d545d977","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"da13975b-3f23-4406-a276-2612b83b241f"}],"id":"53d249ff-5e55-4cf9-b8fa-8cb1fa47de34","description":"<p>Manage device fleets for IoT and managed devices.</p>\n<p>Fleets group devices for bulk management and policy application.</p>\n<p><strong>Use cases:</strong></p>\n<ul>\n<li>IoT device management</li>\n<li>POS terminals</li>\n<li>Managed devices</li>\n</ul>\n","_postman_id":"53d249ff-5e55-4cf9-b8fa-8cb1fa47de34","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Vehicles","item":[{"name":"Add vehicle","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add vehicle');"],"type":"text/javascript","packages":{},"id":"054990ec-2894-4513-ae2b-2b1fd5c584c8"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"be42401c-4f4f-410c-872a-2c009c193082"}}],"id":"79238838-9913-42ce-a2f9-73c8d25c43b3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Misael_Barton\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vehicles","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>fleet</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tags</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>phone</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>airline</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tail_sign</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>configuration</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vehicles"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"a2f28572-bd1f-4d67-8c1e-3b64e9645cd7","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Alek_Wiza91\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"79238838-9913-42ce-a2f9-73c8d25c43b3"},{"name":"Get all vehicles","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"6e1dfa22-4ec3-4b7a-9cbc-e602b67eea75"}}],"id":"67892b96-a911-416b-b425-e430e6d2a2ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vehicles?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vehicles"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"e24898b1-cf9a-46cd-a9bc-01ba3e6339ad","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"67892b96-a911-416b-b425-e430e6d2a2ae"},{"name":"Get vehicle","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"1b06aaa9-f1aa-4d2e-8236-69f71a01e7f2"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get vehicle');"],"type":"text/javascript","packages":{},"id":"f3cb1c20-39a3-4f23-970f-9bd083b74f78"}}],"id":"0e1e65c3-285c-4360-a3c8-9d8e5b1a8bbb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vehicles/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>vehicle_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vehicles",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"323e3452-7e70-49bc-bee9-2d3f1689d14a","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"0e1e65c3-285c-4360-a3c8-9d8e5b1a8bbb"},{"name":"Update vehicle","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update vehicle');"],"type":"text/javascript","packages":{},"id":"629d7e74-e1c4-42d7-b4bf-1473317aa9ec"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"e078af65-bf7e-4c08-b8fc-4baaa2bbfa0d"}}],"id":"591c5a28-aa17-406a-a417-0a63e40f783f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"username\":\"Rebekah.Schumm\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vehicles/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>vehicle_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>fleet</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tags</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>phone</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>airline</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tail_sign</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>configuration</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vehicles","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"f0491535-213e-4882-a42f-589c844f9cdf","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Tess\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"591c5a28-aa17-406a-a417-0a63e40f783f"},{"name":"Delete vehicle","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"3b2ac1fb-6590-48bf-b134-87cd37693c70"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete vehicle');"],"type":"text/javascript","packages":{},"id":"ddc8f0f1-eedf-4401-a686-6cc4038b3828"}}],"id":"320c3f9a-6bbd-4f4f-9145-e7b600ecefe0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vehicles/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>vehicle_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vehicles",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"c58c75e5-137c-4eb9-9214-7f0232371c8e","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"320c3f9a-6bbd-4f4f-9145-e7b600ecefe0"}],"id":"a784b646-c0e9-42ac-840d-1f97b5712022","description":"<p>Manage vehicle-based WiFi access.</p>\n<p>For fleet management and vehicle tracking with WiFi connectivity.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Vehicle registration</li>\n<li>Driver assignment</li>\n<li>Location tracking integration</li>\n</ul>\n","_postman_id":"a784b646-c0e9-42ac-840d-1f97b5712022","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Tariffs","item":[{"name":"Add tariff","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add tariff');"],"type":"text/javascript","packages":{},"id":"b0a90603-28ac-4218-bc8b-6197f28b10e1"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"23b2ea07-3c09-484a-bdd4-81e3e2222d39"}}],"id":"c42d4118-efc7-4aa2-9bd5-9514b5c75ed2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\": \"Jeffrey19\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/tariffs","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>currency</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>price</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tariff_group</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>access_type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>route</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>visibility</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>time_limits</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>volume_limits</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>free_tariff</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>paid_tariff</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>order</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>success_page</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>speed_step_downs</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariffs"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"36e45560-9741-4a8c-b0ad-a5b0e23568ab","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Gussie90\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"c42d4118-efc7-4aa2-9bd5-9514b5c75ed2"},{"name":"Get all tariffs","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"17e05ac1-9074-4acb-8cec-755aa9e4e0c8"}}],"id":"f8177611-3d93-4a93-9b9a-cbd0e91d3635","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/tariffs?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariffs"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"e37c4af2-efdf-4861-b53c-01442ec306b5","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"f8177611-3d93-4a93-9b9a-cbd0e91d3635"},{"name":"Get tariff","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"b2076172-a87b-4c1e-af5f-b5249ce62b4f"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get tariff');"],"type":"text/javascript","packages":{},"id":"c569f01b-ca74-458a-b456-b34985bb7cdc"}}],"id":"c779284c-ed4b-4224-a6d8-74ba24e0ea87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/tariffs/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>tariff_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariffs",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"faa6d244-6f77-47ad-b26c-c969aac38e61","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"c779284c-ed4b-4224-a6d8-74ba24e0ea87"},{"name":"Update tariff","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update tariff');"],"type":"text/javascript","packages":{},"id":"ee72db3e-5d49-4de9-9c8a-36dbea8e79f2"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"8e3adbce-350f-4d11-a885-0388aeb30ced"}}],"id":"9d5e4654-4db5-433f-b66f-d9c0aa89bbe7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"name\":\"Hailee.Rodriguez10\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/tariffs/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>tariff_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>currency</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>price</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tariff_group</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>access_type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>route</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>visibility</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>time_limits</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>volume_limits</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>free_tariff</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>paid_tariff</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>order</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>success_page</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>speed_step_downs</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariffs","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"914c9219-cc54-4a6e-a4c3-5425b6c026bf","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Doug\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"9d5e4654-4db5-433f-b66f-d9c0aa89bbe7"},{"name":"Delete tariff","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"5b6f4558-170b-42dc-ba49-143bd94b9385"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete tariff');"],"type":"text/javascript","packages":{},"id":"9be67820-58c6-4a36-86d0-8a6c2f8964d6"}}],"id":"a6356044-322e-4912-b74a-8e43bced3ec8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/tariffs/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>tariff_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariffs",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"81b0dd64-72c4-4aad-96a9-5cd7d2117808","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"a6356044-322e-4912-b74a-8e43bced3ec8"}],"id":"7f959285-edea-4177-9f23-a2304774fc66","description":"<p>Manage pricing tariffs for paid WiFi.</p>\n<p>Tariffs define pricing structures for premium WiFi access.</p>\n<p><strong>Pricing options:</strong></p>\n<ul>\n<li>Time-based (hourly, daily)</li>\n<li>Data-based (MB, GB)</li>\n<li>Unlimited periods</li>\n</ul>\n","_postman_id":"7f959285-edea-4177-9f23-a2304774fc66","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Tariff Groups","item":[{"name":"Add tariff group","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add tariff group');"],"type":"text/javascript","packages":{},"id":"dc960681-f849-4940-879b-7e9fd3240a60"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"720c055d-dfcb-4ba9-a8b8-3556a314d734"}}],"id":"95ca27a6-62c4-43b2-839f-6cc4c26a8179","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\": \"Ena_Olson\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/traffic-group","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["traffic-group"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"9cd91ecc-705f-4e02-9b07-f997c47101f5","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Jay26\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"95ca27a6-62c4-43b2-839f-6cc4c26a8179"},{"name":"Get all tariff groups","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"a674aec9-165b-4906-8994-c75889162b14"}}],"id":"60d822a9-c6c9-4c2a-81d2-39598578378b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/tariff-groups?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariff-groups"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"09fd60c8-961a-421b-87bf-79a829feae11","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"60d822a9-c6c9-4c2a-81d2-39598578378b"},{"name":"Get tariff group","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"848313f8-1b0d-42f6-8c19-54f1003b415c"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get tariff group');"],"type":"text/javascript","packages":{},"id":"b7cafc19-af50-43e2-8fb2-d63225c5e8fa"}}],"id":"10f98819-5da1-48b4-932b-438ff903adc1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/tariff-groups/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>tariff_group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariff-groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"578d8549-0ecd-4e93-b551-0356ca08335c","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"10f98819-5da1-48b4-932b-438ff903adc1"},{"name":"Update tariff group","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update tariff group');"],"type":"text/javascript","packages":{},"id":"3c4c1187-18e8-4800-b4f5-5319645d2471"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"869f9318-f436-425e-a02f-f29efb8cb512"}}],"id":"3d90408a-474d-454c-a0ea-a790a3dd3ba2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"name\":\"Dina_Pfeffer\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/tariff-groups/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>tariff_group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariff-groups","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"88675db9-71fd-4b41-9d17-20441cc34c17","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Diamond\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"3d90408a-474d-454c-a0ea-a790a3dd3ba2"},{"name":"Delete tariff group","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"45befe74-e68f-40b5-8cf4-031978330086"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete tariff group');"],"type":"text/javascript","packages":{},"id":"ae08811e-74be-42b7-bb70-5a108b7417d8"}}],"id":"a10df3cc-b5de-4aee-88c7-a0b93b122ca2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/tariff-groups/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>tariff_group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tariff-groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"f966b349-3ed7-486c-8a12-f1f3b33ff58a","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"a10df3cc-b5de-4aee-88c7-a0b93b122ca2"}],"id":"9feceaf0-1c78-4944-bf90-c0523d32dc0d","description":"<p>Group tariffs for package offerings.</p>\n<p>Combine multiple tariffs into purchasable packages.</p>\n<p><strong>Use cases:</strong></p>\n<ul>\n<li>Bundle deals</li>\n<li>Regional pricing</li>\n<li>Promotional offers</li>\n</ul>\n","_postman_id":"9feceaf0-1c78-4944-bf90-c0523d32dc0d","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Translations","item":[{"name":"Add translation","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add translation');"],"type":"text/javascript","packages":{},"id":"c367fb2d-9c0c-4be7-82cc-22f26e26a81d"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"863e0574-ed9b-4999-aa1f-a856be874338"}}],"id":"63781343-30bd-47e6-ba1b-88ebe6ddfde6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\": \"Lavina9\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/translations","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>version</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>settings</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>language</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>translation_set</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"095dcfbf-459b-41a8-a255-e4f31800c9ce","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Kavon42\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"63781343-30bd-47e6-ba1b-88ebe6ddfde6"},{"name":"Get all translations","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c38ea110-03c3-4aa5-9743-cd4d936b4504"}}],"id":"1572fad6-3203-4943-945c-b704098a5c54","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/translations?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"804dc15b-ae6e-4571-81ed-58b89472dacc","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"1572fad6-3203-4943-945c-b704098a5c54"},{"name":"Get translation","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"44330481-4a0a-4e94-8ab3-c11b838d98b8"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get translation');"],"type":"text/javascript","packages":{},"id":"56a9b86a-17e1-4ae0-af1a-3aed7fce47c7"}}],"id":"adda4e86-b6ea-4781-9de6-fc483abde182","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/translations/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>translation_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"31ba0d50-7efa-4169-b877-981009dcf307","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"adda4e86-b6ea-4781-9de6-fc483abde182"},{"name":"Update translations","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update translations');"],"type":"text/javascript","packages":{},"id":"0329e5b8-1f73-409a-8c9f-6cc1de11efbc"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"bd430d4a-4d9f-431a-8f6f-76214a4c8566"}}],"id":"487f7881-ab99-48e2-aa1d-ae5fc1dc3724","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"username\":\"Davin24\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/translations/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>translation_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>version</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>settings</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>language</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>translation_set</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"6a9d721a-8202-4c20-a2c0-dbaf791dbeb1","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Xzavier\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"487f7881-ab99-48e2-aa1d-ae5fc1dc3724"},{"name":"Delete translation","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"02665566-1ff7-4ff8-98f9-5ff3e7a4a1dc"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete translation');"],"type":"text/javascript","packages":{},"id":"4e026ff8-099d-45ae-8ab5-e03d21589b4b"}}],"id":"70ca3e42-0d80-4427-b540-e73b38c3f0a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/translations/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>translation_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"e0fae3b0-ecec-4655-ae92-abf30b97e045","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"70ca3e42-0d80-4427-b540-e73b38c3f0a5"}],"id":"2b19af88-ea5b-4625-8eb6-e5c30ec20e2e","description":"<p>Manage multi-language support.</p>\n<p>Translations enable captive portals in multiple languages.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Add language translations</li>\n<li>Override default text</li>\n<li>RTL language support</li>\n</ul>\n","_postman_id":"2b19af88-ea5b-4625-8eb6-e5c30ec20e2e","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Tokens","item":[{"name":"Add tokens","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add tokens');"],"type":"text/javascript","packages":{},"id":"5ab5d276-fd31-4492-876d-15483bd5b783"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"bd2742ce-c935-4929-a06e-98a4a2352a85"}}],"id":"a8d71f08-93f7-4bc4-acb5-c7ba378e3aa7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\": \"Bernardo_Rolfson15\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/tokens","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>value</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>parent</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>translation</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["tokens"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"8327ccdf-6474-4c91-bcd9-926342aeb4d1","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Priscilla.Hammes\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"a8d71f08-93f7-4bc4-acb5-c7ba378e3aa7"},{"name":"Get all tokens","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"4ffa7945-d620-41f5-ad95-78c74ce5dfe7"}}],"id":"e6a5249d-89eb-46a2-a12c-0f52a8a6c1cb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/fleets?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["fleets"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"53e8c1b6-9b51-4e1f-b801-6ae7e5514d34","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"e6a5249d-89eb-46a2-a12c-0f52a8a6c1cb"},{"name":"Get tokens","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"39307cc8-089b-4a5c-84a9-9845c512639d"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get tokens');"],"type":"text/javascript","packages":{},"id":"46cd4e1f-2e0e-423d-863d-74bb4c0abab1"}}],"id":"b8de1fad-5248-44bf-82f4-356df7269340","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/translations/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>token_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"777b3256-0a77-44f0-80d2-4708f12fb70c","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"b8de1fad-5248-44bf-82f4-356df7269340"},{"name":"Update tokens","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update tokens');"],"type":"text/javascript","packages":{},"id":"168a0909-040a-4abf-aec5-aec8b1371727"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"440b80ff-990a-44dc-ae29-b7f2858cf57b"}}],"id":"61194c02-e3c5-4103-80a2-f3f740c6e20d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"username\":\"Annamarie15\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/translations/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>token_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>version</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>type</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>settings</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>language</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>translation_set</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"03f17fbf-d7f7-43fd-8a77-660b63286a5f","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Granville\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"61194c02-e3c5-4103-80a2-f3f740c6e20d"},{"name":"Delete token","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"e55060cc-9111-44c0-bcd0-426d0f45f406"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete token');"],"type":"text/javascript","packages":{},"id":"72188e31-75b2-4692-9871-25e4f541a796"}}],"id":"b0874c90-c99a-41e4-b6a8-bc336df6d670","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/translation/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>token_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translation",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"bd8afe7a-cfc8-49c5-9e48-580fb73f52fe","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"b0874c90-c99a-41e4-b6a8-bc336df6d670"}],"id":"125a7d9c-57cf-4229-b5e0-9ad720d040c0","description":"<p>Manage API access tokens.</p>\n<p>API tokens provide programmatic access to IronWiFi.</p>\n<p><strong>Token types:</strong></p>\n<ul>\n<li>Read-only tokens</li>\n<li>Full access tokens</li>\n<li>Scoped tokens</li>\n</ul>\n","_postman_id":"125a7d9c-57cf-4229-b5e0-9ad720d040c0","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Configurations","item":[{"name":"Add configuration","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add configuration');"],"type":"text/javascript","packages":{},"id":"a6191f6f-65f4-4e8a-a08e-6a2fa8cf614b"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"54a13228-e8f6-44fa-8a18-2536c3b161ff"}}],"id":"fa165d0c-8d99-4b0e-a8b2-6e926ae3fd24","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\": \"Monty53\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/configurations","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["configurations"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"5cb7f651-32c6-49db-917c-58949f92f849","name":"Add employee","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"Daniella_Wisoky\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"29ea0c27c839d5ec471d7af7b34cd5a7;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:32 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"162"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"fa165d0c-8d99-4b0e-a8b2-6e926ae3fd24"},{"name":"Get all configurations","event":[{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"52b5f333-d7d4-4bcd-bd45-00ef757f07ee"}}],"id":"503ceaf6-3d9a-4de4-81e6-7aa3bda0b45d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/configurations?page=1&filter=&sort=&format=&page_size=25","description":"<p>Get a list of fleets</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["configurations"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"4d15f632-61be-4bc5-916d-3854ebe6a991","name":"Get all employees","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"523d0357d04712e9ba12f9092a5699f6;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:47:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"total_items\":5,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"users\":[{\"id\":\"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\"username\":\"florian.turcotte72\",\"email\":null,\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:18:24.141060905Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\"username\":\"lennie.predovic\",\"email\":\"\",\"firstname\":null,\"lastname\":null,\"fullname\":null,\"notes\":null,\"user_type\":\"e\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":\"2025-07-17T22:47:32.009604764Z\",\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"42de6c62-96e0-41dd-8732-34bf86a251b5\",\"username\":\"username22\",\"email\":\"steve@example.com\",\"firstname\":\"steve\",\"lastname\":\"smith\",\"fullname\":\"steve smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"572d3c06-c94d-4f60-a9c1-809d818c2439\",\"username\":\"username21\",\"email\":\"jane@example.com\",\"firstname\":\"jane\",\"lastname\":\"smith\",\"fullname\":\"jane smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null},{\"id\":\"6946d8ab-e47c-49ce-8d19-2b7f86de7edd\",\"username\":\"username20\",\"email\":\"john@example.com\",\"firstname\":\"john\",\"lastname\":\"smith\",\"fullname\":\"john smith\",\"notes\":null,\"user_type\":\"\",\"series\":null,\"phone\":null,\"owner_id\":\"i-07171f6e\",\"creationdate\":null,\"deletiondate\":null,\"authdate\":null,\"source\":null}]}}"}],"_postman_id":"503ceaf6-3d9a-4de4-81e6-7aa3bda0b45d"},{"name":"Get configuration","event":[{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"de63817a-9fff-4a67-ba7d-dca5c269543a"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Get configuration');"],"type":"text/javascript","packages":{},"id":"f650dd86-7db2-49f6-9455-67dbf8aad552"}}],"id":"c4dc9842-a63a-44f2-a6b7-865b577ff5f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/configurations/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>configuration_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["configurations",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"df17904a-cfe6-4cc5-a089-2b4b4f826326","name":"Get employee","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/employees/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"91486aef54bd1bcd8193d5072e15f3ae"},{"key":"date","value":"Thu, 17 Jul 2025 22:48:29 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1110"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",\n    \"username\": \"lennie.predovic\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": \"\",\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"shared_codes\": [],\n    \"session_limits\": {\n        \"consumed_data\": 0,\n        \"consumed_time\": 0\n    },\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"\n        }\n    }\n}"}],"_postman_id":"c4dc9842-a63a-44f2-a6b7-865b577ff5f8"},{"name":"Update configuration","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update configuration');"],"type":"text/javascript","packages":{},"id":"1dac6e7b-5659-4675-a970-dfbba634748b"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"5d1750e0-6447-46d3-a0ff-6d2c1a35f2a3"}}],"id":"41759619-09fd-4770-8357-5606c7643a93","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"name\":\"Cordia.Mann43\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/translations/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>configuration_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["translations","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"77edf05d-b2cf-490d-8a18-22807f6e513c","name":"Update employee","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Judd\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/employees/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"6f044a054c792fef33fb424a77cce794"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:03 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"143"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstname\": \"Lourdes\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"\n        }\n    }\n}"}],"_postman_id":"41759619-09fd-4770-8357-5606c7643a93"},{"name":"Delete configuration","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"601a34db-f3a5-4b4e-96dd-fb181967a683"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete configuration');"],"type":"text/javascript","packages":{},"id":"306ea05d-3bb9-4267-915c-279ed61bf969"}}],"id":"12e7deea-3122-4506-ba53-52e78491a0bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/configurations/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>configuration_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["configurations",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"73d22dec-8cec-42ac-b878-72337a9c8a2f","name":"Delete employee","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/employees/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"6ecac54d3f657ca2435542225a6aafef"},{"key":"date","value":"Thu, 17 Jul 2025 22:49:29 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"12e7deea-3122-4506-ba53-52e78491a0bc"}],"id":"9ae8ad76-3cd1-4bc2-a652-42f9cb9cfcff","description":"<p>Manage WiFi configurations and profiles.</p>\n<p>Configurations define WiFi network settings for device provisioning.</p>\n<p><strong>Settings:</strong></p>\n<ul>\n<li>SSID configuration</li>\n<li>Security settings</li>\n<li>Certificate assignment</li>\n<li>Proxy settings</li>\n</ul>\n","_postman_id":"9ae8ad76-3cd1-4bc2-a652-42f9cb9cfcff","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Guests","item":[{"name":"Get all guests","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all guests');"],"type":"text/javascript","packages":{},"id":"280ff3e5-9444-49fa-9f01-4ca086937497"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"0441e8c2-73e7-4e08-914b-bcb8d5c0a3e5"}}],"id":"4935c79d-c46b-4c9f-be58-c2fa80fff14f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/guests?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guests"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"719ef0c2-5a21-4cab-9037-d22a7c95ad0c","name":"Get all guests","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/guests?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["guests"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"guests\": [\n            {\n                \"id\": \"cd9d9e09-00e9-45ae-8d5b-53f61cc306fa\",\n                \"email\": \"guest@example.com\",\n                \"name\": \"John Doe\",\n                \"created\": \"2025-12-10T04:48:22.519488Z\"\n            }\n        ]\n    },\n    \"total_items\": 100,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"4935c79d-c46b-4c9f-be58-c2fa80fff14f"},{"name":"Get guest","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get guest');"],"type":"text/javascript","packages":{},"id":"1b6a44e0-47c2-469d-9f90-b3c43f300ac1"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"06089422-8d49-447e-b688-2508bca07b9b"}}],"id":"89bcdbc6-339c-4470-897f-e1344e05206c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/guests/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>guest_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guests",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"bd1fced6-b9a3-4840-a2f4-3f6cafcb74cd","name":"Get guest","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/guests/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"550f16e7-b86a-4aea-83e3-a03880498fdc\",\n    \"email\": \"guest@example.com\",\n    \"name\": \"John Doe\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/guests/{id}\"\n        }\n    }\n}"}],"_postman_id":"89bcdbc6-339c-4470-897f-e1344e05206c"},{"name":"Delete guest","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"7050979c-5b69-4685-905e-99deba645023"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete guest');"],"type":"text/javascript","packages":{},"id":"af15dd7b-f23a-43c2-ac03-4d2090978775"}}],"id":"6c89a495-2a29-4cfd-94cd-38ac33142eb2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/guests/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>guest_id</code> (URL parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["guests",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"bba26b1a-c5db-4079-afb4-df78bc42b5b6","name":"Delete guest","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/guests/"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"6c89a495-2a29-4cfd-94cd-38ac33142eb2"}],"id":"c094d88e-8152-45a3-80bd-f43f22fae741","description":"<p>Manage guest user accounts.</p>\n<p>Guests are temporary WiFi users with time-limited access.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Create guest accounts</li>\n<li>Set validity period</li>\n<li>Track usage</li>\n</ul>\n","_postman_id":"c094d88e-8152-45a3-80bd-f43f22fae741","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Users","item":[{"name":"Add user","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add user');"],"type":"text/javascript","packages":{},"id":"e1fef927-7dbd-4459-9fac-975fa7b668d3"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"a0fc6669-c7dc-414a-8b1f-1d0beeff0aeb"}}],"id":"0b3510e8-f8b1-4bf7-ab3b-4dc4befff3ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>username</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"0a3f7a26-16c0-4e86-a839-b4b500aa5564","name":"Add user","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"username\": \"{{generatedUsername}}\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/users/1ad4e93d-8a54-47ac-9122-eb7e2d7226ad"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/users/1ad4e93d-8a54-47ac-9122-eb7e2d7226ad"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"ba06b583fb61b4a0c0ddc935ae9feef1"},{"key":"date","value":"Thu, 17 Jul 2025 22:18:24 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"158"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/users/1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\"\n        }\n    }\n}"}],"_postman_id":"0b3510e8-f8b1-4bf7-ab3b-4dc4befff3ec"},{"name":"Get all users","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all users');"],"type":"text/javascript","packages":{},"id":"3cebaffb-ff66-444a-ad4d-fab77f97cef5"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"fe2cdfb5-28c6-4786-8caa-e070888674ad"}}],"id":"d39df754-a0d6-4537-8a84-da159cff8de6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/users?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"e56dfaac-7f52-491c-abd6-bc49a2fc3478","name":"Get all users","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/users?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["users"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"users\": [\n            {\n                \"id\": \"968a277b-666f-49ee-bdb5-ccf826b4ba57\",\n                \"username\": \"user@example.com\",\n                \"group_id\": \"b6fcef70-e0c1-4278-ae52-6e73b6ffd893\",\n                \"disabled\": 0\n            }\n        ]\n    },\n    \"total_items\": 50,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"d39df754-a0d6-4537-8a84-da159cff8de6"},{"name":"Get user by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get user by ID');"],"type":"text/javascript","packages":{},"id":"ddda9e17-82a7-42db-b783-39f6d78df111"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"cd27f861-e764-40b2-ac4e-fe5d815455a1"}}],"id":"f3d16fbc-4393-49b7-8428-ee73752d4416","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/users/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>user_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"8ba18740-9632-4095-a7b0-53db4ad42a16","name":"Get user by ID","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/users/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"206459e24fa20af2b08457c1494e9a51;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:19:07 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1038"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",\n    \"username\": \"florian.turcotte72\",\n    \"firstname\": null,\n    \"lastname\": null,\n    \"email\": null,\n    \"department\": null,\n    \"company\": null,\n    \"workphone\": null,\n    \"homephone\": null,\n    \"mobilephone\": null,\n    \"address\": null,\n    \"city\": null,\n    \"state\": null,\n    \"country\": null,\n    \"zip\": null,\n    \"notes\": null,\n    \"changeuserinfo\": null,\n    \"portalloginpassword\": null,\n    \"enableportallogin\": null,\n    \"creationdate\": \"2025-07-17T22:18:24.141060905Z\",\n    \"creationby\": \"9ad445a4-5cea-4e\",\n    \"updatedate\": null,\n    \"updateby\": null,\n    \"deletiondate\": null,\n    \"owner_id\": \"i-07171f6e\",\n    \"source\": null,\n    \"type\": null,\n    \"mac_address\": null,\n    \"authdate\": null,\n    \"orgunit\": null,\n    \"thumbnailphotourl\": null,\n    \"orig_response\": null,\n    \"authsource\": \"local\",\n    \"series\": null,\n    \"client_mac\": null,\n    \"ap_mac\": null,\n    \"dn\": null,\n    \"stripe_customer_id\": null,\n    \"personal_data\": null,\n    \"email_confirmed\": null,\n    \"user_type\": \"e\",\n    \"user_owner\": null,\n    \"migration_shard_id\": \"0c3bfb62-d4c3-4fa2-949c-4cef5f4d7aa5\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/users/1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\"\n        }\n    }\n}"}],"_postman_id":"f3d16fbc-4393-49b7-8428-ee73752d4416"},{"name":"Get user by Username","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get user by Username');"],"type":"text/javascript","packages":{},"id":"87464155-36a2-4846-b4d0-3c9c0283d235"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"d3a875a2-cd58-407f-9cd5-6654385de054"}}],"id":"7ec5be20-f7f8-46f6-ae27-7fd718201941","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/users/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>username</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"b52a0513-4629-4eef-a42d-03ca23a14b42","name":"Get user by Username","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/users/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"fee30218-c76e-41e4-b346-4922682d5137\",\n    \"username\": \"user@example.com\",\n    \"group_id\": \"df8fedaa-1022-4546-93b4-24f7163a717d\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/users/{id}\"\n        }\n    }\n}"}],"_postman_id":"7ec5be20-f7f8-46f6-ae27-7fd718201941"},{"name":"Update user","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update user');"],"type":"text/javascript","packages":{},"id":"8596de24-8146-437f-8409-c442a996648a"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"63509ec2-2839-4ab3-9bc8-0c0a1cc3751a"}}],"id":"130ed38a-fc61-4bed-9e5e-90754346e471","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Gladyce\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users/\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>user_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>username</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>firstname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>lastname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>email</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>authsource</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users","\n"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"0b66feab-109f-439d-8193-4c533ed28f7b","name":"Update user","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"firstname\":\"Cordelia\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/users/\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"2b2b7dba-7941-4a0c-880d-38b8ba70ce57\",\n    \"username\": \"updateduser@example.com\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/users/{id}\"\n        }\n    }\n}"}],"_postman_id":"130ed38a-fc61-4bed-9e5e-90754346e471"},{"name":"Delete user","event":[{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"cea03d03-ad05-4ae5-a256-165b504e70b4"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete user');"],"type":"text/javascript","packages":{},"id":"e9787cc7-f440-46e2-b2cf-e987cc909d14"}}],"id":"71dea516-5977-4684-b83e-86da9092a918","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/users/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>user_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["users",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"182673c3-0c17-4d3b-a226-ce8c355891f5","name":"Delete user","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/users/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"bbd41ce3820e065e83002f999d8572b9;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:53:55 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"71dea516-5977-4684-b83e-86da9092a918"}],"id":"6e6b6fda-ff36-479d-a658-34b01d861f00","description":"<p>Manage RADIUS user accounts.</p>\n<p>Users are permanent accounts that authenticate via RADIUS (802.1X, PAP, etc.).</p>\n<p><strong>Operations:</strong></p>\n<ul>\n<li>Create/update user credentials</li>\n<li>Set RADIUS attributes</li>\n<li>Manage group membership</li>\n<li>Reset passwords</li>\n</ul>\n","_postman_id":"6e6b6fda-ff36-479d-a658-34b01d861f00","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Certificates","item":[{"name":"Add certificate","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add certificate');"],"type":"text/javascript","packages":{},"id":"462bdae8-7c25-4e29-a289-2a814a9d285c"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"607cbaa5-1d80-49c6-bcbc-46a74ce24f34"}}],"id":"34186661-1c88-41b7-aae7-d48da3742b22","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"userid\": \"\",\n    \"distribution\": \"downloadcert\",\n    \"validity\": \"175\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/certificates","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>userid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>distribution</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>validity</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"4c86c671-7bce-4493-b403-dd1755efc5fb","name":"Add certificate","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"userid\": \"\",\n    \"distribution\": \"downloadcert\",\n    \"validity\": \"175\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/certificates"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/certificates/17529324097195"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/certificates/17529324097195"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"680d53503f8dcd081b02de5fb072547c"},{"key":"date","value":"Sat, 19 Jul 2025 13:40:13 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"319"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"serial\": \"0ff15d22ceab\",\n    \"id\": 17529324097195,\n    \"path\": \"https://console-dev.ironwifi.io/api/certificates/a68e1c94-1227-4b87-9001-4415d4354e0e\",\n    \"path_id\": \"a68e1c94-1227-4b87-9001-4415d4354e0e\",\n    \"pkcs12_pass\": \"NbiMj4CT5q\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/certificates/17529324097195\"\n        }\n    }\n}"}],"_postman_id":"34186661-1c88-41b7-aae7-d48da3742b22"},{"name":"Get all certificates","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all certificates');"],"type":"text/javascript","packages":{},"id":"6fea3da7-c752-452f-b5da-707edf1a8e4e"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"dc3a38ac-e218-4ab3-8014-97ebc0c7c294"}}],"id":"bf8aac5e-41a1-4685-bb55-50995b885c70","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/certificates?userid=","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>userid</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates"],"host":["{{baseUrl}}"],"query":[{"key":"userid","value":""}],"variable":[]}},"response":[{"id":"122c6b77-bc6b-413d-bdff-d15af4a4c0d7","name":"Get all certificates","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/certificates?userid=","host":["{{baseUrl}}"],"path":["certificates"],"query":[{"key":"userid","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"14caf6596950cf5d1025ae5039e742b0"},{"key":"date","value":"Sat, 19 Jul 2025 13:40:31 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"page_size\":25,\"_embedded\":{\"certificates\":[{\"id\":\"17529324097195\",\"user_id\":\"29544fa0-edbc-4c72-bb66-64624b856158\",\"serial\":\"0ff15d22ceab\",\"status\":\"valid\",\"creationdate\":\"2025-07-19T13:40:12.663347467Z\",\"expirationdate\":\"2026-01-10T21:40:12.000000Z\",\"revocationdate\":null,\"cn\":null,\"subject\":null}]},\"total_items\":1,\"page\":1,\"page_count\":1}"}],"_postman_id":"bf8aac5e-41a1-4685-bb55-50995b885c70"},{"name":"Get certificate","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get certificate');"],"type":"text/javascript","packages":{},"id":"bb63eb3c-2928-4665-ac0f-4779866f6466"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"bd573fca-386c-4fa5-ab4f-6c1f80b21656"}}],"id":"9e5a3e38-5ea9-4ffb-b9f0-7191e94b6a44","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/certificates/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>path_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"caa18460-d605-42ce-92e0-34b677df6bb0","name":"Get certificate","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/certificates/","description":"**Parameters:**\n\n- `path_id` (Query parameter, type: `string`, required: `yes`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"825dab28-2325-4044-ade1-54bf3ffff06f\",\n  \"name\": \"WiFi Certificate\",\n  \"type\": \"user\",\n  \"subject\": \"CN=user@example.com\"\n}"}],"_postman_id":"9e5a3e38-5ea9-4ffb-b9f0-7191e94b6a44"},{"name":"Get SCEP GetCACaps","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get SCEP GetCACaps');"],"type":"text/javascript","packages":{},"id":"26a079e0-691f-40e9-a19b-cdc722622bbf"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"463810f5-eaa6-482a-af26-327da08a5370"}}],"id":"6f222be5-bc9f-4b07-9436-4082b16568d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/certificates/pkiclient.exe?operation=GetCACaps&message=default","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>operation</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates","pkiclient.exe"],"host":["{{baseUrl}}"],"query":[{"key":"operation","value":"GetCACaps"},{"key":"message","value":"default"}],"variable":[]}},"response":[{"id":"6f110f68-62e7-4012-8cc7-fa921480633d","name":"Get SCEP GetCACaps","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/certificates/pkiclient.exe?operation=GetCACaps&message=default","host":["{{baseUrl}}"],"path":["certificates","pkiclient.exe"],"query":[{"key":"operation","value":"GetCACaps"},{"key":"message","value":"default"}]}},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"content-type","value":"text/plain;charset=utf-8"},{"key":"x-cloud-trace-context","value":"f662409a05b8c403880ed6b8668ca2d4;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:47:51 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"60"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"Renewal\nSHA-1\nSHA-256\nAES\nDES3\nSCEPStandard\nPOSTPKIOperation"}],"_postman_id":"6f222be5-bc9f-4b07-9436-4082b16568d7"},{"name":"Get SCEP GetCACert","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get SCEP GetCACert');"],"type":"text/javascript","packages":{},"id":"c26965ec-27d2-45ec-b4df-3e74c33c32a1"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"86443bb3-73ee-4b6f-9efd-abeb2c0bfff1"}}],"id":"d30fea57-f672-48fe-88d7-c33374aa80ff","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/certificates/pkiclient.exe?operation=GetCACert&message=default","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>operation</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates","pkiclient.exe"],"host":["{{baseUrl}}"],"query":[{"key":"operation","value":"GetCACert"},{"key":"message","value":"default"}],"variable":[]}},"response":[{"id":"4403e822-77ac-4fe9-9644-3b8ba177d70a","name":"Get SCEP GetCACert","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/certificates/pkiclient.exe?operation=GetCACert&message=default","host":["{{baseUrl}}"],"path":["certificates","pkiclient.exe"],"query":[{"key":"operation","value":"GetCACert"},{"key":"message","value":"default"}]}},"status":"OK","code":200,"_postman_previewlanguage":"raw","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"content-type","value":"application/x-x509-ca-cert"},{"key":"x-cloud-trace-context","value":"11c4dc8c5a2e4f6f5778eed66f195fac;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:48:01 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1615"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"0�\u0006K0�\u00043�\u0003\u0002\u0001\u0002\u0002\u0002\u0010\u00000\r\u0006\t*�H��\r\u0001\u0001\u000b\u0005\u00000��1\u000b0\t\u0006\u0003U\u0004\u0006\u0013\u0002US1\u00100\u000e\u0006\u0003U\u0004\b\f\u0007Florida1\u00100\u000e\u0006\u0003U\u0004\u0007\f\u0007Orlando1\u00160\u0014\u0006\u0003U\u0004\n\f\rIronWiFi, LLC1#0!\u0006\u0003U\u0004\u000b\f\u001aRoot Certificate Authority1\u001d0\u001b\u0006\u0003U\u0004\u0003\f\u0014IRONWIFI RSA Root CA0\u001e\u0017\r240405151506Z\u0017\r340405151506Z0��1\u000b0\t\u0006\u0003U\u0004\u0006\u0013\u0002US1\u00100\u000e\u0006\u0003U\u0004\b\f\u0007Florida1\u00100\u000e\u0006\u0003U\u0004\u0007\f\u0007Orlando1\u00160\u0014\u0006\u0003U\u0004\n\f\rIronWiFi, LLC1+0)\u0006\u0003U\u0004\u000b\f\"SCEP Signing Certificate Authority1\u001d0\u001b\u0006\u0003U\u0004\u0003\f\u0014IRONWIFI RSA SCEP CA0�\u0002\"0\r\u0006\t*�H��\r\u0001\u0001\u0001\u0005\u0000\u0003�\u0002\u000f\u00000�\u0002\n\u0002�\u0002\u0001\u0000�){�D���� �}�US��dn���\u0015��>�p�)՗3���A��\u0017\\��{�8�W�cQ�k͠k��޳?.c\u0016C��G\u0000\u001c��\u000e�7����҂~�Cd�F/EA$��\u0000\u001ee��\u0003@0J��gU�\u0000\u0010�,7Ȓ\u0005�f\u0017:7�Q\u0017\u0017�)�th%�'A/\u0006sBE���� �f�� �\u001c��4֯��#����Qf\u0012G�A\u001ef\u001d(s\u0018��d����\u0015\u001fIXA����D�Z\u0017\u00116U\u0011�����x���\u0011�Iͥ�-�\u0001�\u0001�\u001e�\t^�T�\u001a9�\u0015����r��B��\u0016�r������W�w���\u0013z\\�N�\u000b���$e����p���R\u0007�\f�*���r�+|��H���z\u000b\u001b�]��A\f�\rm�|iW)��\u0000>f�>�ռ�ﯘ�ಐ\u0000ڐ\u001d�,��8↠\u0018��\u0005�a���� D�vJ\nf\u0014���Q�Z���\u0017v2q��\u0000\u001d}<�I=����v��M�\u0000\u0003\u001bk�I�B� \u0016N�h��#{�~�X�?cy\u001dy�|�D�k`KXq�`br&�\u0013�\u001bs\t�J;f|�\u001b�\u001a\u0003�m�\u0018�̂�A�2,Z�\u0012���0=5�\fU���ýXVU��\u0016l\u001eȆ�\u001f\u0010Q.�\b�\u000e��l)>�Is\u0002\u0003\u0001\u0000\u0001���0��0\u001d\u0006\u0003U\u001d\u000e\u0004\u0016\u0004\u0014��D�\u000b\u0007C�\tg��u\u0005rs�~П0\u001f\u0006\u0003U\u001d#\u0004\u00180\u0016�\u0014B��\u0000?^$k\u000fW��\\��F�\t0�0\u0012\u0006\u0003U\u001d\u0013\u0001\u0001�\u0004\b0\u0006\u0001\u0001�\u0002\u0001\u00000\u000e\u0006\u0003U\u001d\u000f\u0001\u0001�\u0004\u0004\u0003\u0002\u0001�0A\u0006\u0003U\u001d\u001f\u0004:0806�4�2�0http://ca.ironwifi.com/crl/ironwifirsascepca.crl0\r\u0006\t*�H��\r\u0001\u0001\u000b\u0005\u0000\u0003�\u0002\u0001\u0000/xy+W��N`���\u0011\rJlh��r:���~h��F�\u0010��m��i�rM��\u001e�?f,\u001a\r�۪-!\u0012�C<(��=\u0018~�0ԯ��ȡ�m�~�AKjK�����N�e�i|^�?�:L+J�j�l_�\b�;����nH!��Q�jX{89��/g�\u0017�R�MG���\u0005\u0005�\u001c]w��\n�̤�+\tIT�S�R��=\u001b�pi�\u0006:��N\t�zG��\u0012������D�\u0004�P|\u0018~1���}\u0005\b't��M��Z}CX?\u0018����G�\\��p\u001c��� �c�L�b�(1��\u0013�f���\u0004)�<�{ ݏ��\u0006��%�m*D�\u0015�d�wJ\f��,κ\rz}H�\u000e��V��\u0019�OF\u001dt�R���MͬW\u001cP�3��D�~��;���Lw3>\u001a�{�����\u0015�\u0007B^\u0001�A.T\u000e��M�h�c\\��\u0004�0U%��l\u0010'�\u001c\u0006�\u000bg�gR\u001d*y6\u0017o\u0010l9��&(]�;\f�Ԛxq�\u001d���=�:��RC�ȶ?s��l+͢%��<��Gi.\u0007�ɤ��۱��\u0019�+�XT�\f�\u0017\f�Hj�\u0016�U\biG�r�,����z�ż��'�Ŷ�J��ꙴ�F \u001a��I�m2� � �}�"}],"_postman_id":"d30fea57-f672-48fe-88d7-c33374aa80ff"},{"name":"Add SCEP PKIOperation","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add SCEP PKIOperation');"],"type":"text/javascript","packages":{},"id":"30ba6228-cf11-4a64-a824-e9a1e5a283ba"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"8e0828bf-c8df-4847-a648-cca7f3b8bb99"}}],"id":"faec6294-3466-47b7-9513-8a0ec9478c02","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"userid\": \"\",\n    \"distribution\": \"downloadcert\",\n    \"validity\": \"175\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/certificates/pkiclient.exe?operation=PKIOperation","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>userid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>distribution</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>validity</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates","pkiclient.exe"],"host":["{{baseUrl}}"],"query":[{"key":"operation","value":"PKIOperation"}],"variable":[]}},"response":[{"id":"a03c6355-662c-4862-b5cd-e483dd5bdda3","name":"Add SCEP PKIOperation","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"userid\": \"\",\n    \"distribution\": \"downloadcert\",\n    \"validity\": \"175\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"{{baseUrl}}/certificates/pkiclient.exe?operation=PKIOperation","host":["{{baseUrl}}"],"path":["certificates","pkiclient.exe"],"query":[{"key":"operation","value":"PKIOperation"}]},"description":"**Parameters:**\n\n- `userid` (Body parameter, type: `string`, required: `yes`)\n    \n- `distribution` (Body parameter, type: `string`, required: `yes`)\n    \n- `validity` (Body parameter, type: `integer`, required: `yes`)"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"96646df7-8307-4017-8ff9-f80fe19bfff1\",\n  \"name\": \"New Certificate\",\n  \"download_url\": \"https://console.ironwifi.io/api/certificates/{id}/download\"\n}"}],"_postman_id":"faec6294-3466-47b7-9513-8a0ec9478c02"},{"name":"Revoke certificate","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Revoke certificate');"],"type":"text/javascript","packages":{},"id":"0d2f6869-f03f-4819-be95-3f8d0253cb50"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"c56079da-bd05-49c1-ac54-0f29a3e57c3a"}}],"id":"5a30426f-96e3-49ca-b6de-bd3cd950db22","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"status\":\"revoked\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/certificates/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>certificate_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>status</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"8984c0ce-6ca2-4158-abc5-96920a20eb9d","name":"Revoke certificate","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"status\":\"revoked\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/certificates/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"44e847bf4b387777c849db7099203466"},{"key":"date","value":"Sat, 19 Jul 2025 13:42:55 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"118"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"revoked\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/certificates/17529325598817\"\n        }\n    }\n}"}],"_postman_id":"5a30426f-96e3-49ca-b6de-bd3cd950db22"},{"name":"Delete certificate","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete certificate');"],"type":"text/javascript","packages":{},"id":"2b7b4161-cbe0-40b6-b9dc-2000e960ce03"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"065d7336-ff3e-4ebe-8f1a-f6cecbb38a94"}}],"id":"14d24b90-b021-4227-854f-6bcaaf0ce3f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/certificates/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>certificate_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["certificates",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"abf8515b-d1ad-41c6-a551-e6e27fd07308","name":"Delete certificate","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/certificates/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"0795ce00554fa5cb12dfbd6a1cb4d573"},{"key":"date","value":"Sat, 19 Jul 2025 13:43:09 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"14d24b90-b021-4227-854f-6bcaaf0ce3f1"}],"id":"b8f36773-b3f2-4c10-add3-873cac04c4d9","description":"<p>Manage TLS/SSL certificates.</p>\n<p>Certificates are used for 802.1X (EAP-TLS) authentication and RADIUS server identity.</p>\n<p><strong>Certificate types:</strong></p>\n<ul>\n<li>CA certificates</li>\n<li>Server certificates</li>\n<li>Client certificates</li>\n<li>RADIUS server certs</li>\n</ul>\n","_postman_id":"b8f36773-b3f2-4c10-add3-873cac04c4d9","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Vouchers","item":[{"name":"Generate voucher","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Generate voucher');"],"type":"text/javascript","packages":{},"id":"0844ef8d-1711-4a82-af1c-76792ab54840"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"6d7b5c25-ad78-4b81-bc84-751ecf458cf4"}}],"id":"f7ceb1aa-c00f-4040-9034-9d4a8fbf099f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"voucher_quantity\":1,\n\t\"voucher_devices\":1,\n\t\"voucher_format\":\"letters_password\",\n\t\"voucher_length\":5,\n\t\"voucher_duration\":2,\n\t\"voucher_deletedate\":30,\n    \"group_id\":\"xxx\",\n    \"orgunitid\":\"yyy\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>voucher_quantity</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_devices</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_format</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_length</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_duration</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_deletedate</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>group_id</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunitid</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"3589ad47-1811-46c6-aaa7-09866879a4fa","name":"Generate voucher","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"voucher_quantity\":1,\n\t\"voucher_devices\":1,\n\t\"voucher_format\":\"letters_password\",\n\t\"voucher_length\":5,\n\t\"voucher_duration\":2,\n\t\"voucher_deletedate\":30,\n    \"group_id\":\"xxx\",\n    \"orgunitid\":\"yyy\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/vouchers/0676eeb3-082b-4953-8c1f-2a523e8c466d"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/vouchers/0676eeb3-082b-4953-8c1f-2a523e8c466d"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"16d8319be2c174322871ae497d1ca831;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:49:21 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"245"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"link\": \"v2507200949\",\n    \"id\": \"0676eeb3-082b-4953-8c1f-2a523e8c466d\",\n    \"username\": \"sdkwy\",\n    \"generated_vouchers\": \"sdkwy\",\n    \"code\": \"sdkwy\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/0676eeb3-082b-4953-8c1f-2a523e8c466d\"\n        }\n    }\n}"}],"_postman_id":"f7ceb1aa-c00f-4040-9034-9d4a8fbf099f"},{"name":"Add voucher","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add voucher');"],"type":"text/javascript","packages":{},"id":"a27ac55d-bff3-43c5-b9e9-6fec2826d2a0"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"b4270c63-e190-42ee-9f2e-4d2e00e3b014"}}],"id":"be5e7e7f-6ba7-4952-8259-62c4c74dac2e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"voucher_code\":\"eos\",\n\t\"voucher_devices\":1,\n\t\"voucher_duration\":2,\n\t\"voucher_deletedate\":30\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>voucher_code</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_devices</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_duration</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>voucher_deletedate</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>group_id</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>orgunitid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"ecfbdf4c-a849-4abc-80a6-495d408d5f71","name":"Add voucher","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"voucher_code\":\"aut\",\n\t\"voucher_devices\":1,\n\t\"voucher_duration\":2,\n\t\"voucher_deletedate\":30\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/vouchers/ff0459f97996b603"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/vouchers/ff0459f97996b603"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"93fabd88e13505af57bd097b4c534ca5;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:51:30 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"161"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"link\": true,\n    \"id\": \"ff0459f97996b603\",\n    \"username\": \"ab\",\n    \"code\": \"ab\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/ff0459f97996b603\"\n        }\n    }\n}"}],"_postman_id":"be5e7e7f-6ba7-4952-8259-62c4c74dac2e"},{"name":"Get all vouchers","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all vouchers');"],"type":"text/javascript","packages":{},"id":"038a8d14-f95d-40ec-ab4a-1761ac0a2973"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"7f32ff28-b639-4f12-99d0-7e72961aff18"}}],"id":"602553ad-6e22-45b9-94e1-07c63aa368ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers?page=1&filter=&sort=&format=&page_size=25&include_share_codes=false","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>include_share_codes</code> (Query parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"},{"key":"include_share_codes","value":"false"}],"variable":[]}},"response":[{"id":"f85107d0-1f01-4ac6-9d1f-1973002dd0cc","name":"Get all vouchers","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/vouchers?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["vouchers"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"4164bb5aff05da2a4c377937ee6d139a"},{"key":"date","value":"Sun, 20 Jul 2025 09:51:05 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"voucher_templates\":[],\"total_items\":1,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"vouchers\":[{\"id\":\"dbb4c6272c476375\",\"code\":\"expedita\",\"username\":\"expedita\",\"notes\":\"\",\"user_type\":\"v\",\"series\":\"voucher v2507192201\",\"creationdate\":\"2025-07-19T22:01:38.684177749Z\",\"deletiondate\":\"2025-08-18T22:01:38.000000Z\",\"authdate\":null,\"source\":\"voucher_generator\",\"transaction_token\":null,\"total_time\":null,\"acctsessiontime\":null,\"data_total_bytes\":null,\"acctinputoctets\":null,\"acctoutputoctets\":null,\"status\":\"valid\"}]}}"}],"_postman_id":"602553ad-6e22-45b9-94e1-07c63aa368ae"},{"name":"Get generated vouchers as CSV","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get generated vouchers as CSV');"],"type":"text/javascript","packages":{},"id":"bd54b7b0-bb3a-463f-a1ec-eb54bd1857c4"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"f6f51fd6-1497-4b0f-b747-85024a044d35"}}],"id":"ef8d6c2d-8c79-4ca4-9013-faf725e1b42f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers?filter=&format=csv","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":"csv"}],"variable":[]}},"response":[{"id":"37f918f4-2dd0-46f2-8477-e56f45d2f224","name":"Get all vouchers","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/vouchers?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["vouchers"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"4164bb5aff05da2a4c377937ee6d139a"},{"key":"date","value":"Sun, 20 Jul 2025 09:51:05 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"voucher_templates\":[],\"total_items\":1,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"vouchers\":[{\"id\":\"dbb4c6272c476375\",\"code\":\"expedita\",\"username\":\"expedita\",\"notes\":\"\",\"user_type\":\"v\",\"series\":\"voucher v2507192201\",\"creationdate\":\"2025-07-19T22:01:38.684177749Z\",\"deletiondate\":\"2025-08-18T22:01:38.000000Z\",\"authdate\":null,\"source\":\"voucher_generator\",\"transaction_token\":null,\"total_time\":null,\"acctsessiontime\":null,\"data_total_bytes\":null,\"acctinputoctets\":null,\"acctoutputoctets\":null,\"status\":\"valid\"}]}}"},{"id":"c55476c4-2484-4bc0-9562-6ac78f351db2","name":"Get all vouchers Copy","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/vouchers?filter=&format=csv","host":["{{baseUrl}}"],"path":["vouchers"],"query":[{"key":"filter","value":""},{"key":"format","value":"csv"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"7eaa890ff187ca9648364fee5dc27fbf;o=1"},{"key":"date","value":"Tue, 05 Aug 2025 14:27:54 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"voucher_templates\":[],\"csv\":\"id,code,username,notes,user_type,series,creationdate,deletiondate,authdate,source,transaction_token,total_time,acctsessiontime,data_total_bytes,acctinputoctets,acctoutputoctets,status\\neb1b9ec6-bb43-435a-9ba1-067d564fc198,tpvyi,tpvyi,,v,\\\"voucher v2508051427\\\",2025-08-05T14:27:41.546717987Z,2025-09-04T14:27:41.000000Z,,voucher_generator,,,,,,,valid\\n\"}"}],"_postman_id":"ef8d6c2d-8c79-4ca4-9013-faf725e1b42f"},{"name":"Get voucher by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get voucher by ID');"],"type":"text/javascript","packages":{},"id":"f392d85e-d9ee-4ca8-82d9-49b2caa4daa2"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"f97286d0-9802-4dc1-9e18-2773c0465089"}}],"id":"3e399c99-7317-44ce-a9aa-edd642e24bcb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>voucher_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"525dc880-38e1-40df-83c1-89519a1d3e20","name":"Get voucher by ID","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"d8fa9f0f1d9137030a1f56cdf64bbfb5;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:52:40 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"356"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"47764a53ec76993b\",\n    \"username\": \"eligendi\",\n    \"code\": \"eligendi\",\n    \"notes\": \"\",\n    \"authdate\": null,\n    \"deletiondate\": \"2025-08-19T09:52:28.000000Z\",\n    \"source\": \"voucher_generator\",\n    \"orgunit\": \"\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"session_limits\": null,\n    \"status\": \"valid\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/47764a53ec76993b\"\n        }\n    }\n}"}],"_postman_id":"3e399c99-7317-44ce-a9aa-edd642e24bcb"},{"name":"Get voucher by Code","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get voucher by Code');"],"type":"text/javascript","packages":{},"id":"16783fdc-dd76-4c65-9d93-e792ecc2ff01"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c12e6c87-7845-4cc3-bcb0-a7fd4286dd31"}}],"id":"feb9aea4-05d4-4111-a413-e134cf3ea91a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>voucher_code</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"2494b8ab-88b4-4051-ab1d-77aecdd99e30","name":"Get voucher by Code","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"1d321e65cfda8ae04a435d28fa239be6;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:53:43 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"350"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"38c3cd013956e636\",\n    \"username\": \"nulla\",\n    \"code\": \"nulla\",\n    \"notes\": \"\",\n    \"authdate\": null,\n    \"deletiondate\": \"2025-08-19T09:53:33.000000Z\",\n    \"source\": \"voucher_generator\",\n    \"orgunit\": \"\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"session_limits\": null,\n    \"status\": \"valid\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"\n        }\n    }\n}"}],"_postman_id":"feb9aea4-05d4-4111-a413-e134cf3ea91a"},{"name":"Update voucher by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update voucher by ID');"],"type":"text/javascript","packages":{},"id":"b1e390c5-ee6f-471f-b2cd-042b917ae868"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"3a71000a-4ac3-4c69-b5d2-24635c5638be"}}],"id":"1a6ca5b7-9e31-40e6-92e7-916baf370383","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>voucher_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>active</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"6fd1351a-7733-4b2f-9ddf-24e479704302","name":"Update voucher by ID","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"9d440659d946c87dc153a4b46f7d8ad8;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:53:53 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"108"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"active\": 0,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"\n        }\n    }\n}"}],"_postman_id":"1a6ca5b7-9e31-40e6-92e7-916baf370383"},{"name":"Update voucher by Code","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update voucher by Code');"],"type":"text/javascript","packages":{},"id":"120ffa50-3b89-4ec6-93e6-37f7c5012929"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"5a20dc17-200e-4aed-9dbc-c5d9fd65e4e1"}}],"id":"c9208438-b0d3-484e-a164-0c511b349908","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>voucher_code</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>active</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"92f75438-40a2-4f29-89d3-2d75e10d6c23","name":"Update voucher by Code","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"4cfe42d51475c82b83990a2da84cf89b"},{"key":"date","value":"Sun, 20 Jul 2025 09:54:02 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"97"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"active\": 0,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/nulla\"\n        }\n    }\n}"}],"_postman_id":"c9208438-b0d3-484e-a164-0c511b349908"},{"name":"Delete voucher by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete voucher by ID');"],"type":"text/javascript","packages":{},"id":"64bf3850-0d7e-4224-a674-d1183e40bb3a"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"789ccd00-4530-42d5-b1f3-0a9c42e853c6"}}],"id":"26f7b986-67d7-4786-b4bc-74bd344b0d57","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>voucher_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"f4b083fc-5230-41b1-9c3e-06d492baec3d","name":"Delete voucher by ID","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"c835d74502e8f5cf72a9e7ba8bafac4b"},{"key":"date","value":"Sun, 20 Jul 2025 09:54:13 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"26f7b986-67d7-4786-b4bc-74bd344b0d57"},{"name":"Delete voucher by Code","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete voucher by Code');"],"type":"text/javascript","packages":{},"id":"cf793788-efb1-47a0-b643-5fc9c7dc9187"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"ab65559f-6aec-429f-b2d0-d02e74a7598c"}}],"id":"4351a2a3-8313-4f29-b21b-b432c0ae2e77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>voucher_code</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"197330e7-d23d-4e29-92c5-7108ed2731ed","name":"Delete voucher by Code","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"bab2c7e2b53e1368b7a82ddf5fd7ecbf"},{"key":"date","value":"Sun, 20 Jul 2025 09:54:21 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"4351a2a3-8313-4f29-b21b-b432c0ae2e77"}],"id":"a224a854-b1c1-4ec4-99b6-4be88fbccc80","description":"<p>Manage prepaid access vouchers.</p>\n<p>Vouchers provide one-time or limited-use WiFi access codes.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Generate single or batch vouchers</li>\n<li>Set validity and usage limits</li>\n<li>Track redemption</li>\n<li>Export voucher codes</li>\n</ul>\n","_postman_id":"a224a854-b1c1-4ec4-99b6-4be88fbccc80","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Share Codes","item":[{"name":"Get all share codes","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all share codes');"],"type":"text/javascript","packages":{},"id":"0edea945-d5fe-4e33-8efa-284f224b9b28"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"d83d6557-a5c7-4bbf-a9d3-502116f3eb56"}}],"id":"44302101-71ec-4ce2-ba01-62d2e89a9be8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/sharecode?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["sharecode"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"1001ee0d-6bb3-4070-b901-c6413646825b","name":"Get all vouchers","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/vouchers?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["vouchers"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"4164bb5aff05da2a4c377937ee6d139a"},{"key":"date","value":"Sun, 20 Jul 2025 09:51:05 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"voucher_templates\":[],\"total_items\":1,\"page_count\":1,\"page\":1,\"page_size\":25,\"_embedded\":{\"vouchers\":[{\"id\":\"dbb4c6272c476375\",\"code\":\"expedita\",\"username\":\"expedita\",\"notes\":\"\",\"user_type\":\"v\",\"series\":\"voucher v2507192201\",\"creationdate\":\"2025-07-19T22:01:38.684177749Z\",\"deletiondate\":\"2025-08-18T22:01:38.000000Z\",\"authdate\":null,\"source\":\"voucher_generator\",\"transaction_token\":null,\"total_time\":null,\"acctsessiontime\":null,\"data_total_bytes\":null,\"acctinputoctets\":null,\"acctoutputoctets\":null,\"status\":\"valid\"}]}}"}],"_postman_id":"44302101-71ec-4ce2-ba01-62d2e89a9be8"},{"name":"Get share code by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get share code by ID');"],"type":"text/javascript","packages":{},"id":"ccaf4139-2483-45bb-a1eb-9ca13c4f9eb0"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"28e9555c-ae80-4f2c-8448-c499abcd88b9"}}],"id":"4680d18e-48b1-4fc7-a498-e902d8447dc9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>sharecode_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"aa20479d-6f64-480b-8511-6bff2bf988b2","name":"Get voucher by ID","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"d8fa9f0f1d9137030a1f56cdf64bbfb5;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:52:40 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"356"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"47764a53ec76993b\",\n    \"username\": \"eligendi\",\n    \"code\": \"eligendi\",\n    \"notes\": \"\",\n    \"authdate\": null,\n    \"deletiondate\": \"2025-08-19T09:52:28.000000Z\",\n    \"source\": \"voucher_generator\",\n    \"orgunit\": \"\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"session_limits\": null,\n    \"status\": \"valid\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/47764a53ec76993b\"\n        }\n    }\n}"}],"_postman_id":"4680d18e-48b1-4fc7-a498-e902d8447dc9"},{"name":"Get share code by Code","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get share code by Code');"],"type":"text/javascript","packages":{},"id":"72881314-7a32-4e88-8b57-bf3772ceb6ce"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"f816a4e0-5ce1-4e97-b50c-19e0d3a9ca0f"}}],"id":"b599ffc4-9823-440a-a122-4005f9434cf8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>share_code</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"aef3f4e0-aeed-4246-90d8-a4698d1a00ed","name":"Get voucher by Code","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"1d321e65cfda8ae04a435d28fa239be6;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:53:43 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"350"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"38c3cd013956e636\",\n    \"username\": \"nulla\",\n    \"code\": \"nulla\",\n    \"notes\": \"\",\n    \"authdate\": null,\n    \"deletiondate\": \"2025-08-19T09:53:33.000000Z\",\n    \"source\": \"voucher_generator\",\n    \"orgunit\": \"\",\n    \"transaction_token\": null,\n    \"device_data\": [],\n    \"session_limits\": null,\n    \"status\": \"valid\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"\n        }\n    }\n}"}],"_postman_id":"b599ffc4-9823-440a-a122-4005f9434cf8"},{"name":"Update share code by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update share code by ID');"],"type":"text/javascript","packages":{},"id":"1ce971da-46d2-4fc9-835b-029ef6c3bbfc"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"305aa16d-a171-4fd7-9881-7121ffb5d0fe"}}],"id":"405c5e5d-e008-484b-a367-2e783ad1836e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>sharecode_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>active</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"c16df2f6-019d-40f7-8fd6-132b004d6454","name":"Update voucher by ID","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"9d440659d946c87dc153a4b46f7d8ad8;o=1"},{"key":"date","value":"Sun, 20 Jul 2025 09:53:53 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"108"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"active\": 0,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"\n        }\n    }\n}"}],"_postman_id":"405c5e5d-e008-484b-a367-2e783ad1836e"},{"name":"Update share code by Code","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update share code by Code');"],"type":"text/javascript","packages":{},"id":"0130807e-59bc-4e13-9211-2540dd84824d"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"9ef6e7d9-dee7-4b67-8426-12cf192a3a94"}}],"id":"8d5bd79f-b28c-4576-9ee5-140d67fd42de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>share_code</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>active</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>notes</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>orgunit</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"88a86172-af2e-4381-962a-ffcaeaad4ef0","name":"Update voucher by Code","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"active\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/vouchers/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"4cfe42d51475c82b83990a2da84cf89b"},{"key":"date","value":"Sun, 20 Jul 2025 09:54:02 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"97"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"active\": 0,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/nulla\"\n        }\n    }\n}"}],"_postman_id":"8d5bd79f-b28c-4576-9ee5-140d67fd42de"},{"name":"Delete share code by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete share code by ID');"],"type":"text/javascript","packages":{},"id":"38563f3f-c527-43ad-92d6-43a9c6b84588"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"5e03b12d-d1d3-4353-b91d-42a16f5d5fde"}}],"id":"7dc529c2-a323-4f43-86a4-5b898017ed3e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>sharecode_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["vouchers",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"6d63841d-a9f1-4ef5-9f59-5c4d7c3d8c3c","name":"Delete voucher by ID","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"c835d74502e8f5cf72a9e7ba8bafac4b"},{"key":"date","value":"Sun, 20 Jul 2025 09:54:13 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"7dc529c2-a323-4f43-86a4-5b898017ed3e"},{"name":"Delete share code by Code","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete share code by Code');"],"type":"text/javascript","packages":{},"id":"64be1aac-4a51-4082-9963-27bbc2070345"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"9802cfa5-a8d9-4be3-997b-5d7a081a3293"}}],"id":"fbf7d2b6-576b-4d4d-829f-e2df050cbd41","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/sharecode/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>share_code</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["sharecode",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"83456ef0-26a4-4421-b6ec-6badf95af831","name":"Delete voucher by Code","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/vouchers/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"bab2c7e2b53e1368b7a82ddf5fd7ecbf"},{"key":"date","value":"Sun, 20 Jul 2025 09:54:21 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"fbf7d2b6-576b-4d4d-829f-e2df050cbd41"}],"id":"dbcfed1b-2470-4027-88c4-4b3f4629ab11","description":"<p>Manage sharing codes for resources.</p>\n<p>Share codes allow sharing captive portals and configurations with other accounts.</p>\n<p><strong>Use cases:</strong></p>\n<ul>\n<li>Template sharing</li>\n<li>Multi-tenant deployments</li>\n<li>Partner access</li>\n</ul>\n","_postman_id":"dbcfed1b-2470-4027-88c4-4b3f4629ab11","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Connectors","item":[{"name":"Add connector","event":[{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"afa36c98-04b3-43da-a405-2c0c35d4578a"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Add connector');"],"type":"text/javascript","packages":{},"id":"eac3ccbe-c9e5-4fbc-8c15-7d611399dafe"}}],"id":"40af7422-1243-4bb9-8743-60b7f4d4c715","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"dbtype\":\"csv\",\n    \"filename\":\"sample.csv\",\n    \"filesize\":638,\n    \"csvFile\":\"data:text/csv;base64,IyJ1c2VybmFtZSIsImZpcnN0bmFtZSIsImxhc3RuYW1lIiwiZW1haWwiLCJncm91cDF8cHJpb3JpdHkxLGdyb3VwMnxwcmlvcml0eTIiLCJhdHRfY2hlY2sxfG9wMXx2YWx1ZTEsYXR0X2NoZWNrMnxvcDJ8dmFsdWUyIiwiYXR0X3JlcGx5MXxvcDF8dmFsdWUxLGF0dF9yZXBseTJ8b3AyfHZhbHVlMiIsIm9yZ3VuaXQiLCJjbGllbnRfbWFjMSxjbGllbnRfbWFjMiIKInVzZXJuYW1lMjAiLCJqb2huIiwic21pdGgiLCJqb2huQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJFbXBsb3llZSIsIjExOjIyOjMzOjQ0OjU1OjY2IgoidXNlcm5hbWUyMSIsImphbmUiLCJzbWl0aCIsImphbmVAZXhhbXBsZS5jb20iLCIxaG91cnwxIiwiQ2xlYXJ0ZXh0LVBhc3N3b3JkfDo9fGFiYzEyMyIsIlNlc3Npb24tVGltZW91dHw6PXwxNDQwMCIsIlN0dWRlbnQiLCIxMS0yMi0zMy00NC01NS02NixBQUJCQ0NEREVFRkYiCiJ1c2VybmFtZTIyIiwic3RldmUiLCJzbWl0aCIsInN0ZXZlQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJTdHVkZW50Igo=\",\n    \"name\":\"24/365 Borders Hampshire Dynamic\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/connectors","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>dbtype</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>filename</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filesize</code> (Body parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>csvFile</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>api_token</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>domain</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>searchfilter</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>authsource</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>templateid</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>basedn</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>dbhostname</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>dbport</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>dbusername</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>dbpassword</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>api_endpoint</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>api_token</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>client_id</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>client_secret</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>tid</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>bind</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["connectors"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"ed34674c-f5ef-44fb-a255-332b55afbb84","name":"Add connector","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"dbtype\":\"csv\",\n    \"filename\":\"sample.csv\",\n    \"filesize\":638,\n    \"csvFile\":\"data:text/csv;base64,IyJ1c2VybmFtZSIsImZpcnN0bmFtZSIsImxhc3RuYW1lIiwiZW1haWwiLCJncm91cDF8cHJpb3JpdHkxLGdyb3VwMnxwcmlvcml0eTIiLCJhdHRfY2hlY2sxfG9wMXx2YWx1ZTEsYXR0X2NoZWNrMnxvcDJ8dmFsdWUyIiwiYXR0X3JlcGx5MXxvcDF8dmFsdWUxLGF0dF9yZXBseTJ8b3AyfHZhbHVlMiIsIm9yZ3VuaXQiLCJjbGllbnRfbWFjMSxjbGllbnRfbWFjMiIKInVzZXJuYW1lMjAiLCJqb2huIiwic21pdGgiLCJqb2huQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJFbXBsb3llZSIsIjExOjIyOjMzOjQ0OjU1OjY2IgoidXNlcm5hbWUyMSIsImphbmUiLCJzbWl0aCIsImphbmVAZXhhbXBsZS5jb20iLCIxaG91cnwxIiwiQ2xlYXJ0ZXh0LVBhc3N3b3JkfDo9fGFiYzEyMyIsIlNlc3Npb24tVGltZW91dHw6PXwxNDQwMCIsIlN0dWRlbnQiLCIxMS0yMi0zMy00NC01NS02NixBQUJCQ0NEREVFRkYiCiJ1c2VybmFtZTIyIiwic3RldmUiLCJzbWl0aCIsInN0ZXZlQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJTdHVkZW50Igo=\",\n    \"name\":\"Borders back e-services Loop metrics\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/connectors"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"89ca936d-66f7-4a4d-bc5b-c53165589c06\",\n    \"name\": \"New Connector\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/connectors/{id}\"\n        }\n    }\n}"}],"_postman_id":"40af7422-1243-4bb9-8743-60b7f4d4c715"},{"name":"Get all connectors","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all connectors');"],"type":"text/javascript","packages":{},"id":"e7d08398-969f-40a7-9865-461f36946d61"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"cafd0d90-848c-4bce-b07a-5266caa43923"}}],"id":"192fd7de-75aa-4e68-a4c1-db7582bccfb0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/connectors?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["connectors"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"ab6b9289-4108-4920-8173-4260576a027f","name":"Get all connectors","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/connectors?page=1&filter=&sort=&format=&page_size=25","host":["{{baseUrl}}"],"path":["connectors"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"_embedded\": {\n        \"connectors\": [\n            {\n                \"id\": \"29710057-0284-432b-b2e0-b66332f1e706\",\n                \"name\": \"Active Directory\",\n                \"type\": \"ldap\",\n                \"status\": \"active\"\n            }\n        ]\n    },\n    \"total_items\": 2,\n    \"page\": 1,\n    \"page_size\": 25\n}"}],"_postman_id":"192fd7de-75aa-4e68-a4c1-db7582bccfb0"},{"name":"Get connector","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get connector');"],"type":"text/javascript","packages":{},"id":"4dc8675b-4fc6-40bd-9550-367f0c7bd466"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"b9b2fea7-3a4e-4084-9348-ae6714e26ea6"}}],"id":"e9da3ea5-c42f-4c45-ba1e-0d24a1bfc78e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/connectors/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>connector_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["connectors",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"9dcd9dbf-ba82-4fd9-846e-10681bae5d14","name":"Get connector","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/connectors/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"3efe06ab-6b4a-4d5b-aa3b-fc4f9edd9223\",\n    \"name\": \"Active Directory\",\n    \"type\": \"ldap\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/connectors/{id}\"\n        }\n    }\n}"}],"_postman_id":"e9da3ea5-c42f-4c45-ba1e-0d24a1bfc78e"},{"name":"Update connector","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update connector');"],"type":"text/javascript","packages":{},"id":"afcbe96c-9c7b-48f2-bf1f-3b2e97eb3561"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"8a08b953-fe5d-4cf6-ba13-f9d7513775ef"}}],"id":"f215680b-46ce-4ab2-a19d-b1255621d33f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"name\":\"Magnam ratione temporibus.\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/connectors/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>connector_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>status</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["connectors",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f215680b-46ce-4ab2-a19d-b1255621d33f"},{"name":"Delete connector","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete connector');"],"type":"text/javascript","packages":{},"id":"14446b28-6c39-497e-aae6-1f18241f4f7b"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"f2a669db-83d2-4b23-9fd4-67d42a8056b8"}}],"id":"37359cbf-d0c7-42cd-a67b-ca71aa7864a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/connectors/?delete_users=false","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>connector_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>delete_users</code> (Query parameter, type: <code>boolean</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["connectors",""],"host":["{{baseUrl}}"],"query":[{"key":"delete_users","value":"false"}],"variable":[]}},"response":[{"id":"c933860d-bfd8-4e0f-931d-7b8829e7d548","name":"Delete connector","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"{{baseUrl}}/connectors/?delete_users=false","host":["{{baseUrl}}"],"path":["connectors",""],"query":[{"key":"delete_users","value":"false"}]}},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"37359cbf-d0c7-42cd-a67b-ca71aa7864a3"}],"id":"53727012-5374-4649-a23d-ffefbd654908","description":"<p>Manage external system connectors.</p>\n<p>Connectors integrate IronWiFi with external systems (LDAP, AD, APIs).</p>\n<p><strong>Connector types:</strong></p>\n<ul>\n<li>LDAP/Active Directory</li>\n<li>REST API webhooks</li>\n<li>SMS gateways</li>\n<li>Payment providers</li>\n</ul>\n","_postman_id":"53727012-5374-4649-a23d-ffefbd654908","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Attributes","item":[{"name":"Add attribute","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add attribute');"],"type":"text/javascript","packages":{},"id":"9cb3dbc0-e2aa-45a9-9760-4be76e01ed59"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c355a0ac-590f-41b0-84ee-c22ea8321a7b"}}],"id":"422f9be7-ab14-41d9-aaff-9293eb848e95","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"value\": \"{{generatedPassword}}\",\n    \"userid\": \"\",\n    \"attribute\": \"Cleartext-Password\",\n    \"operator\": \":=\",\n    \"table\": \"radcheck\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>value</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>userid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>attribute</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>operator</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>table</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"bdec6c83-c777-4619-a104-68c555a5e015","name":"Add attribute","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"value\": \"{{generatedPassword}}\",\n    \"userid\": \"\",\n    \"attribute\": \"Cleartext-Password\",\n    \"operator\": \":=\",\n    \"table\": \"radcheck\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/attributes/eee6025b-0471-4576-8362-f0927fbab4bf"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/attributes/eee6025b-0471-4576-8362-f0927fbab4bf"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"ce97ec943677144c3713ba9e9bd9a278"},{"key":"date","value":"Thu, 17 Jul 2025 22:38:09 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"163"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"eee6025b-0471-4576-8362-f0927fbab4bf\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/attributes/eee6025b-0471-4576-8362-f0927fbab4bf\"\n        }\n    }\n}"}],"_postman_id":"422f9be7-ab14-41d9-aaff-9293eb848e95"},{"name":"Add group attribute","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add group attribute');"],"type":"text/javascript","packages":{},"id":"2e2f2acd-5ad3-429e-9939-d6fe6c3df467"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"81ef89a6-3d15-44f8-b88c-9bcc17cfbe94"}}],"id":"dc91d10f-ff61-44ef-9ad3-fa1fc8b14a39","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\": \"\",\n\t\"attribute\": \"Expire-After\",\n\t\"operator\": \":=\",\n\t\"table\": \"radgroupcheck\",\n\t\"value\": \"600\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>groupid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>attribute</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>operator</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>table</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>value</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"9f853f43-d01f-43d1-a504-320b3739b376","name":"Add group attribute","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\": \"\",\n\t\"attribute\": \"Expire-After\",\n\t\"operator\": \":=\",\n\t\"table\": \"radgroupcheck\",\n\t\"value\": \"600\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"9a4b8b36-b2dc-4da2-b218-e6e8cfd8a5d1\",\n    \"attribute\": \"Session-Timeout\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"\n        }\n    }\n}"}],"_postman_id":"dc91d10f-ff61-44ef-9ad3-fa1fc8b14a39"},{"name":"Get list of attributes","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get list of attributes');"],"type":"text/javascript","packages":{},"id":"edd18df9-1cf5-4ff1-8058-47b56faa6ac8"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"66c5fca5-3f4e-4cce-997b-2edd4361d5b2"}}],"id":"466da550-5f19-4f45-a689-635c7c2aa7f3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\":\"\",\n\t\"attribute\":\"Expire-After\",\n\t\"operator\":\":=\",\n\t\"table\":\"radgroupcheck\",\n\t\"value\":\"333\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes?groupid=&table=\n","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>table</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["attributes"],"host":["{{baseUrl}}"],"query":[{"key":"groupid","value":""},{"key":"table","value":"\n"}],"variable":[]}},"response":[{"id":"6523bb55-1ef1-4802-9edb-9c289df11e6d","name":"Get list of attributes","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/attributes?groupid=&table=\n","host":["{{baseUrl}}"],"path":["attributes"],"query":[{"key":"groupid","value":""},{"key":"table","value":"\n"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"323013ce-dde6-4416-81ae-f1e2973e04b2\",\n    \"attribute\": \"Session-Timeout\",\n    \"op\": \":=\",\n    \"value\": \"3600\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"\n        }\n    }\n}"}],"_postman_id":"466da550-5f19-4f45-a689-635c7c2aa7f3"},{"name":"Get list of group attributes","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get list of group attributes');"],"type":"text/javascript","packages":{},"id":"a01e1cd0-e37e-4e3c-8a5f-819847a3fd1b"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"53e603f5-82ed-4cfb-9984-f62a9ce83328"}}],"id":"0b678265-beaf-4fdd-a316-891b009fd847","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\":\"\",\n\t\"attribute\":\"Expire-After\",\n\t\"operator\":\":=\",\n\t\"table\":\"radgroupcheck\",\n\t\"value\":\"333\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes?groupid=&table=\n","description":"<p>Retrieve a list of attributess or a specific attributes by ID.</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>groupid</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>table</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["attributes"],"host":["{{baseUrl}}"],"query":[{"key":"groupid","value":""},{"key":"table","value":"\n"}],"variable":[]}},"response":[{"id":"3af1cca9-62a9-44b9-9720-eedb5389d949","name":"Get list of group attributes","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/attributes?groupid=&table=\n","host":["{{baseUrl}}"],"path":["attributes"],"query":[{"key":"groupid","value":""},{"key":"table","value":"\n"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"323013ce-dde6-4416-81ae-f1e2973e04b2\",\n    \"attribute\": \"Session-Timeout\",\n    \"op\": \":=\",\n    \"value\": \"3600\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"\n        }\n    }\n}"}],"_postman_id":"0b678265-beaf-4fdd-a316-891b009fd847"},{"name":"Patch attribute","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Patch attribute');"],"type":"text/javascript","packages":{},"id":"64b2f377-b048-4685-86f2-902ddf0cba39"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"5cc2c08f-8bf1-4537-a300-76bf03b62c33"}}],"id":"24f84257-9263-42ec-aa73-a765e682c29f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"value\":\"Su\",\n\t\"table\":\"radcheck\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes/","description":"<p>Update the specified fields of a {{login_attribute}}.</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>attribute_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>value</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>table</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>operator</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["attributes",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"24f84257-9263-42ec-aa73-a765e682c29f"},{"name":"Delete attribute","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete attribute');"],"type":"text/javascript","packages":{},"id":"31486c14-9d01-44bf-95d6-97ad795ccbbc"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"6a8d8154-979a-4538-b060-a20c2921f890"}}],"id":"4ccbb9a8-688f-49c7-9d1c-839509d350aa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\":\"\",\n\t\"attribute\":\"Expire-After\",\n\t\"operator\":\":=\",\n\t\"table\":\"radgroupcheck\",\n\t\"value\":\"333\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>attribute_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["attributes",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"02fe97d3-6bd7-4449-8496-884a238f428c","name":"Delete attribute","originalRequest":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\":\"\",\n\t\"attribute\":\"Expire-After\",\n\t\"operator\":\":=\",\n\t\"table\":\"radgroupcheck\",\n\t\"value\":\"333\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/attributes/"},"status":"No Content","code":204,"_postman_previewlanguage":"text","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"content-type","value":"application/hal+json"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"},{"key":"server","value":"Google Frontend"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"4ccbb9a8-688f-49c7-9d1c-839509d350aa"}],"id":"93222bca-cba7-4907-bbb8-fb44614a37c8","description":"<p>Manage RADIUS attributes.</p>\n<p>Custom RADIUS attributes for advanced authentication policies.</p>\n<p><strong>Attribute types:</strong></p>\n<ul>\n<li>Check attributes (authentication)</li>\n<li>Reply attributes (authorization)</li>\n<li>Vendor-specific attributes</li>\n</ul>\n","_postman_id":"93222bca-cba7-4907-bbb8-fb44614a37c8","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"User-Groups","item":[{"name":"Add user-group mapping","event":[{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"5681c04f-dee2-47f7-ac93-23d32a0274ca"}},{"listen":"prerequest","script":{"exec":["console.log('Executing: Add user-group mapping');"],"type":"text/javascript","packages":{},"id":"3cd236a1-fdc6-42f1-b0e2-a90177b89947"}}],"id":"ba2eb4da-17ff-4ad6-ad16-9df10b3695ba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"userid\":\"\",\n\t\"groupid\":\"\",\n\t\"priority\":\"1\"\n\t\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/user-groups","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>userid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>groupid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>priority</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["user-groups"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ba2eb4da-17ff-4ad6-ad16-9df10b3695ba"},{"name":"Delete user-group mapping","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete user-group mapping');"],"type":"text/javascript","packages":{},"id":"f329ce28-68d7-4e4b-b5e4-7c9f4ee0e974"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"fbbf0587-aaaa-437e-9a64-9c7cdf6bce75"}}],"id":"b8b8c4db-64df-4c46-924e-4afddaa46da5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\n\t\"groupid\":\"\",\n\t\"attribute\":\"Expire-After\",\n\t\"operator\":\":=\",\n\t\"table\":\"radgroupcheck\",\n\t\"value\":\"333\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/user-groups/","description":"<p>Delete a specific user-group mapping.</p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>user_group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["user-groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b8b8c4db-64df-4c46-924e-4afddaa46da5"}],"id":"2d85f503-2ef5-4cb0-af71-bc946e12b1e1","description":"<p>Manage user-to-group assignments.</p>\n<p>Link users to groups for policy application.</p>\n<p><strong>Operations:</strong></p>\n<ul>\n<li>Add user to group</li>\n<li>Remove user from group</li>\n<li>List group members</li>\n</ul>\n","_postman_id":"2d85f503-2ef5-4cb0-af71-bc946e12b1e1","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Groups","item":[{"name":"Add group","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add group');"],"type":"text/javascript","packages":{},"id":"a1a3acc4-c967-4e21-be0a-de52f7b22356"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"8494fd5c-7dbc-4550-bac1-aa72a8b61206"}}],"id":"9ec3fcd2-720b-41fe-b5c3-88d190bae77f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"groupname\":\"Dollar\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/groups","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>groupname</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["groups"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"d4128dca-2d62-491c-b639-8745f80262eb","name":"Add group","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"groupname\":\"Representative\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/groups"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"d340b2c085a986d5854159f29987a350;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:40:00 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"159"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"753d1c96-9244-4012-90e6-ba1dbf692175\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175\"\n        }\n    }\n}"}],"_postman_id":"9ec3fcd2-720b-41fe-b5c3-88d190bae77f"},{"name":"Get all groups","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all groups');"],"type":"text/javascript","packages":{},"id":"907bb5cb-4277-41bc-9c10-4746613a21bc"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c0fd8ea4-a010-4509-acb1-827098928075"}}],"id":"aebe43e1-7611-4cf9-851d-06d512eb2ed6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/groups?page=1&filter=&sort=&format=&type=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["groups"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Resource type filter</p>\n","type":"text/plain"},"key":"type","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"4a4b8d56-9321-4422-91bc-13b77bc43b3b","name":"Get all groups","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/groups?page=1&filter=&sort=&format=&type=&page_size=25","host":["{{baseUrl}}"],"path":["groups"],"query":[{"key":"page","value":"1"},{"key":"filter","value":""},{"key":"sort","value":""},{"key":"format","value":""},{"key":"type","value":""},{"key":"page_size","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"vary","value":"Accept-Encoding"},{"key":"content-type","value":"text/html; charset=utf-8"},{"key":"content-encoding","value":"gzip"},{"key":"x-cloud-trace-context","value":"71195a21ad828d70692266fcf4c0e51f;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:40:21 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\"_embedded\":{\"groups\":[{\"id\":\"9ceb1b5f-7d00-467f-9ea5-9fc264c6ea0d\",\"groupname\":\"1hour\",\"source\":null,\"check_attributes\":null,\"reply_attributes\":null,\"members\":3},{\"id\":\"753d1c96-9244-4012-90e6-ba1dbf692175\",\"groupname\":\"bus\",\"source\":null,\"check_attributes\":null,\"reply_attributes\":null,\"members\":null}]},\"total_items\":2,\"page\":1,\"page_size\":25,\"page_count\":1}"}],"_postman_id":"aebe43e1-7611-4cf9-851d-06d512eb2ed6"},{"name":"Get group by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get group by ID');"],"type":"text/javascript","packages":{},"id":"12367f33-dbd3-4210-bcb7-9d3dd61bb3fb"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"a4dd978d-3e84-44e5-abb1-b3182ea68ba2"}}],"id":"c74af665-3539-4d17-8101-cc3c05d61128","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/groups/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"1974142d-5b62-4b00-8dc0-592c721c00f2","name":"Get group by ID","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/groups/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"866bb343544bef484a06f15143c059f3"},{"key":"date","value":"Thu, 17 Jul 2025 22:40:41 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"226"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"753d1c96-9244-4012-90e6-ba1dbf692175\",\n    \"groupname\": \"bus\",\n    \"priority\": null,\n    \"description\": null,\n    \"source\": null,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175\"\n        }\n    }\n}"}],"_postman_id":"c74af665-3539-4d17-8101-cc3c05d61128"},{"name":"Update group","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update group');"],"type":"text/javascript","packages":{},"id":"6257bf9a-71d9-4b23-8db8-2bc5b34520c9"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"b7d39dbc-d898-4e3a-b1a9-75569aa7ae49"}}],"id":"6e5be662-e5f7-4395-888a-19974baec870","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"description\":\"Molestiae minima necessitatibus dolores corporis est.\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/groups/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"d8157ecf-9d24-4aad-9848-551bf159a9ee","name":"Update group","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\t\"description\":\"Qui ipsa velit fuga ex reiciendis ut voluptatum velit.\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/groups/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"c0cd3366cdae29626eac0b8bd9836ba3"},{"key":"date","value":"Thu, 17 Jul 2025 22:41:00 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"195"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"description\": \"Libero qui aliquid culpa esse illo et deleniti officia ducimus.\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175\"\n        }\n    }\n}"}],"_postman_id":"6e5be662-e5f7-4395-888a-19974baec870"},{"name":"Delete group","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete group');"],"type":"text/javascript","packages":{},"id":"c9a66735-a772-4fa3-af5f-239f6306cd3d"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"5b3026fb-f1be-4384-a1be-62bcc2b82c46"}}],"id":"267f496a-1d84-487b-9c1c-a213b4c49354","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/groups/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>group_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["groups",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"07b5cd0b-8587-4f0f-bea7-b4c35e250f56","name":"Delete group","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/groups/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"70f017aaa16ac4099293ef58beabc804"},{"key":"date","value":"Thu, 17 Jul 2025 22:41:25 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"267f496a-1d84-487b-9c1c-a213b4c49354"}],"id":"be00dc7a-cf26-4413-8e52-62b27dfd4373","description":"<p>Manage user groups.</p>\n<p>Groups organize users and apply common policies.</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>Create logical groups</li>\n<li>Set group-level attributes</li>\n<li>Apply bandwidth policies</li>\n</ul>\n","_postman_id":"be00dc7a-cf26-4413-8e52-62b27dfd4373","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Organization Units","item":[{"name":"Add unit","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add unit');"],"type":"text/javascript","packages":{},"id":"97a36ad8-bf17-4da1-93bb-8a4f4f286a04"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"7559eeb8-a2e2-49d5-bdff-56f3563366e6"}}],"id":"ffee03d6-9bfb-4f72-a9e7-2439952c1df0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\":\"dolores voluptas nesciunt\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/orgunits","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>name</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["orgunits"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"b7c3a7d5-d403-447e-9f6b-a610baadad35","name":"Add unit","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\":\"dolores iure maiores\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/orgunits"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"location","value":"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1"},{"key":"content-location","value":"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"70945e4f482b095ec1e6126765c20e2d"},{"key":"date","value":"Thu, 17 Jul 2025 22:54:38 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"161"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"97df5006-d4d2-4a62-be79-09818b06ffe1\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"\n        }\n    }\n}"}],"_postman_id":"ffee03d6-9bfb-4f72-a9e7-2439952c1df0"},{"name":"Get all units","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get all units');"],"type":"text/javascript","packages":{},"id":"aa854f58-feb2-4b08-88fb-213233f10ed9"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"a9058461-e6e1-4780-be21-1b317b6c2c7e"}}],"id":"792f549d-834b-444d-a586-e576935a2a4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/orgunits?page=1&filter=&sort=&format=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>integer</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["orgunits"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"29054ddc-5939-4e9b-b09e-e4b4d77e09d4","name":"Get all units","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/orgunits/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"d5031fa2d7aa88b4e4429ad9fe3cbf1b"},{"key":"date","value":"Thu, 17 Jul 2025 22:55:06 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"272"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"97df5006-d4d2-4a62-be79-09818b06ffe1\",\n    \"name\": \"cum alias enim\",\n    \"description\": null,\n    \"console_access\": null,\n    \"console_role\": null,\n    \"source\": null,\n    \"members\": 0,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"\n        }\n    }\n}"}],"_postman_id":"792f549d-834b-444d-a586-e576935a2a4f"},{"name":"Get unit by ID","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get unit by ID');"],"type":"text/javascript","packages":{},"id":"ce002836-af59-4e40-89fa-335c1060940c"}},{"listen":"test","script":{"exec":["// GET single resource tests","pm.test(\"Response status is valid for GET\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response has id field\", function () {","            pm.expect(jsonData).to.have.property(\"id\");","        });","        ","        // HAL _links validation","        if (jsonData._links) {","            pm.test(\"Response has _links.self\", function () {","                pm.expect(jsonData._links).to.have.property(\"self\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"5b2436c7-efbd-4963-bd14-06fbb0201b94"}}],"id":"197bb80e-202b-4785-8088-9cdeebb72c3a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/orgunits/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>org_unit_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["orgunits",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"35b13105-ecfa-4907-9bc0-712dd2c5e59a","name":"Get unit by ID","originalRequest":{"method":"GET","header":[],"url":"{{baseUrl}}/orgunits/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"74f99e4a051495b4c9409f1cd79b73e0;o=1"},{"key":"date","value":"Thu, 17 Jul 2025 22:55:35 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"272"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"97df5006-d4d2-4a62-be79-09818b06ffe1\",\n    \"name\": \"cum alias enim\",\n    \"description\": null,\n    \"console_access\": null,\n    \"console_role\": null,\n    \"source\": null,\n    \"members\": 0,\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"\n        }\n    }\n}"}],"_postman_id":"197bb80e-202b-4785-8088-9cdeebb72c3a"},{"name":"Update unit","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Update unit');"],"type":"text/javascript","packages":{},"id":"48939f4b-4279-4df4-9d91-0234c66902db"}},{"listen":"test","script":{"exec":["// PATCH-specific tests","pm.test(\"Response status is valid for PATCH\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409, 422]);","});"],"type":"text/javascript","packages":{},"id":"6f8e029f-c644-4d2e-8dcb-c38bf39c6437"}}],"id":"464fd804-9428-4a02-837d-64277bb2861a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"name\":\"autem aspernatur est\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/orgunits/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>org_unit_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>name</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>description</code> (Body parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["orgunits",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"7764cce8-bbed-4c25-8589-2489f81c8812","name":"Update unit","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\"name\":\"aut eos perspiciatis\"}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/orgunits/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"content-type","value":"application/hal+json"},{"key":"x-cloud-trace-context","value":"fd55d9e33320e1e47aa61e3c395caffa"},{"key":"date","value":"Thu, 17 Jul 2025 22:56:10 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"147"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"{\n    \"name\": \"et ea necessitatibus\",\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"\n        }\n    }\n}"}],"_postman_id":"464fd804-9428-4a02-837d-64277bb2861a"},{"name":"Delete unit","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Delete unit');"],"type":"text/javascript","packages":{},"id":"824b3f99-dc93-4262-9536-6d9103214c26"}},{"listen":"test","script":{"exec":["// DELETE-specific tests","pm.test(\"Response status is valid for DELETE\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 409]);","});"],"type":"text/javascript","packages":{},"id":"80b286e8-f37f-4901-9c3d-b332b01df393"}}],"id":"4573a52c-6e91-4c93-8974-fe735a6588eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"{{baseUrl}}/orgunits/","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><code>org_unit_id</code> (Query parameter, type: <code>string</code>, required: <code>yes</code>)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["orgunits",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"68aea03c-45c7-48c3-8082-cbd964b9d84d","name":"Delete unit","originalRequest":{"method":"DELETE","header":[],"url":"{{baseUrl}}/orgunits/"},"status":"No Content","code":204,"_postman_previewlanguage":"html","header":[{"key":"access-control-allow-origin","value":"*"},{"key":"access-control-allow-headers","value":"Content-Type, X-Requested-With, If-Modified-Since, x-xsrf-token"},{"key":"access-control-allow-credentials","value":"true"},{"key":"pragma","value":"no-cache"},{"key":"x-cloud-trace-context","value":"a2ed8bb65b351b9ffb4ae020fc3fdd12"},{"key":"date","value":"Thu, 17 Jul 2025 22:56:48 GMT"},{"key":"content-type","value":"text/html"},{"key":"server","value":"Google Frontend"},{"key":"Via","value":"1.1 google"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"4573a52c-6e91-4c93-8974-fe735a6588eb"}],"id":"c755368b-1b00-41b1-b113-745b6ec77965","description":"<p>Manage organizational units for multi-tenant deployments.</p>\n<p>Org units provide hierarchical organization of resources.</p>\n<p><strong>Use cases:</strong></p>\n<ul>\n<li>Department segregation</li>\n<li>Multi-site management</li>\n<li>Delegated administration</li>\n</ul>\n","_postman_id":"c755368b-1b00-41b1-b113-745b6ec77965","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}},{"name":"Org-Unit Groups","item":[{"name":"Add Group-Unit Mapping","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Add Group-Unit Mapping');"],"type":"text/javascript","packages":{},"id":"34c51048-9c2a-4910-bdf5-e48fb462eff8"}},{"listen":"test","script":{"exec":["// POST-specific tests","pm.test(\"Response status is valid for POST\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 409, 422]);","});","","// Extract and save created ID for subsequent requests","if (pm.response.code === 201 || pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        if (jsonData && jsonData.id) {","            const resourceName = pm.info.requestName.toLowerCase().replace(/add |create /g, '').replace(/\\s+/g, '_');","            pm.collectionVariables.set(resourceName + \"_id\", jsonData.id);","            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"9147e745-98c9-426d-9aee-58ec2020b470"}}],"id":"0018a3db-f9f8-440c-9316-2efd235afcf8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"orgunitid\":\"\",\n\t\"groupid\":\"\",\n\t\"priority\":\"1\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/org-units-groups","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>orgunitid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>groupid</code> (Body parameter, type: <code>string</code>, required: <code>yes</code>)</p>\n</li>\n<li><p><code>priority</code> (Body parameter, type: <code>integer</code>, required: <code>yes</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["org-units-groups"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"0018a3db-f9f8-440c-9316-2efd235afcf8"},{"name":"Get All Group-Unit mappings","event":[{"listen":"prerequest","script":{"exec":["console.log('Executing: Get All Group-Unit mappings');"],"type":"text/javascript","packages":{},"id":"e8fa53ba-e693-4fe6-ba08-0c10c0bfee1d"}},{"listen":"test","script":{"exec":["// GET list tests","pm.test(\"Response status is valid for GET list\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404]);","});","","if (pm.response.code === 200) {","    try {","        const jsonData = pm.response.json();","        pm.test(\"Response is valid object\", function () {","            pm.expect(jsonData).to.be.an(\"object\");","        });","        ","        // HAL format validation","        if (jsonData._embedded) {","            pm.test(\"Response has _embedded data\", function () {","                pm.expect(jsonData._embedded).to.be.an(\"object\");","            });","        }","        ","        // Pagination validation","        if (jsonData.total_items !== undefined) {","            pm.test(\"Response has pagination info\", function () {","                pm.expect(jsonData.total_items).to.be.a(\"number\");","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"55bfc41f-f194-4167-83e9-b97db7bac817"}}],"id":"4601c1b1-1ef0-45c7-9cc0-5ed8c7f524ff","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{baseUrl}}/org-units-groups?page=1&filter=&sort=&format=&type=&page_size=25","description":"<p><strong>Parameters:</strong></p>\n<ul>\n<li><p><code>page</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>filter</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>sort</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n<li><p><code>format</code> (Query parameter, type: <code>string</code>, required: <code>no</code>) - <code>enum</code></p>\n</li>\n<li><p><code>page_size</code> (Query parameter, type: <code>string</code>, required: <code>no</code>)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}},"urlObject":{"path":["org-units-groups"],"host":["{{baseUrl}}"],"query":[{"description":{"content":"<p>Page number for pagination (starts at 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Filter expression (e.g., name:value, status:active)</p>\n","type":"text/plain"},"key":"filter","value":""},{"description":{"content":"<p>Sort field and direction (e.g., name:asc, created:desc)</p>\n","type":"text/plain"},"key":"sort","value":""},{"description":{"content":"<p>Response format: json (default) or csv</p>\n","type":"text/plain"},"key":"format","value":""},{"description":{"content":"<p>Resource type filter</p>\n","type":"text/plain"},"key":"type","value":""},{"description":{"content":"<p>Number of items per page (default: 25, max: 100)</p>\n","type":"text/plain"},"key":"page_size","value":"25"}],"variable":[]}},"response":[{"id":"ac19bec7-f5dd-4338-827d-28d43be1a3fe","name":"Get All Group-Unit mappings","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/org-units-groups?page=1&filter=&sort=&format=&type=&page_size=25","host":["{{baseUrl}}"],"path":["org-units-groups"],"query":[{"key":"page","value":"1","description":"Page number for pagination (starts at 1)"},{"key":"filter","value":"","description":"Filter expression (e.g., name:value, status:active)"},{"key":"sort","value":"","description":"Sort field and direction (e.g., name:asc, created:desc)"},{"key":"format","value":"","description":"Response format: json (default) or csv"},{"key":"type","value":"","description":"Resource type filter"},{"key":"page_size","value":"25","description":"Number of items per page (default: 25, max: 100)"}]},"description":"**Parameters:**\n\n- `page` (Query parameter, type: `string`, required: `no`)\n    \n- `filter` (Query parameter, type: `string`, required: `no`)\n    \n- `sort` (Query parameter, type: `string`, required: `no`)\n    \n- `format` (Query parameter, type: `string`, required: `no`) - `enum`\n    \n- `page_size` (Query parameter, type: `string`, required: `no`)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"content-type","value":"application/hal+json"},{"key":"access-control-allow-origin","value":"*"},{"key":"date","value":"Mon, 09 Dec 2024 12:00:00 GMT"}],"cookie":[],"responseTime":null,"body":"{\n  \"_embedded\": {\n    \"org-unit-groups\": [\n      {\n        \"id\": \"2ec0dadb-997a-483c-ab89-6c7de3ad523d\",\n        \"name\": \"Engineering\",\n        \"parent_id\": null\n      }\n    ]\n  },\n  \"total_items\": 3,\n  \"page\": 1\n}"}],"_postman_id":"4601c1b1-1ef0-45c7-9cc0-5ed8c7f524ff"}],"id":"1bc37bc6-0173-41fa-99df-e671c53dd463","description":"<p>Manage org-unit to group relationships.</p>\n<p>Link organization units to user groups for hierarchical access control.</p>\n","_postman_id":"1bc37bc6-0173-41fa-99df-e671c53dd463","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]},"isInherited":true,"source":{"_postman_id":"503cc635-74a4-4602-8f97-d854eea0bd29","id":"503cc635-74a4-4602-8f97-d854eea0bd29","name":"IronWiFi REST API - Public","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{auth_bearer_token}}"}]}},"event":[{"listen":"prerequest","script":{"exec":["// ============================================================","// IronWiFi API - Collection Pre-Request Script","// ============================================================","","// Track request timing","pm.globals.set('requestStartTime', Date.now());","","// Validate required environment variables","const requiredVars = ['baseUrl', 'auth_bearer_token'];","const missingVars = requiredVars.filter(v => !pm.environment.get(v));","","if (missingVars.length > 0) {","    console.warn('Missing environment variables:', missingVars.join(', '));","    console.warn('Please configure your environment before running requests.');","}","","// Log request details for debugging","console.log('\\n--- Request ---');","console.log('Name:', pm.info.requestName);","console.log('Method:', pm.request.method);","console.log('URL:', pm.request.url.toString());","","// Add request ID for tracing","const requestId = 'req_' + Date.now().toString(36) + Math.random().toString(36).substr(2, 5);","pm.request.headers.add({key: 'X-Request-ID', value: requestId});","pm.globals.set('lastRequestId', requestId);","","// Helper function to get resource name from URL","function getResourceName() {","    const path = pm.request.url.path || [];","    return path[0] || 'unknown';","}","pm.globals.set('currentResource', getResourceName());"],"type":"text/javascript","packages":{},"id":"f358fa43-8b33-455c-aaf6-5d7b1e3f27ff"}},{"listen":"test","script":{"exec":["// ============================================================","// IronWiFi API - Collection Test Script","// ============================================================","","// Calculate response time","const responseTime = pm.response.responseTime;","const startTime = pm.globals.get('requestStartTime');","const totalTime = startTime ? Date.now() - startTime : responseTime;","","// Log response summary","console.log('\\n--- Response ---');","console.log('Status:', pm.response.code, pm.response.status);","console.log('Time:', responseTime + 'ms');","console.log('Size:', pm.response.responseSize, 'bytes');","","// === Performance Tests ===","pm.test('Response time is acceptable (<10s)', function () {","    pm.expect(responseTime).to.be.below(10000);","});","","// === Stability Tests ===","pm.test('No server error (5xx)', function () {","    pm.expect(pm.response.code).to.be.below(500);","});","","// === Content Type Validation ===","if (pm.response.code >= 200 && pm.response.code < 300 && pm.response.code !== 204) {","    pm.test('Response has valid Content-Type', function () {","        const contentType = pm.response.headers.get('Content-Type') || '';","        pm.expect(contentType).to.match(/application\\/(hal\\+)?json|application\\/problem\\+json/);","    });","}","","// === Error Response Validation ===","if (pm.response.code >= 400) {","    try {","        const errorBody = pm.response.json();","        pm.test('Error response has standard fields', function () {","            // HAL error format should have status and title","            pm.expect(errorBody).to.have.any.keys('status', 'title', 'detail', 'validation_messages');","        });","    } catch (e) {","        // Not JSON, that's okay for some error types","    }","}","","// === Auto-save created resource IDs ===","if (pm.response.code === 201 || (pm.response.code === 200 && pm.request.method === 'POST')) {","    try {","        const data = pm.response.json();","        if (data && data.id) {","            const resource = pm.globals.get('currentResource') || 'resource';","            // Map plural to singular for variable naming","            const singularMap = {","                'networks': 'network', 'users': 'user', 'groups': 'group',","                'vouchers': 'voucher', 'guests': 'guest', 'devices': 'device',","                'employees': 'employee', 'venues': 'venue', 'nodes': 'node',","                'certificates': 'certificate', 'themes': 'theme',","                'captive-portals': 'captive_portal', 'configurations': 'configuration',","                'tariffs': 'tariff', 'fleets': 'fleet', 'vehicles': 'vehicle',","                'attributes': 'attribute', 'translations': 'translation',","                'connectors': 'connector', 'tokens': 'token'","            };","            const singular = singularMap[resource] || resource.replace(/s$/, '');","            const varName = singular + '_id';","            pm.collectionVariables.set(varName, data.id);","            console.log('Saved', varName + ':', data.id);","        }","    } catch (e) {","        // Response may not be JSON","    }","}","","// === Pagination Validation for list endpoints ===","if (pm.response.code === 200 && pm.request.method === 'GET') {","    try {","        const data = pm.response.json();","        if (data._embedded) {","            pm.test('List response has valid pagination', function () {","                pm.expect(data).to.have.property('total_items');","                pm.expect(data).to.have.property('page');","                pm.expect(data).to.have.property('page_size');","            });","        }","    } catch (e) {","        // Response may not be JSON","    }","}"],"type":"text/javascript","packages":{},"id":"c84b3ada-97dc-49e5-afa0-19eab9bd0f10"}}],"variable":[{"id":"19dfd7d1-9da6-4f54-9ac3-305194b02796","key":"page","value":"1","description":"Page number for paginated results"},{"id":"91d99482-060f-40f1-9e94-4bcce2a38784","key":"page_size","value":"25","description":"Number of items per page (default: 25, max: 100)"},{"id":"d65a2a3f-97b5-48a4-b98e-e045b5c41fae","key":"filter","value":"","description":"Filter expression (e.g., name:test)"},{"id":"38b8dc77-4f1c-4dfa-83ab-e154f3efdcc9","key":"sort","value":"","description":"Sort field and direction (e.g., name:asc)"},{"id":"13ec1c97-0ea5-4a21-82d1-17637d99a579","key":"format","value":"","description":"Response format (json, csv)"},{"id":"af0cc3c7-40f3-4e06-b6b4-33c5ffe9138d","key":"earliest","value":"-7d","description":"Start time for reports (e.g., -7d, -24h, 2024-01-01)"},{"id":"68c2af50-fac8-4506-ba5b-1626e93c4e46","key":"latest","value":"now","description":"End time for reports (e.g., now, -1h, 2024-01-31)"},{"id":"a1521dc5-24b5-4b2b-9a3c-710467861bf2","key":"network_id","value":"","description":"ID of the network (auto-populated after Add network)"},{"id":"e32031fe-95f9-446d-916d-45b2078197b6","key":"user_id","value":"","description":"ID of the user (auto-populated after Add user)"},{"id":"f2badbfa-2502-448e-9500-0ff704b1a0fc","key":"group_id","value":"","description":"ID of the group (auto-populated after Add group)"},{"id":"2fdf98d5-6834-4932-8240-8cffd99155c3","key":"captive_portal_id","value":"","description":"ID of the captive portal"},{"id":"b5c6ccdb-f0f9-4260-8071-cb3de9129d94","key":"voucher_id","value":"","description":"ID of the voucher"},{"id":"a2f7b415-8905-4b9a-98c0-c3c2ee7f7f04","key":"voucher_code","value":"","description":"Voucher code for redemption"},{"id":"eae9bfa3-f084-44a5-8e24-e2db9ab91888","key":"voucher_series","value":"","description":"Series identifier for batch voucher operations"},{"id":"51496e32-61a7-4071-a013-44c6d5db3847","key":"certificate_id","value":"","description":"ID of the certificate"},{"id":"fb87f3fd-20f2-404f-aebf-d9c54594722c","key":"certificate_path_id","value":"","description":"Certificate path identifier"},{"id":"9b2e16ca-83cf-4563-9263-6dc2a95f2d38","key":"connector_id","value":"","description":"ID of the connector"},{"id":"1cae7754-bc7e-4d27-bf61-3906fe530aed","key":"device_id","value":"","description":"ID of the device"},{"id":"05d643dd-6f17-4e1a-b9f5-47500efe6eb7","key":"employee_id","value":"","description":"ID of the employee"},{"id":"d0b3d804-e3c7-44a6-a029-3ac457e0eb0a","key":"fleet_id","value":"","description":"ID of the fleet"},{"id":"d22eedde-259a-4473-a195-9bc594498406","key":"guest_id","value":"","description":"ID of the guest"},{"id":"15a9a5fd-2ab7-4047-8802-b77da490a27c","key":"guest_profile_id","value":"","description":"ID of the guest profile"},{"id":"2221170d-a517-4772-92df-a51e704cb9ac","key":"node_id","value":"","description":"ID of the access point/node"},{"id":"1cfe29ec-2c4f-43a5-bd1a-c8b5811b75b2","key":"org_unit_id","value":"","description":"ID of the organization unit"},{"id":"b14a4621-e6fa-4a9a-87d9-e38955c095c9","key":"theme_id","value":"","description":"ID of the theme"},{"id":"ca5e2bb0-6b56-4a3f-a40b-504b3ae47f67","key":"translation_id","value":"","description":"ID of the translation"},{"id":"f043ab09-d4c2-475f-9bd9-629179903533","key":"tariff_id","value":"","description":"ID of the tariff"},{"id":"420292fe-96be-4c62-b6f2-fa58d4ad69ec","key":"tariff_group_id","value":"","description":"ID of the tariff group"},{"id":"c6c89b60-3a40-4d4c-9ee0-84ee42584c6b","key":"venue_id","value":"","description":"ID of the venue"},{"id":"97f59aad-5574-4ccd-b2bd-55aed4a068d0","key":"vehicle_id","value":"","description":"ID of the vehicle"},{"id":"b8a149fe-0bd2-4b33-b1d1-60be19a55096","key":"configuration_id","value":"","description":"ID of the configuration"},{"id":"67efb2cc-47fa-485c-ae3e-f9eca727a0be","key":"attribute_id","value":"","description":"ID of the attribute"},{"id":"3bd9ed35-b4d4-4b14-a5ba-4267b849b259","key":"shared_file_id","value":"","description":"ID of the shared file"},{"id":"67eefd0b-88e3-4de4-a7b6-fb0ab1ef64d1","key":"variable_id","value":"","description":"ID of the variable"},{"id":"4fabe684-61a8-4bbc-bc32-eff42d0c9458","key":"scheduled_report_id","value":"","description":"ID of the scheduled report"},{"id":"d13ea3a4-fd51-44a2-9962-2af14ee90259","key":"share_code","value":"","description":"Share code for sharing resources"},{"id":"b83cc938-ad84-4030-ae0d-e3f1f0b23d44","key":"username","value":"","description":"Username for user lookup"},{"id":"c3545c3f-6c72-4153-9122-8237014889ec","key":"token_id","value":"","description":"ID of the API token"},{"id":"76137c39-b259-4d05-9496-c187f4a45be9","key":"report_id","value":"110","description":"Report type ID (110=auth logs, 111=accounting, etc.)"},{"id":"76613df7-9f13-47cb-8929-efe82ecd5f0a","key":"user_group_id","value":"","description":"ID of the user-group relationship"},{"id":"550d3794-53bb-41f8-968d-d44162372919","key":"task_name","value":"","description":"Name of async task to check status"},{"id":"434e440a-2f0b-4229-b156-033592fcdee0","key":"type","value":"","description":"Type filter for resources"},{"id":"aba375f1-5d1d-4a1d-a9e3-db65bb95d964","key":"table","value":"","description":"Table name for export operations"},{"id":"38d61d10-de11-40ab-9013-f4d424ccfef6","key":"delete_users","value":"false","description":"Whether to delete associated users"},{"id":"55ef2790-48a1-47b6-abb2-a888e16e160f","key":"include_share_codes","value":"false","description":"Include share codes in response"},{"id":"83a5eb59-7746-4a9b-9e19-7320614a6ba8","key":"splash_url","value":"","description":"Splash page URL for captive portal testing"},{"id":"587ca31d-68b6-4042-8094-8ff8523a0993","key":"workflow_group_id","value":"","description":"Temp variable for workflow examples"},{"id":"8425cbb1-3fe4-4bb9-bd1a-a3aca1ef084e","key":"workflow_user_id","value":"","description":"Temp variable for workflow examples"},{"id":"93a3261c-b924-45d1-9fd0-a58d17bda673","key":"workflow_voucher_series","value":"","description":"Temp variable for workflow examples"}]}