{
  "info": {
    "_postman_id": "581d10b1-040e-45b1-af43-40cde29b5d8d",
    "name": "IronWiFi REST API - Public",
    "description": "# IronWiFi REST APIThe IronWiFi REST API allows you to programmatically manage WiFi networks, users, devices, and more.## Quick Start1. **Set your API token**: Go to IronWiFi Console > Account > API Keys to generate a token2. **Configure environment**: Set `baseUrl` and `auth_bearer_token` in your Postman environment3. **Select region**: Update `baseUrl` subdomain for your region (default: console.ironwifi.io)## AuthenticationAll requests use Bearer token authentication:```Authorization: Bearer {your_api_token}```API tokens can be created via the Console UI or the `/keys` endpoint.## Common Operations| Task | Endpoint | Method ||------|----------|--------|| List all users | `/users` | GET || Create a user | `/users` | POST || Get authentication logs | `/reports/110` | GET || Create a voucher | `/vouchers` | POST || Generate onboarding profile | `/profiles` | POST || Create API key | `/keys` | POST |## Response FormatResponses use HAL+JSON format with:- `_embedded`: Contains the resource data- `_links`: Navigation links (self, next, prev)- `total_items`, `page`, `page_size`: Pagination info## PaginationUse query parameters:- `page`: Page number (default: 1)- `page_size`: Items per page (default: 25, max: 100)Example: `GET /users?page=2&page_size=50`## Filtering & Sorting- **Filter**: `?filter[field]=value` or `?field=value`- **Sort**: `?sort=field:asc` or `?sort=field:desc`Example: `GET /users?filter[disabled]=0&sort=username:asc`## Regions| Region | Base URL ||--------|----------|| Global (default) | `console.ironwifi.io` || Europe West | `europe-west1.ironwifi.io` || Europe West 2 | `europe-west2.ironwifi.io` || US Central | `us-central1.ironwifi.io` || US West | `us-west1.ironwifi.io` || Asia Southeast | `asia-southeast1.ironwifi.io` || Asia East | `asia-east1.ironwifi.io` || Australia | `australia-southeast1.ironwifi.io` || Africa South | `africa-south1.ironwifi.io` |## Error Codes| Code | Meaning ||------|---------|| 400 | Bad Request - Check your request syntax || 401 | Unauthorized - Invalid or missing API token || 403 | Forbidden - Insufficient permissions || 404 | Not Found - Resource doesn't exist || 409 | Conflict - Resource already exists || 422 | Validation Error - Check required fields || 429 | Rate Limited - Too many requests || 500 | Server Error - Contact support |## Rate Limits- 100 requests per minute per API key- Bulk operations have additional limits (see BulkOperationLimits)- Rate limit headers: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`## Bulk OperationsMany endpoints support bulk operations:- **Bulk create**: POST with array in request body- **Bulk delete**: DELETE with comma-separated IDs in URL- **Bulk update**: PATCH with array in request body## WebhooksConfigure webhooks to receive real-time notifications:- User events (create, update, delete)- Authentication events (success, failure)- Device events (connect, disconnect)## Support- Email: support@ironwifi.com- Schedule a call: https://meetings.ironwifi.com- Documentation: https://www.ironwifi.com/documentation/- API Status: https://status.ironwifi.com## New Features (December 2024)### Bulk OperationsThe API now supports bulk operations for users, devices, and vouchers:- `POST /bulk/{resource}` - Synchronous bulk create- `POST /bulk/{resource}/async` - Async bulk operations- `GET /bulk/status/{job_id}` - Check job status- `DELETE /bulk/{resource}/delete-filter` - Filter-based bulk delete### RADIUS DictionaryAccess the RADIUS attribute dictionary:- `GET /dictionary` - List all RADIUS attributes- `GET /vendors` - List RADIUS vendors and VSAs### Role-Based Access ControlManage operator roles and permissions:- `GET/POST /roles` - Manage custom roles- `GET/POST /role-perm` - Manage role permissions### Alert ContactsConfigure alert recipients:- `GET/POST /alertcontacts` - Manage alert contacts\n\n### Support Dashboard\nAccess aggregate support metrics:\n- `GET /support-dashboard` - Dashboard metrics and stats",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_exporter_id": "326693",
    "_collection_link": "https://www.postman.com/cloudy-moon-5470/ironwifi-s-public-workspace/collection/h1fep15/ironwifi-rest-api-public?action=share&source=collection_link&creator=326693"
  },
  "item": [
    {
      "name": "Workflow Examples",
      "description": "Common API workflow examples showing how to combine multiple endpoints to accomplish tasks.Run these in order to see the complete workflow.",
      "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, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('workflow_group_id', _data.id);",
                      "    console.log('Created group:', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Workflow Test Group\",    \"comment\": \"Created by workflow example\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/user-groups",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "user-groups"
                  ]
                },
                "description": "Creates a new user group to organize RADIUS users. Groups can have shared attributes and policies."
              },
              "response": [
                {
                  "name": "1.1 Create Group",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "body": {
                      "mode": "raw",
                      "raw": "{    \"name\": \"Workflow Test Group\",    \"comment\": \"Created by workflow example\"}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "url": {
                      "raw": "{{baseUrl}}/user-groups",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "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"
                    }
                  ],
                  "body": "{  \"id\": \"81d7b4ea-e46c-4081-8d1f-e91e993c79ba\",  \"name\": \"Workflow Test Group\",  \"comment\": \"Created by workflow example\",  \"_links\": {    \"self\": {      \"href\": \"https://console.ironwifi.io/api/user-groups/{id}\"    }  }}"
                }
              ]
            },
            {
              "name": "1.2 Create User in Group",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('User created successfully', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('workflow_user_id', _data.id);",
                      "    console.log('Created user:', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                },
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const workflow_group_id = pm.environment.get('workflow_group_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!workflow_group_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"username\": \"workflow-test-user@example.com\",    \"password\": \"SecurePassword123!\",    \"group_id\": \"{{workflow_group_id}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/users",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users"
                  ]
                },
                "description": "Creates a RADIUS user and assigns them to the previously created group."
              },
              "response": [
                {
                  "name": "1.2 Create User in Group",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "body": {
                      "mode": "raw",
                      "raw": "{    \"username\": \"workflow-test-user@example.com\",    \"password\": \"SecurePassword123!\",    \"group_id\": \"{{workflow_group_id}}\"}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "url": {
                      "raw": "{{baseUrl}}/users",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "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"
                    }
                  ],
                  "body": "{  \"id\": \"e65c3f9a-a520-4ccc-92f6-7b5e8f46159c\",  \"username\": \"workflow-test-user@example.com\",  \"group_id\": \"6ca646c9-3a67-49c6-9f48-c7451ec385eb\",  \"disabled\": 0,  \"_links\": {    \"self\": {      \"href\": \"https://console.ironwifi.io/api/users/{id}\"    }  }}"
                }
              ]
            },
            {
              "name": "1.3 Verify User",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('User retrieved successfully', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "pm.test('User has correct group', function () {",
                      "const _data = pm.response.json();",
                      "    pm.expect(_data.group_id).to.equal(pm.environment.get('workflow_group_id'));",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                },
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const workflow_user_id = pm.environment.get('workflow_user_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!workflow_user_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/{{workflow_user_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{workflow_user_id}}"
                  ]
                },
                "description": "Retrieves the created user to verify all properties were set correctly."
              },
              "response": [
                {
                  "name": "1.3 Verify User",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/users/{{workflow_user_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "users",
                        "{{workflow_user_id}}"
                      ]
                    },
                    "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"
                    }
                  ],
                  "body": "{  \"id\": \"9f61790f-82c3-410b-b067-9e78490d309a\",  \"username\": \"workflow-test-user@example.com\",  \"group_id\": \"7ba98438-35b1-4660-a65b-51307c72aa4e\",  \"disabled\": 0,  \"created\": \"2025-12-10T04:51:11Z\",  \"_links\": {    \"self\": {      \"href\": \"https://console.ironwifi.io/api/users/{id}\"    }  }}"
                }
              ]
            },
            {
              "name": "1.4 Cleanup - Delete User",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('User deleted successfully', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 204]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                },
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const workflow_user_id = pm.environment.get('workflow_user_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!workflow_user_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/{{workflow_user_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{workflow_user_id}}"
                  ]
                },
                "description": "Removes the test user. In production, this would deactivate their network access."
              },
              "response": [
                {
                  "name": "1.4 Cleanup - Delete User",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/users/{{workflow_user_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "users",
                        "{{workflow_user_id}}"
                      ]
                    },
                    "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"
                    }
                  ],
                  "body": null
                }
              ]
            },
            {
              "name": "1.5 Cleanup - Delete Group",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Group deleted successfully', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 204]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                },
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const workflow_group_id = pm.environment.get('workflow_group_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!workflow_group_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/user-groups/{{workflow_group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "user-groups",
                    "{{workflow_group_id}}"
                  ]
                },
                "description": "Removes the test group. Groups cannot be deleted if they contain users."
              },
              "response": [
                {
                  "name": "1.5 Cleanup - Delete Group",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/user-groups/{{workflow_group_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "user-groups",
                        "{{workflow_group_id}}"
                      ]
                    },
                    "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"
                    }
                  ],
                  "body": null
                }
              ]
            }
          ],
          "description": "Complete workflow to create a user group, add a user to it, verify the user, and clean up."
        },
        {
          "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.environment.set('workflow_voucher_series', _data.series);",
                      "    console.log('Created voucher series:', _data.series);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"quantity\": 5,    \"validity_hours\": 24,    \"bandwidth_limit_down\": 10000000,    \"bandwidth_limit_up\": 5000000,    \"comment\": \"API Test Vouchers\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers"
                  ]
                },
                "description": "Generates a batch of vouchers with specified validity and bandwidth limits."
              },
              "response": [
                {
                  "name": "2.1 Create Voucher Series",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "body": {
                      "mode": "raw",
                      "raw": "{    \"quantity\": 5,    \"validity_hours\": 24,    \"bandwidth_limit_down\": 10000000,    \"bandwidth_limit_up\": 5000000,    \"comment\": \"API Test Vouchers\"}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "url": {
                      "raw": "{{baseUrl}}/vouchers",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "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"
                    }
                  ],
                  "body": "{  \"series\": \"VS-47865626\",  \"quantity\": 5,  \"vouchers\": [    {      \"code\": \"ABCD-1234-EFGH\",      \"status\": \"unused\"    },    {      \"code\": \"IJKL-5678-MNOP\",      \"status\": \"unused\"    },    {      \"code\": \"QRST-9012-UVWX\",      \"status\": \"unused\"    },    {      \"code\": \"YZAB-3456-CDEF\",      \"status\": \"unused\"    },    {      \"code\": \"GHIJ-7890-KLMN\",      \"status\": \"unused\"    }  ]}"
                }
              ]
            },
            {
              "name": "2.2 List Vouchers in Series",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Vouchers retrieved successfully', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "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"
                  }
                },
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const workflow_voucher_series = pm.environment.get('workflow_voucher_series');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!workflow_voucher_series) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers?filter=series:{{workflow_voucher_series}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers"
                  ],
                  "query": [
                    {
                      "key": "filter",
                      "value": "series:{{workflow_voucher_series}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    }
                  ]
                },
                "description": "Retrieves all vouchers in the created series to verify generation."
              },
              "response": [
                {
                  "name": "2.2 List Vouchers in Series",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/vouchers?filter=series:{{workflow_voucher_series}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "vouchers"
                      ],
                      "query": [
                        {
                          "key": "filter",
                          "value": "series:{{workflow_voucher_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"
                    }
                  ],
                  "body": "{  \"_embedded\": {    \"vouchers\": [      {        \"id\": \"ffda52b4-7efc-4612-9d6b-84a6e75755c3\",        \"code\": \"ABCD-1234-EFGH\",        \"status\": \"unused\",        \"validity_hours\": 24      },      {        \"id\": \"bb592ff6-7254-49f5-98df-940dafc96350\",        \"code\": \"IJKL-5678-MNOP\",        \"status\": \"unused\",        \"validity_hours\": 24      }    ]  },  \"total_items\": 5,  \"page\": 1,  \"page_size\": 25}"
                }
              ]
            },
            {
              "name": "2.3 Delete Voucher Series",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Voucher series deleted', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 204]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                },
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const workflow_voucher_series = pm.environment.get('workflow_voucher_series');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!workflow_voucher_series) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers?series={{workflow_voucher_series}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers"
                  ],
                  "query": [
                    {
                      "key": "series",
                      "value": "{{workflow_voucher_series}}",
                      "description": "Voucher series/batch identifier"
                    }
                  ]
                },
                "description": "Bulk deletes all vouchers in a series. Useful for cleanup or expiring unused vouchers."
              },
              "response": [
                {
                  "name": "2.3 Delete Voucher Series",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/vouchers?series={{workflow_voucher_series}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "vouchers"
                      ],
                      "query": [
                        {
                          "key": "series",
                          "value": "{{workflow_voucher_series}}",
                          "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"
                    }
                  ],
                  "body": null
                }
              ]
            }
          ],
          "description": "Generate a batch of vouchers and manage them."
        },
        {
          "name": "3. Reports Workflow",
          "item": [
            {
              "name": "3.0 List Scheduled Reports",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Scheduled reports list retrieved successfully', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 401, 403]);",
                      "});",
                      "",
                      "if (pm.response.code === 200) {",
                      "    pm.test('Response has HAL structure', function () {",
                      "        const data = pm.response.json();",
                      "        pm.expect(data).to.have.property('_embedded');",
                      "        pm.expect(data._embedded).to.have.property('reports');",
                      "        pm.expect(data._embedded.reports).to.be.an('array');",
                      "    });",
                      "",
                      "    pm.test('Response has pagination metadata', function () {",
                      "        const data = pm.response.json();",
                      "        pm.expect(data).to.have.any.keys('total_items', 'page', 'page_size', 'page_count');",
                      "    });",
                      "",
                      "    pm.test('Each scheduled report has required fields', function () {",
                      "        const data = pm.response.json();",
                      "        if (data._embedded.reports.length > 0) {",
                      "            const report = data._embedded.reports[0];",
                      "            pm.expect(report).to.have.property('id');",
                      "            pm.expect(report).to.have.property('name');",
                      "            pm.expect(report).to.have.property('frequency');",
                      "        }",
                      "    });",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/reports",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "reports"
                  ]
                },
                "description": "Lists all scheduled reports for the authenticated company. Returns a paginated HAL+JSON collection with report details including name, frequency, next execution time, and recipients."
              },
              "response": [
                {
                  "name": "3.0 List Scheduled Reports - Success",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/reports",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "reports"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    }
                  ],
                  "body": "{\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console-dev.ironwifi.io/api/bc4af1ac667b0646/reports\"\n    }\n  },\n  \"_embedded\": {\n    \"reports\": [\n      {\n        \"id\": \"report-uuid-1\",\n        \"name\": \"Weekly Auth Report\",\n        \"report_id\": \"110\",\n        \"frequency\": \"weekly\",\n        \"next_execution\": \"2026-02-10 08:00:00\",\n        \"recipient\": \"admin@example.com\",\n        \"created_by\": \"operator@example.com\",\n        \"creation_date\": \"2026-01-15 10:30:00\"\n      }\n    ]\n  },\n  \"page_count\": 1,\n  \"page_size\": 25,\n  \"total_items\": 1,\n  \"page\": 1\n}"
                },
                {
                  "name": "3.0 List Scheduled Reports - Empty",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/reports",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "reports"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    }
                  ],
                  "body": "{\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console-dev.ironwifi.io/api/bc4af1ac667b0646/reports\"\n    }\n  },\n  \"_embedded\": {\n    \"reports\": []\n  },\n  \"page_count\": 0,\n  \"page_size\": 25,\n  \"total_items\": 0,\n  \"page\": 1\n}"
                }
              ]
            },
            {
              "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.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "pm.test('Report has data structure', function () {",
                      "const _data = pm.response.json();",
                      "    pm.expect(_data).to.have.any.keys('_embedded', 'total_items', 'rows', 'array');",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "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."
              },
              "response": [
                {
                  "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"
                    }
                  ],
                  "body": "{  \"_embedded\": {    \"reports\": [      {        \"timestamp\": \"2025-12-10T04:51:11Z\",        \"username\": \"user@example.com\",        \"nas_ip_address\": \"192.168.1.1\",        \"calling_station_id\": \"AA:BB:CC:DD:EE:FF\",        \"reply\": \"Access-Accept\",        \"reply_message\": \"OK\"      }    ]  },  \"total_items\": 150,  \"page\": 1,  \"page_size\": 100}"
                }
              ]
            },
            {
              "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.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "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."
              },
              "response": [
                {
                  "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"
                    }
                  ],
                  "body": "{  \"_embedded\": {    \"reports\": [      {        \"username\": \"user@example.com\",        \"session_time\": 3600,        \"input_octets\": 104857600,        \"output_octets\": 52428800,        \"start_time\": \"2025-12-10T04:51:11Z\",        \"stop_time\": \"2025-12-10T04:51:11Z\"      }    ]  },  \"total_items\": 45,  \"page\": 1,  \"page_size\": 25}"
                }
              ]
            },
            {
              "name": "3.3 Export Report as CSV",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test(\"CSV export successful\", function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "pm.test(\"Response is CSV format or JSON with data\", function () {",
                      "    const contentType = pm.response.headers.get(\"Content-Type\");",
                      "    // API may return CSV as text/csv or as JSON with CSV data",
                      "    pm.expect(contentType).to.satisfy(function(ct) {",
                      "        return ct.includes(\"csv\") || ct.includes(\"json\");",
                      "    });",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "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."
              },
              "response": [
                {
                  "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"
                    }
                  ],
                  "body": "\"timestamp,username,nas_ip_address,reply\\n2024-12-09T12:00:00Z,user@example.com,192.168.1.1,Access-Accept\""
                }
              ]
            }
          ],
          "description": "Retrieve various reports and export data."
        },
        {
          "name": "4. Bulk Operations Workflow",
          "item": [
            {
              "name": "4.1 Create multiple users",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/bulk",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "bulk"
                  ]
                },
                "description": "Creates multiple users in a single request.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"users\": [        {            \"username\": \"user1@example.com\",            \"password\": \"Pass123!\",            \"group_id\": \"{{group_id}}\"        },        {            \"username\": \"user2@example.com\",            \"password\": \"Pass123!\",            \"group_id\": \"{{group_id}}\"        },        {            \"username\": \"user3@example.com\",            \"password\": \"Pass123!\",            \"group_id\": \"{{group_id}}\"        }    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "4.1 Create multiple users",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/users/bulk",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "users",
                        "bulk"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"created\": 5,\n  \"failed\": 0,\n  \"users\": [\n    {\n      \"id\": \"11111111-1111-1111-1111-111111111111\",\n      \"username\": \"user1@example.com\"\n    },\n    {\n      \"id\": \"22222222-2222-2222-2222-222222222222\",\n      \"username\": \"user2@example.com\"\n    }\n  ]\n}"
                }
              ]
            },
            {
              "name": "4.2 Bulk delete users",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/{{user_id1}},{{user_id2}},{{user_id3}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{user_id1}},{{user_id2}},{{user_id3}}"
                  ]
                },
                "description": "Deletes multiple users in a single request by passing comma-separated IDs."
              },
              "response": [
                {
                  "name": "4.2 Bulk delete users",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/users/{{user_id1}},{{user_id2}},{{user_id3}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "users",
                        "{{user_id1}},{{user_id2}},{{user_id3}}"
                      ]
                    }
                  },
                  "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": null
                }
              ]
            }
          ]
        },
        {
          "name": "5. Guest Self-Registration Workflow",
          "item": [
            {
              "name": "5.1 Create guest profile for portal",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guest-profiles",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guest-profiles"
                  ]
                },
                "description": "Creates a guest profile that defines registration options.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Lobby Guest Profile\",    \"require_email\": true,    \"require_phone\": false,    \"require_name\": true,    \"default_validity\": 86400,    \"bandwidth_limit\": 10,    \"data_limit\": 104857600}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "5.1 Create guest profile for portal",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/guest-profiles",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "guest-profiles"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"33333333-3333-3333-3333-333333333333\",\n  \"name\": \"Guest WiFi Profile\",\n  \"bandwidth_limit_down\": 10000000,\n  \"bandwidth_limit_up\": 5000000,\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/guest-profiles/{id}\"\n    }\n  }\n}"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('guest_profile_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ]
            },
            {
              "name": "5.2 Link profile to captive portal",
              "request": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals",
                    "{{captive_portal_id}}"
                  ]
                },
                "description": "Links the guest profile to a captive portal.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"guest_profile_id\": \"{{guest_profile_id}}\",    \"registration_enabled\": true}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "5.2 Link profile to captive portal",
                  "originalRequest": {
                    "method": "PATCH",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "captive-portals",
                        "{{captive_portal_id}}"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"44444444-4444-4444-4444-444444444444\",\n  \"name\": \"Guest Portal\",\n  \"enabled\": true,\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n    }\n  }\n}"
                }
              ],
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const guest_profile_id = pm.environment.get('guest_profile_id');",
                      "const captive_portal_id = pm.environment.get('captive_portal_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!guest_profile_id || !captive_portal_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Response status is valid', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ]
            }
          ]
        },
        {
          "name": "6. Complete Network Setup",
          "description": "End-to-end workflow for setting up a new WiFi network with captive portal, user groups, and testing.",
          "item": [
            {
              "name": "6.1 Create Network",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 6.1 Create Network');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Network created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('setup_network_id', _data.id);",
                      "    pm.environment.set('setup_nas_secret', _data.secret);",
                      "    console.log('Network created:', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/networks",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "networks"
                  ]
                },
                "description": "Create a new network/NAS entry for RADIUS authentication.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Office WiFi\",    \"shortname\": \"office-wifi\",    \"server\": \"radius.ironwifi.com\",    \"secret\": \"{{$randomPassword}}\",    \"ports\": \"1812,1813\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "6.1 Create Network",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/networks",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "networks"
                      ]
                    },
                    "description": "Create a new network/NAS entry for RADIUS authentication.",
                    "body": {
                      "mode": "raw",
                      "raw": "{    \"name\": \"Office WiFi\",    \"shortname\": \"office-wifi\",    \"server\": \"radius.ironwifi.com\",    \"secret\": \"{{$randomPassword}}\",    \"ports\": \"1812,1813\"}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                    }
                  ],
                  "body": "{  \"id\": \"network-uuid\",  \"name\": \"Office WiFi\",  \"shortname\": \"office-wifi\",  \"secret\": \"generated-secret\",  \"server\": \"radius.ironwifi.com\"}"
                }
              ]
            },
            {
              "name": "6.2 Create User Group",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 6.2 Create User Group');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Group created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('setup_group_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/groups",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "groups"
                  ]
                },
                "description": "Create a group for organizing users with shared policies.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Office Employees\",    \"comment\": \"Standard employee access\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "6.2 Create User Group",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/groups",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "groups"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"66666666-6666-6666-6666-666666666666\",\n  \"name\": \"Test Group\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/user-groups/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "6.3 Add Group Attributes",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 6.3 Add Group Attributes');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Attribute added', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/attributes",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "attributes"
                  ]
                },
                "description": "Configure RADIUS attributes for the group (bandwidth, session limits).",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"group_id\": \"{{setup_group_id}}\",    \"attribute\": \"Session-Timeout\",    \"op\": \":=\",    \"value\": \"28800\",    \"type\": \"reply\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "6.3 Add Group Attributes",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/attributes",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "attributes"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"77777777-7777-7777-7777-777777777777\",\n  \"attribute\": \"Session-Timeout\",\n  \"value\": \"3600\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "6.4 Create Captive Portal",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 6.4 Create Captive Portal');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Portal created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('setup_portal_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals"
                  ]
                },
                "description": "Create a captive portal for guest access.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Guest WiFi Portal\",    \"type\": \"anonymous\",    \"network_id\": \"{{setup_network_id}}\",    \"redirect_url\": \"https://company.com\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "6.4 Create Captive Portal",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/captive-portals",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "captive-portals"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"44444444-4444-4444-4444-444444444444\",\n  \"name\": \"Guest Portal\",\n  \"enabled\": true,\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "6.5 Test Network Authentication",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 6.5 Test Network Authentication');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/debug/auth-test",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "debug",
                    "auth-test"
                  ]
                },
                "description": "Test RADIUS authentication against the network.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"network_id\": \"{{setup_network_id}}\",    \"username\": \"test@example.com\",    \"password\": \"testpass\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "6.5 Test Network Authentication",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/debug/auth-test",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "debug",
                        "auth-test"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"result\": \"success\",\n  \"message\": \"Network authentication configured correctly\",\n  \"latency_ms\": 45\n}"
                }
              ]
            },
            {
              "name": "6.6 Cleanup (Optional)",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const setup_network_id = pm.environment.get('setup_network_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!setup_network_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}",
                      "",
                      "console.log('Executing: 6.6 Cleanup (Optional)');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Response status is valid', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/networks/{{setup_network_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "networks",
                    "{{setup_network_id}}"
                  ]
                },
                "description": "Delete the test network and associated resources."
              },
              "response": [
                {
                  "name": "6.6 Cleanup (Optional)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/networks/{{setup_network_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "networks",
                        "{{setup_network_id}}"
                      ]
                    }
                  },
                  "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": null
                }
              ]
            }
          ]
        },
        {
          "name": "7. SSO Integration Setup",
          "description": "Configure Single Sign-On with Azure AD, Google Workspace, or SAML.",
          "item": [
            {
              "name": "7.1 Create LDAP Connector",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 7.1 Create LDAP Connector');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Connector created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422, 500]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('sso_connector_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors"
                  ]
                },
                "description": "Create an LDAP/AD connector for user synchronization.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Azure AD Connector\",    \"type\": \"azure_ad\",    \"config\": {        \"tenant_id\": \"your-tenant-id\",        \"client_id\": \"your-client-id\",        \"client_secret\": \"{{azure_client_secret}}\",        \"sync_groups\": true,        \"sync_interval\": 3600    }}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "7.1 Create LDAP Connector",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/connectors",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "connectors"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"88888888-8888-8888-8888-888888888888\",\n  \"name\": \"LDAP Connector\",\n  \"type\": \"ldap\",\n  \"host\": \"ldap.example.com\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/connectors/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "7.2 Test Connector",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const sso_connector_id = pm.environment.get('sso_connector_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!sso_connector_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}",
                      "",
                      "console.log('Executing: 7.2 Test Connector');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Connector test passed', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "const _data = pm.response.json();",
                      "    pm.expect(_data.success).to.be.true;",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors/{{sso_connector_id}}/test",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors",
                    "{{sso_connector_id}}",
                    "test"
                  ]
                },
                "description": "Test the connector configuration and connectivity."
              },
              "response": [
                {
                  "name": "7.2 Test Connector",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/connectors/{{sso_connector_id}}/test",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "connectors",
                        "{{sso_connector_id}}",
                        "test"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"status\": \"success\",\n  \"message\": \"Connection established\",\n  \"users_found\": 150\n}"
                }
              ]
            },
            {
              "name": "7.3 Create Auth Provider",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 7.3 Create Auth Provider');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Auth provider created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('sso_auth_provider_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers"
                  ]
                },
                "description": "Create an authentication provider using the connector.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Azure AD Login\",    \"type\": \"oauth2\",    \"connector_id\": \"{{sso_connector_id}}\",    \"config\": {        \"authorization_url\": \"https://login.microsoftonline.com/{{tenant_id}}/oauth2/v2.0/authorize\",        \"token_url\": \"https://login.microsoftonline.com/{{tenant_id}}/oauth2/v2.0/token\",        \"scope\": \"openid profile email\"    }}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "7.3 Create Auth Provider",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/authentication-providers",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "authentication-providers"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"99999999-9999-9999-9999-999999999999\",\n  \"name\": \"LDAP Auth\",\n  \"type\": \"ldap\",\n  \"connector_id\": \"88888888-8888-8888-8888-888888888888\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/authentication-providers/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "7.4 Link to Captive Portal",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const sso_auth_provider_id = pm.environment.get('sso_auth_provider_id');",
                      "const captive_portal_id = pm.environment.get('captive_portal_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!sso_auth_provider_id || !captive_portal_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}",
                      "",
                      "console.log('Executing: 7.4 Link to Captive Portal');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Response status is valid', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals",
                    "{{captive_portal_id}}"
                  ]
                },
                "description": "Add the SSO authentication provider to a captive portal.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"authentication_providers\": [        \"{{sso_auth_provider_id}}\"    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "7.4 Link to Captive Portal",
                  "originalRequest": {
                    "method": "PATCH",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "captive-portals",
                        "{{captive_portal_id}}"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"44444444-4444-4444-4444-444444444444\",\n  \"name\": \"Guest Portal\",\n  \"enabled\": true,\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "7.5 Trigger Manual Sync",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const sso_connector_id = pm.environment.get('sso_connector_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!sso_connector_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}",
                      "",
                      "console.log('Executing: 7.5 Trigger Manual Sync');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Sync triggered', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 202]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors/{{sso_connector_id}}/sync",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors",
                    "{{sso_connector_id}}",
                    "sync"
                  ]
                },
                "description": "Manually trigger user synchronization from the directory."
              },
              "response": [
                {
                  "name": "7.5 Trigger Manual Sync",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/connectors/{{sso_connector_id}}/sync",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "connectors",
                        "{{sso_connector_id}}",
                        "sync"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"status\": \"started\",\n  \"job_id\": \"sync-12345\",\n  \"message\": \"Synchronization started\"\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "8. Certificate Authentication Setup",
          "description": "Configure EAP-TLS certificate-based authentication for WPA2-Enterprise.",
          "item": [
            {
              "name": "8.1 Create CA Certificate",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 8.1 Create CA Certificate');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('CA created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('cert_ca_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates"
                  ]
                },
                "description": "Create or upload a Certificate Authority for EAP-TLS.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Company Root CA\",    \"type\": \"ca\",    \"validity_days\": 3650,    \"common_name\": \"Company WiFi CA\",    \"organization\": \"Company Inc.\",    \"country\": \"US\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "8.1 Create CA Certificate",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/certificates",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "certificates"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\",\n  \"name\": \"Root CA\",\n  \"type\": \"ca\",\n  \"valid_from\": \"2024-01-01T00:00:00Z\",\n  \"valid_to\": \"2034-01-01T00:00:00Z\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/certificates/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "8.2 Create Server Certificate",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 8.2 Create Server Certificate');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Server cert created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates"
                  ]
                },
                "description": "Create server certificate for RADIUS server.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"RADIUS Server Cert\",    \"type\": \"server\",    \"ca_id\": \"{{cert_ca_id}}\",    \"validity_days\": 365,    \"common_name\": \"radius.company.com\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "8.2 Create Server Certificate",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/certificates",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "certificates"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb\",\n  \"name\": \"RADIUS Server\",\n  \"type\": \"server\",\n  \"ca_id\": \"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/certificates/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "8.3 Generate User Certificate",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "console.log('Executing: 8.3 Generate User Certificate');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Client cert created', function() {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 401, 403, 404, 422]);",
                      "});",
                      "",
                      "if (pm.response.code === 201 || pm.response.code === 200) {",
                      "const _data = pm.response.json();",
                      "    pm.environment.set('cert_client_id', _data.id);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates"
                  ]
                },
                "description": "Generate a client certificate for a user.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"John Doe Client Cert\",    \"type\": \"client\",    \"ca_id\": \"{{cert_ca_id}}\",    \"validity_days\": 365,    \"common_name\": \"john.doe@company.com\",    \"user_id\": \"{{user_id}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "8.3 Generate User Certificate",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/certificates",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "certificates"
                      ]
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"id\": \"cccccccc-cccc-cccc-cccc-cccccccccccc\",\n  \"name\": \"User Certificate\",\n  \"type\": \"client\",\n  \"username\": \"user@example.com\",\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/certificates/{id}\"\n    }\n  }\n}"
                }
              ]
            },
            {
              "name": "8.4 Download Certificate Bundle",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const cert_client_id = pm.environment.get('cert_client_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!cert_client_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}",
                      "",
                      "console.log('Executing: 8.4 Download Certificate Bundle');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Response status is valid', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates/{{cert_client_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates",
                    "{{cert_client_id}}"
                  ]
                },
                "description": "Download the certificate bundle (P12/PFX format)."
              },
              "response": [
                {
                  "name": "8.4 Download Certificate Bundle",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/certificates/{{cert_client_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "certificates",
                        "{{cert_client_id}}"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"certificate\": \"-----BEGIN CERTIFICATE-----\\nMIIB...\\n-----END CERTIFICATE-----\",\n  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIE...\\n-----END PRIVATE KEY-----\",\n  \"ca_chain\": \"-----BEGIN CERTIFICATE-----\\nMIIC...\\n-----END CERTIFICATE-----\"\n}"
                }
              ]
            },
            {
              "name": "8.5 Revoke Certificate",
              "event": [
                {
                  "listen": "prerequest",
                  "script": {
                    "exec": [
                      "// Check required variables before running test",
                      "const cert_client_id = pm.environment.get('cert_client_id');",
                      "",
                      "// Skip test if any required variable is missing or empty",
                      "if (!cert_client_id) {",
                      "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                      "    // Set a flag that test script can check",
                      "    pm.variables.set('_skip_test', true);",
                      "}",
                      "",
                      "console.log('Executing: 8.5 Revoke Certificate');"
                    ],
                    "type": "text/javascript",
                    "packages": {}
                  }
                },
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "// Check if test should be skipped due to missing dependencies",
                      "if (pm.variables.get('_skip_test')) {",
                      "    pm.test.skip('Skipped: dependency not available');",
                      "    return;",
                      "}",
                      "",
                      "pm.test('Response status is valid', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                      "});"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates/{{cert_client_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates",
                    "{{cert_client_id}}"
                  ]
                },
                "description": "Revoke a compromised or expired certificate using PATCH.",
                "body": {
                  "mode": "raw",
                  "raw": "{\"revoke\": true}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "response": [
                {
                  "name": "8.5 Revoke Certificate",
                  "originalRequest": {
                    "method": "PATCH",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/certificates/{{cert_client_id}}",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "certificates",
                        "{{cert_client_id}}"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "content-type",
                      "value": "application/hal+json"
                    },
                    {
                      "key": "access-control-allow-origin",
                      "value": "*"
                    },
                    {
                      "key": "date",
                      "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                    }
                  ],
                  "body": "{\n  \"status\": \"revoked\",\n  \"revoked_at\": \"2024-12-10T12:00:00Z\"\n}"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Error Examples",
      "description": "Common API error responses for reference. These show what to expect when requests fail.Error responses follow RFC 7807 (Problem Details for HTTP APIs) format.",
      "item": [
        {
          "name": "401 Unauthorized - Missing Token",
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "Example of a request without authentication. The API will return a 401 error."
          },
          "response": [
            {
              "name": "401 Unauthorized",
              "status": "Unauthorized",
              "code": 401,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Unauthorized\",  \"status\": 401,  \"detail\": \"Missing or invalid authentication token\"}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Note: This test demonstrates expected error format",
                  "// May return 200 if auth is handled differently",
                  "pm.test(\"Returns 401 or auth handled upstream\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 401, 403]);",
                  "});",
                  "",
                  "if (pm.response.code === 401) {",
                  "    pm.test(\"Error response has correct format\", function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property(\"status\");",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "401 Unauthorized - Invalid Token",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "invalid_token_12345",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "Example of a request with an invalid authentication token."
          },
          "response": [
            {
              "name": "401 Unauthorized - Invalid Token",
              "status": "Unauthorized",
              "code": 401,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Unauthorized\",  \"status\": 401,  \"detail\": \"Invalid or expired authentication token\"}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Returns 401 Unauthorized', function () {",
                  "    pm.expect(pm.response.code).to.equal(401);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "403 Forbidden - Insufficient Permissions",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/users/{{user_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "{{user_id}}"
              ]
            },
            "description": "Example when your API token doesn't have permission for this operation."
          },
          "response": [
            {
              "name": "403 Forbidden",
              "status": "Forbidden",
              "code": 403,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Forbidden\",  \"status\": 403,  \"detail\": \"You do not have permission to perform this action\"}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const user_id = pm.environment.get('user_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!user_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Returns 403 Forbidden', function () {",
                  "    pm.expect(pm.response.code).to.equal(403);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "404 Not Found - Resource Doesn't Exist",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/users/00000000-0000-0000-0000-000000000000",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "00000000-0000-0000-0000-000000000000"
              ]
            },
            "description": "Example when requesting a resource that doesn't exist."
          },
          "response": [
            {
              "name": "404 Not Found",
              "status": "Not Found",
              "code": 404,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Not Found\",  \"status\": 404,  \"detail\": \"User with ID 00000000-0000-0000-0000-000000000000 not found\"}"
            }
          ],
          "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"
              }
            }
          ]
        },
        {
          "name": "422 Validation Error - Missing Required Field",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"invalid_field\": \"test\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "Example of a validation error when required fields are missing."
          },
          "response": [
            {
              "name": "422 Unprocessable Entity",
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Unprocessable Entity\",  \"status\": 422,  \"validation_messages\": {    \"username\": {      \"isEmpty\": \"Value is required and can't be empty\"    },    \"group_id\": {      \"isEmpty\": \"Value is required and can't be empty\"    }  }}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Note: This test demonstrates expected validation error format",
                  "pm.test(\"Returns validation error or handled differently\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([400, 409, 422]);",
                  "});",
                  "",
                  "// Only check validation_messages if actually 422",
                  "if (pm.response.code === 422) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData.validation_messages) {",
                  "            pm.test(\"Response includes validation messages\", function () {",
                  "                pm.expect(jsonData).to.have.property(\"validation_messages\");",
                  "            });",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "422 Validation Error - Invalid Format",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"username\": \"invalid-email\",    \"group_id\": \"not-a-uuid\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "Example of validation errors for invalid field formats."
          },
          "response": [
            {
              "name": "422 Invalid Format",
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Unprocessable Entity\",  \"status\": 422,  \"validation_messages\": {    \"username\": {      \"emailAddressInvalidFormat\": \"The input is not a valid email address\"    },    \"group_id\": {      \"notUuid\": \"The input is not a valid UUID\"    }  }}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Note: This test demonstrates expected validation error format",
                  "pm.test(\"Returns validation error or conflict\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([400, 409, 422]);",
                  "});",
                  "",
                  "if (pm.response.code === 422) {",
                  "    pm.test(\"Response indicates validation failure\", function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData.status).to.equal(422);",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "429 Rate Limited",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "Example of rate limiting response. Occurs when you exceed 100 requests per minute."
          },
          "response": [
            {
              "name": "429 Too Many Requests",
              "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"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Too Many Requests\",  \"status\": 429,  \"detail\": \"Rate limit exceeded. Please retry after 45 seconds.\",  \"retry_after\": 45}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Note: Rate limiting may not trigger in test environment",
                  "pm.test(\"Response received (rate limit may not trigger)\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 429]);",
                  "});",
                  "",
                  "if (pm.response.code === 429) {",
                  "    pm.test(\"Response includes Retry-After header\", function () {",
                  "        pm.expect(pm.response.headers.get(\"Retry-After\")).to.exist;",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "409 Conflict - Resource Already Exists",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"username\": \"existing-user@example.com\",    \"group_id\": \"{{group_id}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "Example when trying to create a resource that already exists."
          },
          "response": [
            {
              "name": "409 Conflict",
              "status": "Conflict",
              "code": 409,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",  \"title\": \"Conflict\",  \"status\": 409,  \"detail\": \"A user with this username already exists\"}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Returns 409 Conflict', function () {",
                  "    pm.expect(pm.response.code).to.equal(409);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Networks",
      "item": [
        {
          "name": "Add network",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add network');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"nasname\": \"{{$randomLoremWord}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/networks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "networks"
              ]
            },
            "description": "**Parameters:**- `nasname` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add network",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"nasname\": \"{{$randomLoremWords}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/networks",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": ""
                }
              ],
              "body": "{    \"id\": \"5e0a16be-a73f-4555-ada1-bf89a865dfa4\",    \"primary_ip\": \"1.2.3.4\",    \"backup_ip\": \"1.2.3.5\",    \"secret\": \"************\",    \"auth_port\": 1812,    \"acct_port\": 1813,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all networks",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all networks');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/networks?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "networks"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all networks",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/networks?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "networks"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "type",
                      "value": "{{type}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": ""
                }
              ],
              "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}"
            }
          ]
        },
        {
          "name": "Get network",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const network_id = pm.environment.get('network_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!network_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/networks/{{network_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "networks",
                "{{network_id}}"
              ]
            },
            "description": "**Parameters:**- `network_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get network",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/networks/{{network_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "networks",
                    "{{network_id}}"
                  ]
                }
              },
              "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": ""
                }
              ],
              "body": "{    \"id\": \"5e0a16be-a73f-4555-ada1-bf89a865dfa4\",    \"nasname\": \"magnam quidem cumque\",    \"shortname\": null,    \"type\": \"trusted\",    \"ports\": null,    \"auth_port\": 1812,    \"acct_port\": 1813,    \"secret\": \"************\",    \"server\": \"auth\",    \"community\": null,    \"description\": null,    \"owner_id\": \"i-07171f6e\",    \"modification_date\": \"2025-07-17T22:14:18.274533921Z\",    \"region\": \"console-dev\",    \"primary_ip\": \"1.2.3.4\",    \"backup_ip\": \"1.2.3.5\",    \"proxy_to\": null,    \"realm\": null,    \"monitor_availability\": 0,    \"radius_status\": null,    \"radius_status_update\": null,    \"unknown_users\": 0,    \"ipv6\": 0,    \"open_roaming\": 0,    \"migration_shard_id\": \"22f4c432-471d-4751-b7a6-fcf3f123373c\",    \"radsec\": 0,    \"coa\": 0,    \"coa_vendor\": null,    \"eduroam\": 0,    \"or_ssid1\": null,    \"or_ssid2\": null,    \"or_ssid3\": null,    \"or_tier1\": null,    \"or_tier2\": null,    \"or_tier3\": null,    \"or_tier_price1\": null,    \"or_tier_price2\": null,    \"or_tier_price3\": null,    \"or_tier_currency1\": null,    \"or_tier_currency2\": null,    \"or_tier_currency3\": null,    \"or_tier_octet1\": null,    \"or_tier_octet2\": null,    \"or_tier_octet3\": null,    \"or_accepted_realms\": null,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4\"        }    }}"
            }
          ]
        },
        {
          "name": "Update network",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const network_id = pm.environment.get('network_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!network_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"nasname\":\"{{$randomLoremWords}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/networks/{{network_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "networks",
                "{{network_id}}"
              ]
            },
            "description": "**Parameters:**- `network_id` (Query parameter, type: `string`, required: `yes`)    - `nasname` (Body parameter, type: `string`, required: `no`)    - `shortname` (Body parameter, type: `string`, required: `no`)    - `unknown_users` (Body parameter, type: `boolean`, required: `no`)    - `ipv6` (Body parameter, type: `boolean`, required: `no`)    - `open_roaming` (Body parameter, type: `boolean`, required: `no`)    - `radsec` (Body parameter, type: `boolean`, required: `no`)    - `coa` (Body parameter, type: `boolean`, required: `no`)    - `coa_vendor` (Body parameter, type: `string`, required: `no`)    - `eduroam` (Body parameter, type: `boolean`, required: `no`)    - `or_ssid1` (Body parameter, type: `string`, required: `no`)    - `or_tier1` (Body parameter, type: `integer`, required: `no`)    - `or_tier_price1` (Body parameter, type: `integer`, required: `no`)    - `or_tier_currency1` (Body parameter, type: `string`, required: `no`)    - `or_accepted_realms` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update network",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"nasname\":\"changed_network_name\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/networks/{{network_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "networks",
                    "{{network_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"nasname\": \"changed_network_name\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/networks/5e0a16be-a73f-4555-ada1-bf89a865dfa4\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete network",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const network_id = pm.environment.get('network_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!network_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/networks/{{network_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "networks",
                "{{network_id}}"
              ]
            },
            "description": "**Parameters:**- `network_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete network",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/networks/{{network_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "networks",
                    "{{network_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage RADIUS networks (NAS clients).Networks represent your network devices (routers, APs, controllers) that send authentication requests to IronWiFi.**Common operations:**- Add a network to register a new NAS client- Get network details including RADIUS secret and ports- Update network settings (CoA, RadSec, OpenRoaming)- Delete networks that are no longer needed**Key fields:**- `nasname`: Display name for the network- `primary_ip`, `backup_ip`: RADIUS server IPs assigned to this network- `secret`: RADIUS shared secret- `auth_port`, `acct_port`: RADIUS ports (default 1812/1813)"
    },
    {
      "name": "Reports",
      "item": [
        {
          "name": "Get report",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const report_id = pm.environment.get('report_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!report_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reports/{{report_id}}?earliest={{earliest}}&latest={{latest}}&filter={{filter}}&page={{page}}&format={{format}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports",
                "{{report_id}}"
              ],
              "query": [
                {
                  "key": "earliest",
                  "value": "{{earliest}}",
                  "description": "Start time for reports (-7d, -24h, or ISO date)"
                },
                {
                  "key": "latest",
                  "value": "{{latest}}",
                  "description": "End time for reports (now, -1h, or ISO date)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                }
              ]
            },
            "description": "**Parameters:**- `report_id` (Query parameter, type: `integer`, required: `yes`)    - `earliest` (Query parameter, type: `string`, required: `no`)    - `latest` (Query parameter, type: `string`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `page` (Query parameter, type: `integer`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`"
          },
          "response": [
            {
              "name": "Get report",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/reports/{{report_id}}?earliest={{earliest}}&latest={{latest}}&filter={{filter}}&page={{page}}&format={{format}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "reports",
                    "{{report_id}}"
                  ],
                  "query": [
                    {
                      "key": "earliest",
                      "value": "{{earliest}}"
                    },
                    {
                      "key": "latest",
                      "value": "{{latest}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"reports\": [            {                \"timestamp\": \"2024-01-15T10:30:45Z\",                \"username\": \"user@example.com\",                \"nas_ip_address\": \"192.168.1.1\",                \"reply\": \"Access-Accept\",                \"auth_type\": \"PAP\"            }        ]    },    \"total_items\": 150,    \"page\": 1,    \"page_size\": 25,    \"page_count\": 6}"
            }
          ]
        },
        {
          "name": "Get task result",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get task result');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reports/tasks?task_name={{task_name}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports",
                "tasks"
              ],
              "query": [
                {
                  "key": "task_name",
                  "value": "{{task_name}}",
                  "description": "Async task name to check status"
                }
              ]
            },
            "description": "**Parameters:**- `task_name` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get task result",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/reports/tasks?task_name={{task_name}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "reports",
                    "tasks"
                  ],
                  "query": [
                    {
                      "key": "task_name",
                      "value": "{{task_name}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"reports\": [            {                \"timestamp\": \"2024-01-15T10:30:45Z\",                \"username\": \"user@example.com\",                \"nas_ip_address\": \"192.168.1.1\",                \"reply\": \"Access-Accept\",                \"auth_type\": \"PAP\"            }        ]    },    \"total_items\": 150,    \"page\": 1,    \"page_size\": 25,    \"page_count\": 6}"
            }
          ]
        },
        {
          "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"id\": 110,    \"name\": \"{{$randomLoremWords}}\",    \"recipient\": \"dev+postman@ironwifi.com\",    \"earliest\": \"-1d\",    \"method\": \"email\",    \"latest\": \"now\",    \"frequency\": \"daily\",    \"execution_time\": \"12:00\",    \"execution_minute\": \"00\",    \"execution_day\": \"monday\",    \"execution_date\": \"1\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/reports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `earliest` (Body parameter, type: `string`, required: `yes`)    - `latest` (Body parameter, type: `string`, required: `yes`)    - `filter` (Body parameter, type: `string`, required: `yes`)    - `frequency` (Body parameter, type: `string`, required: `yes`)    - `method` (Body parameter, type: `string`, required: `yes`)    - `recipient` (Body parameter, type: `string`, required: `yes`)    - `execution_date` (Body parameter, type: `string`, required: `yes`)    - `execution_day` (Body parameter, type: `string`, required: `yes`)    - `execution_minute` (Body parameter, type: `string`, required: `yes`)    - `execution_time` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add scheduled report",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/reports",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "reports"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"id\": \"dddddddd-dddd-dddd-dddd-dddddddddddd\",\n  \"name\": \"Weekly Auth Report\",\n  \"schedule\": \"0 0 * * 0\",\n  \"report_type\": 110,\n  \"_links\": {\n    \"self\": {\n      \"href\": \"https://console.ironwifi.io/api/reports/scheduled/{id}\"\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Delete scheduled report",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const scheduled_report_id = pm.environment.get('scheduled_report_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!scheduled_report_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reports/{{scheduled_report_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports",
                "{{scheduled_report_id}}"
              ]
            },
            "description": "**Parameters:**- `scheduled_report_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete scheduled report",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/reports/{{scheduled_report_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "reports",
                    "{{scheduled_report_id}}"
                  ]
                }
              },
              "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": null
            }
          ]
        }
      ],
      "description": "Generate and retrieve reports from IronWiFi.Reports provide analytics and logging data for authentication, accounting, and system events.**Report IDs:**- 110: Authentication logs- 111: Accounting logs- 112: System events- 113: Captive portal logins**Parameters:**- `earliest`: Start time (e.g., -7d, -24h, 2024-01-01)- `latest`: End time (e.g., now, -1h)- `filter`: Filter expression- `format`: Output format (json, csv)"
    },
    {
      "name": "Nodes (APs)",
      "item": [
        {
          "name": "Get all access points",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/nodes?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "nodes"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all access points",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/nodes?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "nodes"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"nodes\": [            {                \"id\": \"88c5fad0-d6f7-43d1-b3e6-85ecb7549dc2\",                \"mac_address\": \"AA:BB:CC:DD:EE:FF\",                \"ip_address\": \"192.168.1.100\",                \"name\": \"Office AP 1\",                \"status\": \"online\",                \"last_seen\": \"2025-12-10T04:48:22.518886Z\"            }        ]    },    \"total_items\": 5,    \"page\": 1,    \"page_size\": 25}"
            }
          ],
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ]
        },
        {
          "name": "Get access point",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/nodes/{{node_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "nodes",
                "{{node_id}}"
              ]
            },
            "description": "**Parameters:**- `node_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get access point",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/nodes/{{node_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "nodes",
                    "{{node_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"6969014b-c60f-4aa8-85fa-bce7b4e11a95\",    \"mac_address\": \"AA:BB:CC:DD:EE:FF\",    \"ip_address\": \"192.168.1.100\",    \"name\": \"Office AP 1\",    \"status\": \"online\",    \"last_seen\": \"2025-12-10T04:48:22.519372Z\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/nodes/{id}\"        }    }}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const node_id = pm.environment.get('node_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!node_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ]
        },
        {
          "name": "Delete access point",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const node_id = pm.environment.get('node_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!node_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/nodes/{{node_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "nodes",
                "{{node_id}}"
              ]
            },
            "description": "**Parameters:**- `node_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete access point",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/nodes/{{node_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "nodes",
                    "{{node_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage access points and network nodes.Nodes represent individual access points that have been discovered or registered in IronWiFi.**Features:**- View connected access points- Monitor AP status and connectivity- Delete outdated or unused nodes"
    },
    {
      "name": "Venues",
      "item": [
        {
          "name": "Get all venues",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/venues?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "venues"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all venues",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/venues?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "venues"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"venues\": [            {                \"id\": \"69ba2a91-4cc5-4684-91da-acc94c4cc9d7\",                \"name\": \"Main Office\",                \"address\": \"123 Business St\",                \"city\": \"San Francisco\",                \"country\": \"US\"            }        ]    },    \"total_items\": 3,    \"page\": 1,    \"page_size\": 25}"
            }
          ],
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ]
        },
        {
          "name": "Get venue",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const venue_id = pm.environment.get('venue_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!venue_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/venue/{{venue_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "venue",
                "{{venue_id}}"
              ]
            },
            "description": "**Parameters:**- `venue_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get venue",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/venue/{{venue_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "venue",
                    "{{venue_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"2a480ce9-f0e0-4d4f-baaf-db64dd0d45b8\",    \"name\": \"Main Office\",    \"address\": \"123 Business St\",    \"city\": \"San Francisco\",    \"country\": \"US\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/venues/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Update venue",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const venue_id = pm.environment.get('venue_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!venue_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"nasname\":\"changed_network_name\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/venues/{{venue_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "venues",
                "{{venue_id}}"
              ]
            },
            "description": "**Parameters:**- `venue_id` (Query parameter, type: `string`, required: `yes`)    - `venue_name` (Body parameter, type: `string`, required: `no`)    - `venue_phone` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update venue",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/venues/{{venue_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "venues",
                    "{{venue_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"nasname\":\"changed_network_name\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"cc324c13-6cbe-4e8e-a914-5512fe70c859\",    \"name\": \"Updated Venue\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/venues/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete venue",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const venue_id = pm.environment.get('venue_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!venue_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/venue/{{venue_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "venue",
                "{{venue_id}}"
              ]
            },
            "description": "**Parameters:**- `venue_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete venue",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/venue/{{venue_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "venue",
                    "{{venue_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage physical venue locations.Venues represent physical locations where WiFi is provided (offices, stores, hotels, etc.).**Use cases:**- Organize networks by location- Configure location-specific settings- Group captive portals by venue"
    },
    {
      "name": "Captive portals",
      "item": [
        {
          "name": "Add captive portal",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add captive portal');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "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, 500]);",
                  "});",
                  "",
                  "// Extract and save captive_portal_id for dependent tests",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('captive_portal_id', jsonData.id);",
                  "            console.log('Saved captive_portal_id: ' + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        console.log('Could not parse response as JSON');",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"language\":\"en\",\t\"name\":\"{{generated_captive_name}}\",\t\"network_id\":\"{{network_id}}\",\t\"vendor\":\"Virtual\",\t\"success_redir_url\":\"Requested URL\",\t\"web_gui\":\"on\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/captive-portals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "captive-portals"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `network_id` (Body parameter, type: `string`, required: `yes`)    - `vendor` (Body parameter, type: `string`, required: `yes`)    - `success_redir_url` (Body parameter, type: `string`, required: `no`)    - `language` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add captive portal",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"language\":\"en\",\t\"name\":\"{{generated_captive_name}}\",\t\"network_id\":\"{{network_id}}\",\t\"vendor\":\"Virtual\",\t\"success_redir_url\":\"Requested URL\",\t\"web_gui\":\"on\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"ec558115-3fa8-409e-a884-f4ec92e2d9f1\",    \"name\": \"New Portal\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Test captive portal - anonymous",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Test captive portal - anonymous');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{splash_url}}?mac=01:22:33:44:55:66&url=https://www.ironwifi.com",
              "host": [
                "{{splash_url}}"
              ],
              "query": [
                {
                  "key": "mac",
                  "value": "01:22:33:44:55:66",
                  "description": "MAC address filter"
                },
                {
                  "key": "url",
                  "value": "https://www.ironwifi.com"
                }
              ]
            },
            "description": "Test anonymous login to a captive portal without credentials. Returns authentication result."
          },
          "response": [
            {
              "name": "Test captive portal - anonymous",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{splash_url}}?mac=01:22:33:44:55:66&url=https://www.ironwifi.com",
                  "host": [
                    "{{splash_url}}"
                  ],
                  "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": [],
              "body": "{    \"id\": \"722b5a25-1e58-4763-a675-5d52a641e352\",    \"name\": \"Guest WiFi Portal\",    \"theme_id\": \"cb9501ab-7d72-4b25-9fa5-e31aa55bea4d\",    \"auth_methods\": [        \"social\",        \"email\",        \"sms\"    ],    \"redirect_url\": \"https://example.com\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Clone captive portal",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Clone captive portal');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"captive_portal_id\", jsonData.id);",
                  "            console.log(\"Saved captive_portal_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"language\":\"en\",\t\"name\":\"{{generated_captive_name}}\",\t\"network_id\":\"{{network_id}}\",\t\"vendor\":\"Virtual\",\t\"success_redir_url\":\"Requested URL\",\t\"web_gui\":\"on\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/captive-portals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "captive-portals"
              ]
            },
            "description": "**Parameters:**- `clone_cp` (Body parameter, type: `boolean`, required: `yes`)    - `cp_id` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Clone captive portal",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"language\":\"en\",\t\"name\":\"{{generated_captive_name}}\",\t\"network_id\":\"{{network_id}}\",\t\"vendor\":\"Virtual\",\t\"success_redir_url\":\"Requested URL\",\t\"web_gui\":\"on\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"ec558115-3fa8-409e-a884-f4ec92e2d9f1\",    \"name\": \"New Portal\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all captive portals",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all captive portals');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/captive-portals?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "captive-portals"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all captive portals",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"captive-portals\": [            {                \"id\": \"89339f3d-39e0-449f-a2ef-d6d741ff671c\",                \"name\": \"Guest WiFi Portal\",                \"theme_id\": \"76f63705-cc9f-4784-ab28-adc0d08c85d3\",                \"auth_methods\": [                    \"social\",                    \"email\",                    \"sms\"                ]            }        ]    },    \"total_items\": 2,    \"page\": 1,    \"page_size\": 25}"
            }
          ]
        },
        {
          "name": "Get captive portal",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const captive_portal_id = pm.environment.get('captive_portal_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!captive_portal_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get captive portal');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "captive-portals",
                "{{captive_portal_id}}"
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get captive portal",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals",
                    "{{captive_portal_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"722b5a25-1e58-4763-a675-5d52a641e352\",    \"name\": \"Guest WiFi Portal\",    \"theme_id\": \"cb9501ab-7d72-4b25-9fa5-e31aa55bea4d\",    \"auth_methods\": [        \"social\",        \"email\",        \"sms\"    ],    \"redirect_url\": \"https://example.com\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/captive-portals/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Update captive portal",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const captive_portal_id = pm.environment.get('captive_portal_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!captive_portal_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update captive portal');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"description\":\"changed_description\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "captive-portals",
                "{{captive_portal_id}}"
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `yes`)    - `network_id` (Body parameter, type: `string`, required: `yes`) - `enum`    - `vendor` (Body parameter, type: `string`, required: `yes`)    - `description` (Body parameter, type: `string`, required: `no`)    - `splash_page` (Body parameter, type: `string`, required: `no`)    - `success_page` (Body parameter, type: `string`, required: `no`)    - `language` (Body parameter, type: `string`, required: `no`)    - `success_redir_url` (Body parameter, type: `string`, required: `no`)    - `custom_domain` (Body parameter, type: `string`, required: `no`)    - `protected_ssid` (Body parameter, type: `string`, required: `no`)    - `rcoi` (Body parameter, type: `string`, required: `no`)    - `global_profile` (Body parameter, type: `integer`, required: `no`)    - `controller_url` (Body parameter, type: `string`, required: `no`)    - `controller_url_backup` (Body parameter, type: `string`, required: `no`)    - `controller_user` (Body parameter, type: `string`, required: `no`)    - `controller_password` (Body parameter, type: `string`, required: `no`)    - `use_proxy` (Body parameter, type: `integer`, required: `no`)    - `mac_authentication` (Body parameter, type: `integer`, required: `no`)    - `mac_expiration_time` (Body parameter, type: `string`, required: `no`)    - `ip_whitelist` (Body parameter, type: `string`, required: `no`)    - `webhook_url` (Body parameter, type: `string`, required: `no`)    - `webhook_trigger` (Body parameter, type: `string`, required: `no`)    - `webhook_format` (Body parameter, type: `string`, required: `no`)    - `portal_theme` (Body parameter, type: `string`, required: `no`)    - `business_name` (Body parameter, type: `string`, required: `no`)    - `support_address` (Body parameter, type: `string`, required: `no`)    - `support_phone` (Body parameter, type: `string`, required: `no`)    - `support_email` (Body parameter, type: `string`, required: `no`)    - `sendgrid_token` (Body parameter, type: `string`, required: `no`)    - `sg_sender_email` (Body parameter, type: `string`, required: `no`)    - `sg_sender_name` (Body parameter, type: `string`, required: `no`)    - `sg_guest_email_subject` (Body parameter, type: `string`, required: `no`)    - `sg_guest_email_id` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update captive portal",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals",
                    "{{captive_portal_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete captive portal",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const captive_portal_id = pm.environment.get('captive_portal_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!captive_portal_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete captive portal');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "captive-portals",
                "{{captive_portal_id}}"
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete captive portal",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/captive-portals/{{captive_portal_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "captive-portals",
                    "{{captive_portal_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Configure and manage captive portal pages.Captive portals are the splash pages shown to users when they connect to your WiFi network.**Features:**- Create custom branded login pages- Configure authentication methods (social login, SMS, vouchers)- Clone existing portals as templates- Test portal functionality"
    },
    {
      "name": "Themes",
      "item": [
        {
          "name": "Add theme",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add theme');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"name\":\"{{$randomLoremWord}}\",    \"description\":\"{{$randomLoremWord}}\",\t\"captive_portal_id\":\"{{captive_portal_id}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/themes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "themes"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `data` (Body parameter, type: `string`, required: `yes`)    - `filename` (Body parameter, type: `string`, required: `yes`)    - `description` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add theme",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/themes",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "themes"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"name\":\"{{$randomLoremWord}}\",    \"description\":\"{{$randomLoremWord}}\",\t\"captive_portal_id\":\"{{captive_portal_id}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"13b9ab26-bca7-4b11-a6f6-7f34bf9a199c\",    \"name\": \"New Theme\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/themes/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all themes",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const captive_portal_id = pm.environment.get('captive_portal_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!captive_portal_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/themes?captive_portal_id={{captive_portal_id}}&page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "themes"
              ],
              "query": [
                {
                  "key": "captive_portal_id",
                  "value": "{{captive_portal_id}}"
                },
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `no`)    - `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all themes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/themes?captive_portal_id={{captive_portal_id}}&page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "themes"
                  ],
                  "query": [
                    {
                      "key": "captive_portal_id",
                      "value": "{{captive_portal_id}}"
                    },
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"themes\": [            {                \"id\": \"46b5aaef-27d6-45ef-a97c-82ee61d23422\",                \"name\": \"Corporate Theme\",                \"primary_color\": \"#0066CC\",                \"logo_url\": \"https://example.com/logo.png\"            }        ]    },    \"total_items\": 1,    \"page\": 1,    \"page_size\": 25}"
            }
          ]
        },
        {
          "name": "Update theme",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const theme_id = pm.environment.get('theme_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!theme_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"name\":\"{{$randomLoremWord}}\",\t\"description\":\"{{$randomLoremWord}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/themes/{{theme_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "themes",
                "{{theme_id}}"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `data` (Body parameter, type: `string`, required: `yes`)    - `filename` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Update theme",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/themes/{{theme_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "themes",
                    "{{theme_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete theme",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const theme_id = pm.environment.get('theme_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!theme_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/themes/{{theme_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "themes",
                "{{theme_id}}"
              ]
            },
            "description": "**Parameters:**- `theme_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete theme",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/themes/{{theme_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "themes",
                    "{{theme_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage captive portal themes and styling.Themes control the visual appearance of captive portal pages.**Customization options:**- Colors, fonts, logos- Custom CSS- Background images"
    },
    {
      "name": "Shared Files",
      "item": [
        {
          "name": "Add shared file",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add shared file');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"filename\": \"test.html\",    \"data\":\"data:text/html;base64\",    \"captive_portal_id\":\"{{captive_portal_id}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/shared-files",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "shared-files"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `data` (Body parameter, type: `string`, required: `yes`)    - `filename` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add shared file",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"filename\": \"test.html\",    \"data\":\"data:text/html;base64\",    \"captive_portal_id\":\"{{captive_portal_id}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/shared-files",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "shared-files"
                  ]
                },
                "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `data` (Body parameter, type: `string`, required: `yes`)    - `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"
                }
              ],
              "body": "{  \"id\": \"62a1ebc4-b6b3-42eb-904d-bada9e8f9916\",  \"filename\": \"uploaded.png\",  \"url\": \"https://storage.ironwifi.io/files/uploaded.png\"}"
            }
          ]
        },
        {
          "name": "Get all shared files",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const captive_portal_id = pm.environment.get('captive_portal_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!captive_portal_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/shared-files?captive_portal_id={{captive_portal_id}}&page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "shared-files"
              ],
              "query": [
                {
                  "key": "captive_portal_id",
                  "value": "{{captive_portal_id}}"
                },
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "type",
                  "value": "{{type}}",
                  "description": "Resource type filter"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `no`)    - `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all shared files",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/shared-files?captive_portal_id={{captive_portal_id}}&page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "shared-files"
                  ],
                  "query": [
                    {
                      "key": "captive_portal_id",
                      "value": "{{captive_portal_id}}"
                    },
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "type",
                      "value": "{{type}}",
                      "description": "Resource type filter"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                },
                "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `no`)    - `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `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"
                }
              ],
              "body": "{  \"_embedded\": {    \"shared-files\": [      {        \"id\": \"4c442cc8-7f7b-42db-a264-1a79fcf8afb4\",        \"filename\": \"logo.png\",        \"content_type\": \"image/png\",        \"size\": 15234      }    ]  },  \"total_items\": 3,  \"page\": 1}"
            }
          ]
        },
        {
          "name": "Update shared file",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const shared_file_id = pm.environment.get('shared_file_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!shared_file_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"description\":\"changed_description\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/shared-files/{{shared_file_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "shared-files",
                "{{shared_file_id}}"
              ]
            },
            "description": "**Parameters:**- `shared_file_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Update shared file",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/shared-files/{{shared_file_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "shared-files",
                    "{{shared_file_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete shared file",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const shared_file_id = pm.environment.get('shared_file_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!shared_file_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/shared-files/{{shared_file_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "shared-files",
                "{{shared_file_id}}"
              ]
            },
            "description": "**Parameters:**- `shared_file_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete shared file",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/shared-files/{{shared_file_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "shared-files",
                    "{{shared_file_id}}"
                  ]
                },
                "description": "**Parameters:**- `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"
                }
              ],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage uploaded files for captive portals.Store images, documents, and other assets that can be used in captive portal pages.**Supported files:**- Images (PNG, JPG, SVG)- Documents (PDF, TOS)- Custom assets"
    },
    {
      "name": "Variables",
      "item": [
        {
          "name": "Add variable",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add variable');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"value\": \"test123\",    \"name\":\"__TEST__\",    \"captive_portal_id\":\"{{captive_portal_id}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/variables",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "variables"
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `yes`)    - `value` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add variable",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"value\": \"test123\",    \"name\":\"__TEST__\",    \"captive_portal_id\":\"{{captive_portal_id}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/variables",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "variables"
                  ]
                },
                "description": "**Parameters:**- `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `yes`)    - `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"
                }
              ],
              "body": "{  \"id\": \"d480b670-b9d4-4775-9670-9ccf76d3137e\",  \"name\": \"new_variable\",  \"value\": \"test\"}"
            }
          ]
        },
        {
          "name": "Get all variable",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const captive_portal_id = pm.environment.get('captive_portal_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!captive_portal_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/variables?captive_portal_id={{captive_portal_id}}&page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "variables"
              ],
              "query": [
                {
                  "key": "captive_portal_id",
                  "value": "{{captive_portal_id}}"
                },
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "type",
                  "value": "{{type}}",
                  "description": "Resource type filter"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `no`)    - `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all variable",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/variables?captive_portal_id={{captive_portal_id}}&page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "variables"
                  ],
                  "query": [
                    {
                      "key": "captive_portal_id",
                      "value": "{{captive_portal_id}}"
                    },
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "type",
                      "value": "{{type}}",
                      "description": "Resource type filter"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                },
                "description": "**Parameters:**- `captive_portal_id` (Query parameter, type: `string`, required: `no`)    - `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `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"
                }
              ],
              "body": "{  \"_embedded\": {    \"variables\": [      {        \"id\": \"fc8dfd0f-7ede-45c0-98fa-c77b46addc5f\",        \"name\": \"company_name\",        \"value\": \"ACME Corp\"      }    ]  },  \"total_items\": 5,  \"page\": 1}"
            }
          ]
        },
        {
          "name": "Update variable",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const variable_id = pm.environment.get('variable_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!variable_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"name\":\"__CHANGED_NAME__\",\t\"value\":\"changed_value\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/variables/{{variable_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "variables",
                "{{variable_id}}"
              ]
            },
            "description": "**Parameters:**- `variable_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `yes`)    - `value` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Update variable",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/variables/{{variable_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "variables",
                    "{{variable_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete variable",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const variable_id = pm.environment.get('variable_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!variable_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/variables/{{variable_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "variables",
                "{{variable_id}}"
              ]
            },
            "description": "**Parameters:**- `variable_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete variable",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/variables/{{variable_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "variables",
                    "{{variable_id}}"
                  ]
                },
                "description": "**Parameters:**- `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"
                }
              ],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage configuration variables.Variables allow dynamic content in captive portals and configurations.**Use cases:**- Store reusable text snippets- Configure dynamic values- Manage translations"
    },
    {
      "name": "Guest Profiles",
      "item": [
        {
          "name": "Add guest profile",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add guest profile');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "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, 500, 504]);",
                  "});",
                  "",
                  "// Extract and save guest_profile_id for dependent tests",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('guest_profile_id', jsonData.id);",
                  "            console.log('Saved guest_profile_id: ' + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        console.log('Could not parse response as JSON');",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"language\":\"en\",\t\"name\":\"{{generated_captive_name}}\",\t\"network_id\":\"{{network_id}}\",\t\"vendor\":\"Virtual\",\t\"success_redir_url\":\"Requested URL\",\t\"web_gui\":\"on\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/guest-profiles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guest-profiles"
              ]
            },
            "description": "**Parameters:**- `profile_name` (Body parameter, type: `string`, required: `yes`)    - `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `random_username_method` (Body parameter, type: `string`, required: `yes`)    - `random_username_length` (Body parameter, type: `integer`, required: `yes`)    - `random_password_method` (Body parameter, type: `string`, required: `yes`)    - `random_password_length` (Body parameter, type: `integer`, required: `yes`)    - `guest_welcome_email` (Body parameter, type: `string`, required: `no`)    - `guest_mailchimp` (Body parameter, type: `string`, required: `no`)    - `guest_hubspot` (Body parameter, type: `string`, required: `no`)    - `guest_opt_in` (Body parameter, type: `string`, required: `no`)    - `guest_to_expire` (Body parameter, type: `string`, required: `no`)    - `guest_expire_after` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add guest profile",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"language\":\"en\",\t\"name\":\"{{generated_captive_name}}\",\t\"network_id\":\"{{network_id}}\",\t\"vendor\":\"Virtual\",\t\"success_redir_url\":\"Requested URL\",\t\"web_gui\":\"on\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/guest-profiles",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guest-profiles"
                  ]
                },
                "description": "**Parameters:**- `profile_name` (Body parameter, type: `string`, required: `yes`)    - `captive_portal_id` (Body parameter, type: `string`, required: `yes`)    - `random_username_method` (Body parameter, type: `string`, required: `yes`)    - `random_username_length` (Body parameter, type: `integer`, required: `yes`)    - `random_password_method` (Body parameter, type: `string`, required: `yes`)    - `random_password_length` (Body parameter, type: `integer`, required: `yes`)    - `guest_welcome_email` (Body parameter, type: `string`, required: `no`)    - `guest_mailchimp` (Body parameter, type: `string`, required: `no`)    - `guest_hubspot` (Body parameter, type: `string`, required: `no`)    - `guest_opt_in` (Body parameter, type: `string`, required: `no`)    - `guest_to_expire` (Body parameter, type: `string`, required: `no`)    - `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"
                }
              ],
              "body": "{  \"id\": \"b499fa0b-e16c-46d4-afab-3d704510f214\",  \"name\": \"New Profile\"}"
            }
          ]
        },
        {
          "name": "Get all guest profiles",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all guest profiles');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/guest-profiles?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guest-profiles"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "type",
                  "value": "{{type}}",
                  "description": "Resource type filter"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all guest profiles",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guest-profiles?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guest-profiles"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "type",
                      "value": "{{type}}",
                      "description": "Resource type filter"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                },
                "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `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"
                }
              ],
              "body": "{  \"_embedded\": {    \"guest-profiles\": [      {        \"id\": \"9681679f-72e2-434a-a66e-f9b3965523b0\",        \"name\": \"Default Guest\",        \"session_timeout\": 3600      }    ]  },  \"total_items\": 2,  \"page\": 1}"
            }
          ]
        },
        {
          "name": "Get guest profile",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const guest_profile_id = pm.environment.get('guest_profile_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!guest_profile_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get guest profile');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/guest-profiles/{{guest_profile_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guest-profiles",
                "{{guest_profile_id}}"
              ]
            },
            "description": "**Parameters:**- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get guest profile",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guest-profiles/{{guest_profile_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guest-profiles",
                    "{{guest_profile_id}}"
                  ]
                },
                "description": "**Parameters:**- `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"
                }
              ],
              "body": "{  \"id\": \"b877e002-b57d-486b-99d0-b57dfa33f1ff\",  \"name\": \"Default Guest\",  \"session_timeout\": 3600,  \"bandwidth_down\": 10000000}"
            }
          ]
        },
        {
          "name": "Update guest profile",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const guest_profile_id = pm.environment.get('guest_profile_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!guest_profile_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update guest profile');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"description\":\"changed_description\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/guest-profiles/{{guest_profile_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guest-profiles",
                "{{guest_profile_id}}"
              ]
            },
            "description": "**Parameters:**- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)    - `profile_name` (Body parameter, type: `string`, required: `yes`)    - `random_username_method` (Body parameter, type: `string`, required: `yes`)    - `random_username_length` (Body parameter, type: `integer`, required: `yes`)    - `random_password_method` (Body parameter, type: `string`, required: `yes`)    - `random_password_length` (Body parameter, type: `integer`, required: `yes`)    - `guest_welcome_email` (Body parameter, type: `string`, required: `no`)    - `guest_mailchimp` (Body parameter, type: `string`, required: `no`)    - `guest_hubspot` (Body parameter, type: `string`, required: `no`)    - `guest_opt_in` (Body parameter, type: `string`, required: `no`)    - `guest_to_expire` (Body parameter, type: `string`, required: `no`)    - `guest_expire_after` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update guest profile",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"description\":\"changed_description\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/guest-profiles/{{guest_profile_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guest-profiles",
                    "{{guest_profile_id}}"
                  ]
                },
                "description": "**Parameters:**- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)    - `profile_name` (Body parameter, type: `string`, required: `yes`)    - `random_username_method` (Body parameter, type: `string`, required: `yes`)    - `random_username_length` (Body parameter, type: `integer`, required: `yes`)    - `random_password_method` (Body parameter, type: `string`, required: `yes`)    - `random_password_length` (Body parameter, type: `integer`, required: `yes`)    - `guest_welcome_email` (Body parameter, type: `string`, required: `no`)    - `guest_mailchimp` (Body parameter, type: `string`, required: `no`)    - `guest_hubspot` (Body parameter, type: `string`, required: `no`)    - `guest_opt_in` (Body parameter, type: `string`, required: `no`)    - `guest_to_expire` (Body parameter, type: `string`, required: `no`)    - `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"
                }
              ],
              "body": "{  \"id\": \"0980d507-44af-4cf3-b108-3b8c42ee5792\",  \"name\": \"Updated Profile\"}"
            }
          ]
        },
        {
          "name": "Delete guest profile",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const guest_profile_id = pm.environment.get('guest_profile_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!guest_profile_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete guest profile');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/guest-profiles/{{guest_profile_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guest-profiles",
                "{{guest_profile_id}}"
              ]
            },
            "description": "**Parameters:**- `guest_profile_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete guest profile",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guest-profiles/{{guest_profile_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guest-profiles",
                    "{{guest_profile_id}}"
                  ]
                },
                "description": "**Parameters:**- `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"
                }
              ],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage guest WiFi profiles and policies.Guest profiles define the rules and limits for guest WiFi users.**Settings:**- Bandwidth limits- Session duration- Access schedules- Device limits"
    },
    {
      "name": "Employees",
      "item": [
        {
          "name": "Add employee",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add employee');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/employees",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "employees"
              ]
            },
            "description": "**Parameters:**- `username` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add employee",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/employees",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/employees?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "employees"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of employees**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all employees",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/employees",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get employee",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const employee_id = pm.environment.get('employee_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!employee_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/employees/{{employee_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "employees",
                "{{employee_id}}"
              ]
            },
            "description": "**Parameters:**- `employee_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get employee",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/employees/{{employee_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "employees",
                    "{{employee_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update employee",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const employee_id = pm.environment.get('employee_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!employee_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"firstname\":\"{{$randomFirstName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/employees/{{employee_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "employees",
                "{{employee_id}}"
              ]
            },
            "description": "**Parameters:**- `employee_id` (Query parameter, type: `string`, required: `yes`)    - `username` (Body parameter, type: `string`, required: `no`)    - `orgunit` (Body parameter, type: `string`, required: `no`)    - `firstname` (Body parameter, type: `string`, required: `no`)    - `lastname` (Body parameter, type: `string`, required: `no`)    - `email` (Body parameter, type: `string`, required: `no`)    - `authsource` (Body parameter, type: `string`, required: `no`)    - `orgunit` (Body parameter, type: `string`, required: `no`)    - `add_mac` (Body parameter, type: `string (MAC address)`, required: `no`)"
          },
          "response": [
            {
              "name": "Update employee",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"firstname\":\"{{$randomFirstName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/employees/{{employee_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "employees",
                    "{{employee_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete employee",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const employee_id = pm.environment.get('employee_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!employee_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/employees/{{employee_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "employees",
                "{{employee_id}}"
              ]
            },
            "description": "**Parameters:**- `employee_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete employee",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/employees/{{employee_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "employees",
                    "{{employee_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage employee accounts for enterprise WiFi.Employees are internal users who authenticate via 802.1X or captive portal.**Features:**- Create employee accounts- Set credentials and certificates- Manage group membership"
    },
    {
      "name": "Devices",
      "item": [
        {
          "name": "Add device",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add device');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/devices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices"
              ]
            },
            "description": "**Parameters:**- `username` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add device",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/devices",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "devices"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/devices?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of employees**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all devices",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/devices?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "devices"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get device",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const device_id = pm.environment.get('device_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!device_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/devices/{{device_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices",
                "{{device_id}}"
              ]
            },
            "description": "**Parameters:**- `device_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get device",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/devices/{{device_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "devices",
                    "{{device_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update device",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const device_id = pm.environment.get('device_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!device_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/devices/{{device_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices",
                "{{device_id}}"
              ]
            },
            "description": "**Parameters:**- `device_id` (Query parameter, type: `string`, required: `yes`)    - `username` (Body parameter, type: `string`, required: `no`)    - `orgunit` (Body parameter, type: `string`, required: `no`)    - `firstname` (Body parameter, type: `string`, required: `no`)    - `lastname` (Body parameter, type: `string`, required: `no`)    - `email` (Body parameter, type: `string`, required: `no`)    - `authsource` (Body parameter, type: `string`, required: `no`)    - `orgunit` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update device",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/devices/{{device_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "devices",
                    "{{device_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete device",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const device_id = pm.environment.get('device_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!device_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/devices/{{device_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices",
                "{{device_id}}"
              ]
            },
            "description": "**Parameters:**- `device_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete device",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/devices/{{device_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "devices",
                    "{{device_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage registered devices.Track and control devices that have connected to your network.**Device info:**- MAC address- Device type- Connection history- Owner assignment"
    },
    {
      "name": "Fleets",
      "item": [
        {
          "name": "Add fleet",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add fleet');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomWord}}-fleet\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/fleets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fleets"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `notes` (Body parameter, type: `string`, required: `no`)    - `phone` (Body parameter, type: `string`, required: `no`)    - `airline` (Body parameter, type: `string`, required: `no`)    - `configuration` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add fleet",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/fleets",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "fleets"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/fleets?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fleets"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of fleets**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all fleets",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/fleets?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "fleets"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get fleet",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const fleet_id = pm.environment.get('fleet_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!fleet_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/fleets/{{fleet_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fleets",
                "{{fleet_id}}"
              ]
            },
            "description": "**Parameters:**- `fleet_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get fleet",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/fleets/{{fleet_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "fleets",
                    "{{fleet_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update fleet",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const fleet_id = pm.environment.get('fleet_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!fleet_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/fleets/{{fleet_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fleets",
                "{{fleet_id}}"
              ]
            },
            "description": "**Parameters:**- `fleet_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update fleet",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/fleets/{{fleet_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "fleets",
                    "{{fleet_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete fleet",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const fleet_id = pm.environment.get('fleet_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!fleet_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/fleets/{{fleet_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fleets",
                "{{fleet_id}}"
              ]
            },
            "description": "**Parameters:**- `fleet_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete fleet",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/fleets/{{fleet_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "fleets",
                    "{{fleet_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage device fleets for IoT and managed devices.Fleets group devices for bulk management and policy application.**Use cases:**- IoT device management- POS terminals- Managed devices"
    },
    {
      "name": "Vehicles",
      "item": [
        {
          "name": "Add vehicle",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add vehicle');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomWord}}-vehicle\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vehicles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vehicles"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `notes` (Body parameter, type: `string`, required: `no`)    - `fleet` (Body parameter, type: `string`, required: `no`)    - `tags` (Body parameter, type: `string`, required: `no`)    - `phone` (Body parameter, type: `string`, required: `no`)    - `airline` (Body parameter, type: `string`, required: `no`)    - `tail_sign` (Body parameter, type: `string`, required: `no`)    - `type` (Body parameter, type: `string`, required: `no`)    - `configuration` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add vehicle",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vehicles",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vehicles"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vehicles?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vehicles"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of fleets**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all vehicles",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/vehicles?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vehicles"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get vehicle",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const vehicle_id = pm.environment.get('vehicle_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!vehicle_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vehicles/{{vehicle_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vehicles",
                "{{vehicle_id}}"
              ]
            },
            "description": "**Parameters:**- `vehicle_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get vehicle",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/vehicles/{{vehicle_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vehicles",
                    "{{vehicle_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update vehicle",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const vehicle_id = pm.environment.get('vehicle_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!vehicle_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vehicles/{{vehicle_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vehicles",
                "{{vehicle_id}}"
              ]
            },
            "description": "**Parameters:**- `vehicle_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `notes` (Body parameter, type: `string`, required: `no`)    - `fleet` (Body parameter, type: `string`, required: `no`)    - `tags` (Body parameter, type: `string`, required: `no`)    - `phone` (Body parameter, type: `string`, required: `no`)    - `airline` (Body parameter, type: `string`, required: `no`)    - `tail_sign` (Body parameter, type: `string`, required: `no`)    - `type` (Body parameter, type: `string`, required: `no`)    - `configuration` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update vehicle",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vehicles/{{vehicle_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vehicles",
                    "{{vehicle_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete vehicle",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const vehicle_id = pm.environment.get('vehicle_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!vehicle_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vehicles/{{vehicle_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vehicles",
                "{{vehicle_id}}"
              ]
            },
            "description": "**Parameters:**- `vehicle_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete vehicle",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/vehicles/{{vehicle_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vehicles",
                    "{{vehicle_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage vehicle-based WiFi access.For fleet management and vehicle tracking with WiFi connectivity.**Features:**- Vehicle registration- Driver assignment- Location tracking integration"
    },
    {
      "name": "Tariffs",
      "item": [
        {
          "name": "Add tariff",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add tariff');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tariffs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariffs"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `description` (Body parameter, type: `string`, required: `no`)    - `currency` (Body parameter, type: `string`, required: `no`)    - `price` (Body parameter, type: `string`, required: `no`)    - `tariff_group` (Body parameter, type: `string`, required: `no`)    - `access_type` (Body parameter, type: `string`, required: `no`)    - `route` (Body parameter, type: `string`, required: `no`)    - `visibility` (Body parameter, type: `string`, required: `no`)    - `time_limits` (Body parameter, type: `string`, required: `no`)    - `volume_limits` (Body parameter, type: `string`, required: `no`)    - `free_tariff` (Body parameter, type: `string`, required: `no`)    - `paid_tariff` (Body parameter, type: `string`, required: `no`)    - `order` (Body parameter, type: `string`, required: `no`)    - `success_page` (Body parameter, type: `string`, required: `no`)    - `speed_step_downs` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add tariff",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/tariffs",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariffs"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tariffs?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariffs"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of fleets**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all tariffs",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tariffs?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariffs"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get tariff",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const tariff_id = pm.environment.get('tariff_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!tariff_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tariffs/{{tariff_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariffs",
                "{{tariff_id}}"
              ]
            },
            "description": "**Parameters:**- `tariff_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get tariff",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tariffs/{{tariff_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariffs",
                    "{{tariff_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update tariff",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const tariff_id = pm.environment.get('tariff_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!tariff_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tariffs/{{tariff_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariffs",
                "{{tariff_id}}"
              ]
            },
            "description": "**Parameters:**- `tariff_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `description` (Body parameter, type: `string`, required: `no`)    - `currency` (Body parameter, type: `string`, required: `no`)    - `price` (Body parameter, type: `string`, required: `no`)    - `tariff_group` (Body parameter, type: `string`, required: `no`)    - `access_type` (Body parameter, type: `string`, required: `no`)    - `route` (Body parameter, type: `string`, required: `no`)    - `visibility` (Body parameter, type: `string`, required: `no`)    - `time_limits` (Body parameter, type: `string`, required: `no`)    - `volume_limits` (Body parameter, type: `string`, required: `no`)    - `free_tariff` (Body parameter, type: `string`, required: `no`)    - `paid_tariff` (Body parameter, type: `string`, required: `no`)    - `order` (Body parameter, type: `string`, required: `no`)    - `success_page` (Body parameter, type: `string`, required: `no`)    - `speed_step_downs` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update tariff",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/tariffs/{{tariff_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariffs",
                    "{{tariff_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete tariff",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const tariff_id = pm.environment.get('tariff_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!tariff_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tariffs/{{tariff_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariffs",
                "{{tariff_id}}"
              ]
            },
            "description": "**Parameters:**- `tariff_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete tariff",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tariffs/{{tariff_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariffs",
                    "{{tariff_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage pricing tariffs for paid WiFi.Tariffs define pricing structures for premium WiFi access.**Pricing options:**- Time-based (hourly, daily)- Data-based (MB, GB)- Unlimited periods"
    },
    {
      "name": "Tariff Groups",
      "item": [
        {
          "name": "Add tariff group",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add tariff group');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tariff-groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariff-groups"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `description` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add tariff group",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/traffic-group",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "traffic-group"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tariff-groups?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariff-groups"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of fleets**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all tariff groups",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tariff-groups?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariff-groups"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get tariff group",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const tariff_group_id = pm.environment.get('tariff_group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!tariff_group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tariff-groups/{{tariff_group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariff-groups",
                "{{tariff_group_id}}"
              ]
            },
            "description": "**Parameters:**- `tariff_group_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get tariff group",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tariff-groups/{{tariff_group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariff-groups",
                    "{{tariff_group_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update tariff group",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const tariff_group_id = pm.environment.get('tariff_group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!tariff_group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tariff-groups/{{tariff_group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariff-groups",
                "{{tariff_group_id}}"
              ]
            },
            "description": "**Parameters:**- `tariff_group_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `description` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update tariff group",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/tariff-groups/{{tariff_group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariff-groups",
                    "{{tariff_group_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete tariff group",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const tariff_group_id = pm.environment.get('tariff_group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!tariff_group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tariff-groups/{{tariff_group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tariff-groups",
                "{{tariff_group_id}}"
              ]
            },
            "description": "**Parameters:**- `tariff_group_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete tariff group",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tariff-groups/{{tariff_group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tariff-groups",
                    "{{tariff_group_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Group tariffs for package offerings.Combine multiple tariffs into purchasable packages.**Use cases:**- Bundle deals- Regional pricing- Promotional offers"
    },
    {
      "name": "Translations",
      "item": [
        {
          "name": "Add translation",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add translation');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/translations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "translations"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `description` (Body parameter, type: `string`, required: `no`)    - `version` (Body parameter, type: `string`, required: `no`)    - `type` (Body parameter, type: `string`, required: `no`)    - `settings` (Body parameter, type: `string`, required: `no`)    - `language` (Body parameter, type: `string`, required: `no`)    - `translation_set` (Body parameter, type: `string`, required: `no`)    - `notes` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add translation",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/translations",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "translations"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/translations?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "translations"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of fleets**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all translations",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/translations?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "translations"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get translation",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const translation_id = pm.environment.get('translation_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!translation_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/translations/{{translation_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "translations",
                "{{translation_id}}"
              ]
            },
            "description": "**Parameters:**- `translation_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get translation",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/translations/{{translation_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "translations",
                    "{{translation_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update translations",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const translation_id = pm.environment.get('translation_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!translation_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/translations/{{translation_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "translations",
                "{{translation_id}}"
              ]
            },
            "description": "**Parameters:**- `translation_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `description` (Body parameter, type: `string`, required: `no`)    - `version` (Body parameter, type: `string`, required: `no`)    - `type` (Body parameter, type: `string`, required: `no`)    - `settings` (Body parameter, type: `string`, required: `no`)    - `language` (Body parameter, type: `string`, required: `no`)    - `translation_set` (Body parameter, type: `string`, required: `no`)    - `notes` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update translations",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/translations/{{translation_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "translations",
                    "{{translation_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete translation",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const translation_id = pm.environment.get('translation_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!translation_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/translations/{{translation_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "translations",
                "{{translation_id}}"
              ]
            },
            "description": "**Parameters:**- `translation_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete translation",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/translations/{{translation_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "translations",
                    "{{translation_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage multi-language support.Translations enable captive portals in multiple languages.**Features:**- Add language translations- Override default text- RTL language support"
    },
    {
      "name": "Tokens",
      "item": [
        {
          "name": "Add tokens",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add tokens');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"token_id\", jsonData.id);",
                  "            console.log(\"Saved token_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tokens",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `value` (Body parameter, type: `string`, required: `no`)    - `parent` (Body parameter, type: `string`, required: `no`)    - `translation` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add tokens",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/tokens",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tokens"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tokens?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of tokens**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all tokens",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tokens?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tokens"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get tokens",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const token_id = pm.environment.get('token_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!token_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get tokens');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tokens/{{token_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens",
                "{{token_id}}"
              ]
            },
            "description": "**Parameters:**- `token_id` (Path parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get tokens",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tokens/{{token_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tokens",
                    "{{token_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update tokens",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const token_id = pm.environment.get('token_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!token_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update tokens');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tokens/{{token_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens",
                "{{token_id}}"
              ]
            },
            "description": "**Parameters:**- `token_id` (Path parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `value` (Body parameter, type: `string`, required: `no`)    - `parent` (Body parameter, type: `string`, required: `no`)    - `translation` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update tokens",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/tokens/{{token_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tokens",
                    "{{token_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete token",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const token_id = pm.environment.get('token_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!token_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete token');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tokens/{{token_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens",
                "{{token_id}}"
              ]
            },
            "description": "**Parameters:**- `token_id` (Path parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete token",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/tokens/{{token_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tokens",
                    "{{token_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage API access tokens.API tokens provide programmatic access to IronWiFi.**Token types:**- Read-only tokens- Full access tokens- Scoped tokens"
    },
    {
      "name": "Configurations",
      "item": [
        {
          "name": "Add configuration",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add configuration');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\": \"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/configurations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "configurations"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add configuration",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\": \"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/configurations",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "configurations"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/configurations?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "configurations"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "Get a list of fleets**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all configurations",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/configurations?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "configurations"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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}]}}"
            }
          ]
        },
        {
          "name": "Get configuration",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const configuration_id = pm.environment.get('configuration_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!configuration_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/configurations/{{configuration_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "configurations",
                "{{configuration_id}}"
              ]
            },
            "description": "**Parameters:**- `configuration_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get configuration",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/configurations/{{configuration_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "configurations",
                    "{{configuration_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"39105a12-b435-4e2d-aee8-b86c78b4dee3\",    \"username\": \"lennie.predovic\",    \"firstname\": null,    \"lastname\": null,    \"email\": \"\",    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:47:32.009604764Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"9cfc7d5c-3177-4ba8-9378-ee59481b198a\",    \"transaction_token\": null,    \"device_data\": [],    \"shared_codes\": [],    \"session_limits\": {        \"consumed_data\": 0,        \"consumed_time\": 0    },    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3\"        }    }}"
            }
          ]
        },
        {
          "name": "Update configuration",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const translation_id = pm.environment.get('translation_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!translation_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\":\"{{$randomUserName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/translations/{{translation_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "translations",
                "{{translation_id}}"
              ]
            },
            "description": "**Parameters:**- `configuration_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update configuration",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\":\"{{$randomUserName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/translations/{{translation_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "translations",
                    "{{translation_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"firstname\": \"Lourdes\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/employees/39105a12-b435-4e2d-aee8-b86c78b4dee3%0A\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete configuration",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const configuration_id = pm.environment.get('configuration_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!configuration_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/configurations/{{configuration_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "configurations",
                "{{configuration_id}}"
              ]
            },
            "description": "**Parameters:**- `configuration_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete configuration",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/configurations/{{configuration_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "configurations",
                    "{{configuration_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage WiFi configurations and profiles.Configurations define WiFi network settings for device provisioning.**Settings:**- SSID configuration- Security settings- Certificate assignment- Proxy settings"
    },
    {
      "name": "Guests",
      "item": [
        {
          "name": "Get all guests",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all guests');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": ""
            },
            "url": {
              "raw": "{{baseUrl}}/guests?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guests"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all guests",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guests?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guests"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": ""
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"guests\": [            {                \"id\": \"cd9d9e09-00e9-45ae-8d5b-53f61cc306fa\",                \"email\": \"guest@example.com\",                \"name\": \"John Doe\",                \"created\": \"2025-12-10T04:48:22.519488Z\"            }        ]    },    \"total_items\": 100,    \"page\": 1,    \"page_size\": 25}"
            }
          ]
        },
        {
          "name": "Get guest",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const guest_id = pm.environment.get('guest_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!guest_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": ""
            },
            "url": {
              "raw": "{{baseUrl}}/guests/{{guest_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guests",
                "{{guest_id}}"
              ]
            },
            "description": "**Parameters:**- `guest_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get guest",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guests/{{guest_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guests",
                    "{{guest_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": ""
                }
              },
              "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": [],
              "body": "{    \"id\": \"550f16e7-b86a-4aea-83e3-a03880498fdc\",    \"email\": \"guest@example.com\",    \"name\": \"John Doe\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/guests/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete guest",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const guest_id = pm.environment.get('guest_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!guest_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/guests/{{guest_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "guests",
                "{{guest_id}}"
              ]
            },
            "description": "**Parameters:**- `guest_id` (URL parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete guest",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/guests/{{guest_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "guests",
                    "{{guest_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage guest user accounts.Guests are temporary WiFi users with time-limited access.**Features:**- Create guest accounts- Set validity period- Track usage"
    },
    {
      "name": "Users",
      "item": [
        {
          "name": "Add user",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Generate a unique username for testing",
                  "const timestamp = Date.now();",
                  "const randomStr = Math.random().toString(36).substring(2, 8);",
                  "const username = `test-user-${timestamp}-${randomStr}`;",
                  "pm.environment.set('username', username);",
                  "console.log('Generated username:', username);",
                  "console.log('Executing: Add user');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"username\": \"{{username}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ]
            },
            "description": "**Parameters:**- `username` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add user",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"username\": \"{{generatedUsername}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/users",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"id\": \"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/users/1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all users",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all users');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": ""
            },
            "url": {
              "raw": "{{baseUrl}}/users?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all users",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": ""
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"users\": [            {                \"id\": \"968a277b-666f-49ee-bdb5-ccf826b4ba57\",                \"username\": \"user@example.com\",                \"group_id\": \"b6fcef70-e0c1-4278-ae52-6e73b6ffd893\",                \"disabled\": 0            }        ]    },    \"total_items\": 50,    \"page\": 1,    \"page_size\": 25}"
            }
          ]
        },
        {
          "name": "Get user by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const user_id = pm.environment.get('user_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!user_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": ""
            },
            "url": {
              "raw": "{{baseUrl}}/users/{{user_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "{{user_id}}"
              ]
            },
            "description": "**Parameters:**- `user_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get user by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": ""
                },
                "url": {
                  "raw": "{{baseUrl}}/users/{{user_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{user_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\",    \"username\": \"florian.turcotte72\",    \"firstname\": null,    \"lastname\": null,    \"email\": null,    \"department\": null,    \"company\": null,    \"workphone\": null,    \"homephone\": null,    \"mobilephone\": null,    \"address\": null,    \"city\": null,    \"state\": null,    \"country\": null,    \"zip\": null,    \"notes\": null,    \"changeuserinfo\": null,    \"portalloginpassword\": null,    \"enableportallogin\": null,    \"creationdate\": \"2025-07-17T22:18:24.141060905Z\",    \"creationby\": \"9ad445a4-5cea-4e\",    \"updatedate\": null,    \"updateby\": null,    \"deletiondate\": null,    \"owner_id\": \"i-07171f6e\",    \"source\": null,    \"type\": null,    \"mac_address\": null,    \"authdate\": null,    \"orgunit\": null,    \"thumbnailphotourl\": null,    \"orig_response\": null,    \"authsource\": \"local\",    \"series\": null,    \"client_mac\": null,    \"ap_mac\": null,    \"dn\": null,    \"stripe_customer_id\": null,    \"personal_data\": null,    \"email_confirmed\": null,    \"user_type\": \"e\",    \"user_owner\": null,    \"migration_shard_id\": \"0c3bfb62-d4c3-4fa2-949c-4cef5f4d7aa5\",    \"transaction_token\": null,    \"device_data\": [],    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/users/1ad4e93d-8a54-47ac-9122-eb7e2d7226ad\"        }    }}"
            }
          ]
        },
        {
          "name": "Get user by Username",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get user by Username');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": ""
            },
            "url": {
              "raw": "{{baseUrl}}/users/{{username}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "{{username}}"
              ]
            },
            "description": "**Parameters:**- `username` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get user by Username",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/{{username}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{username}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": ""
                }
              },
              "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": [],
              "body": "{    \"id\": \"fee30218-c76e-41e4-b346-4922682d5137\",    \"username\": \"user@example.com\",    \"group_id\": \"df8fedaa-1022-4546-93b4-24f7163a717d\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/users/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Update user",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const user_id = pm.environment.get('user_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!user_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"firstname\":\"{{$randomFirstName}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/users/{{user_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "{{user_id}}"
              ]
            },
            "description": "**Parameters:**- `user_id` (Query parameter, type: `string`, required: `yes`)    - `username` (Body parameter, type: `string`, required: `no`)    - `orgunit` (Body parameter, type: `string`, required: `no`)    - `firstname` (Body parameter, type: `string`, required: `no`)    - `lastname` (Body parameter, type: `string`, required: `no`)    - `email` (Body parameter, type: `string`, required: `no`)    - `authsource` (Body parameter, type: `string`, required: `no`)    - `orgunit` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update user",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/{{user_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{user_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\"firstname\":\"{{$randomFirstName}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"2b2b7dba-7941-4a0c-880d-38b8ba70ce57\",    \"username\": \"updateduser@example.com\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/users/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete user",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const user_id = pm.environment.get('user_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!user_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/users/{{user_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "{{user_id}}"
              ]
            },
            "description": "**Parameters:**- `user_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete user",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/users/{{user_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "users",
                    "{{user_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage RADIUS user accounts.Users are permanent accounts that authenticate via RADIUS (802.1X, PAP, etc.).**Operations:**- Create/update user credentials- Set RADIUS attributes- Manage group membership- Reset passwords"
    },
    {
      "name": "Certificates",
      "item": [
        {
          "name": "Add certificate",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add certificate');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"userid\": \"{{employee_id}}\",    \"distribution\": \"downloadcert\",    \"validity\": \"175\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/certificates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "certificates"
              ]
            },
            "description": "**Parameters:**- `userid` (Body parameter, type: `string`, required: `yes`)    - `distribution` (Body parameter, type: `string`, required: `yes`)    - `validity` (Body parameter, type: `integer`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add certificate",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"userid\": \"{{employee_id}}\",    \"distribution\": \"downloadcert\",    \"validity\": \"175\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/certificates",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"serial\": \"0ff15d22ceab\",    \"id\": 17529324097195,    \"path\": \"https://console-dev.ironwifi.io/api/certificates/a68e1c94-1227-4b87-9001-4415d4354e0e\",    \"path_id\": \"a68e1c94-1227-4b87-9001-4415d4354e0e\",    \"pkcs12_pass\": \"NbiMj4CT5q\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/certificates/17529324097195\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all certificates",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const employee_id = pm.environment.get('employee_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!employee_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/certificates?userid={{employee_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "certificates"
              ],
              "query": [
                {
                  "key": "userid",
                  "value": "{{employee_id}}"
                }
              ]
            },
            "description": "**Parameters:**- `userid` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get all certificates",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates?userid={{employee_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates"
                  ],
                  "query": [
                    {
                      "key": "userid",
                      "value": "{{employee_id}}"
                    }
                  ]
                }
              },
              "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": [],
              "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}"
            }
          ]
        },
        {
          "name": "Get certificate",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const certificate_path_id = pm.environment.get('certificate_path_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!certificate_path_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/certificates/{{certificate_path_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "certificates",
                "{{certificate_path_id}}"
              ]
            },
            "description": "**Parameters:**- `path_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get certificate",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates/{{certificate_path_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates",
                    "{{certificate_path_id}}"
                  ]
                },
                "description": "**Parameters:**- `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"
                }
              ],
              "body": "{  \"id\": \"825dab28-2325-4044-ade1-54bf3ffff06f\",  \"name\": \"WiFi Certificate\",  \"type\": \"user\",  \"subject\": \"CN=user@example.com\"}"
            }
          ]
        },
        {
          "name": "Get SCEP GetCACaps",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get SCEP GetCACaps');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "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"
                }
              ]
            },
            "description": "**Parameters:**- `operation` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "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": [],
              "body": "RenewalSHA-1SHA-256AESDES3SCEPStandardPOSTPKIOperation"
            }
          ]
        },
        {
          "name": "Get SCEP GetCACert",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get SCEP GetCACert');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "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"
                }
              ]
            },
            "description": "**Parameters:**- `operation` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "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": [],
              "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\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\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\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�vJf\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���̤�+\tIT�S�R��=\u001b�pi�\u0006:��N\t�\u007fzG��\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� � �}�"
            }
          ]
        },
        {
          "name": "Add SCEP PKIOperation",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add SCEP PKIOperation');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"certificate_id\", jsonData.id);",
                  "            console.log(\"Saved certificate_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON (SCEP returns binary)",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"userid\": \"{{employee_id}}\",    \"distribution\": \"downloadcert\",    \"validity\": \"175\"}",
              "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:**- `userid` (Body parameter, type: `string`, required: `yes`)    - `distribution` (Body parameter, type: `string`, required: `yes`)    - `validity` (Body parameter, type: `integer`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add SCEP PKIOperation",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"userid\": \"{{employee_id}}\",    \"distribution\": \"downloadcert\",    \"validity\": \"175\"}",
                  "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:**- `userid` (Body parameter, type: `string`, required: `yes`)    - `distribution` (Body parameter, type: `string`, required: `yes`)    - `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"
                }
              ],
              "body": "{  \"id\": \"96646df7-8307-4017-8ff9-f80fe19bfff1\",  \"name\": \"New Certificate\",  \"download_url\": \"https://console.ironwifi.io/api/certificates/{id}/download\"}"
            }
          ]
        },
        {
          "name": "Revoke certificate",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const certificate_path_id = pm.environment.get('certificate_path_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!certificate_path_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"status\":\"revoked\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/certificates/{{certificate_path_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "certificates",
                "{{certificate_path_id}}"
              ]
            },
            "description": "**Parameters:**- `certificate_id` (Query parameter, type: `string`, required: `yes`)    - `status` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Revoke certificate",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"status\":\"revoked\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/certificates/{{certificate_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates",
                    "{{certificate_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"status\": \"revoked\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/certificates/17529325598817\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete certificate",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const certificate_id = pm.environment.get('certificate_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!certificate_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete certificate');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/certificates/{{certificate_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "certificates",
                "{{certificate_id}}"
              ]
            },
            "description": "**Parameters:**- `certificate_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete certificate",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/certificates/{{certificate_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "certificates",
                    "{{certificate_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage TLS/SSL certificates.Certificates are used for 802.1X (EAP-TLS) authentication and RADIUS server identity.**Certificate types:**- CA certificates- Server certificates- Client certificates- RADIUS server certs"
    },
    {
      "name": "Vouchers",
      "item": [
        {
          "name": "Generate voucher",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Generate voucher');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"voucher_id\", jsonData.id);",
                  "            console.log(\"Saved voucher_id: \" + jsonData.id);",
                  "        }",
                  "        // Also save series if present",
                  "        if (jsonData && jsonData.series) {",
                  "            pm.environment.set(\"voucher_series\", jsonData.series);",
                  "            console.log(\"Saved voucher_series: \" + jsonData.series);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"voucher_quantity\":1,\t\"voucher_devices\":1,\t\"voucher_format\":\"letters_password\",\t\"voucher_length\":5,\t\"voucher_duration\":2,\t\"voucher_deletedate\":30,    \"group_id\":\"{{group_id}}\",    \"orgunitid\":\"{{org_unit_id}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vouchers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers"
              ]
            },
            "description": "**Parameters:**- `voucher_quantity` (Body parameter, type: `integer`, required: `yes`)    - `voucher_devices` (Body parameter, type: `integer`, required: `yes`)    - `voucher_format` (Body parameter, type: `string`, required: `yes`)    - `voucher_length` (Body parameter, type: `integer`, required: `yes`)    - `voucher_duration` (Body parameter, type: `integer`, required: `yes`)    - `voucher_deletedate` (Body parameter, type: `integer`, required: `no`)    - `group_id` (Body parameter, type: `string`, required: `no`)    - `orgunitid` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Generate voucher",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"voucher_quantity\":1,\t\"voucher_devices\":1,\t\"voucher_format\":\"letters_password\",\t\"voucher_length\":5,\t\"voucher_duration\":2,\t\"voucher_deletedate\":30,    \"group_id\":\"xxx\",    \"orgunitid\":\"yyy\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"link\": \"v2507200949\",    \"id\": \"0676eeb3-082b-4953-8c1f-2a523e8c466d\",    \"username\": \"sdkwy\",    \"generated_vouchers\": \"sdkwy\",    \"code\": \"sdkwy\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/0676eeb3-082b-4953-8c1f-2a523e8c466d\"        }    }}"
            }
          ]
        },
        {
          "name": "Add voucher",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add voucher');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"voucher_code\":\"{{$randomLoremWord}}\",\t\"voucher_devices\":1,\t\"voucher_duration\":2,\t\"voucher_deletedate\":30}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vouchers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers"
              ]
            },
            "description": "**Parameters:**- `voucher_code` (Body parameter, type: `string`, required: `yes`)    - `voucher_devices` (Body parameter, type: `integer`, required: `yes`)    - `voucher_duration` (Body parameter, type: `integer`, required: `yes`)    - `voucher_deletedate` (Body parameter, type: `integer`, required: `yes`)    - `group_id` (Body parameter, type: `string`, required: `yes`)    - `orgunitid` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add voucher",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"voucher_code\":\"{{$randomLoremWord}}\",\t\"voucher_devices\":1,\t\"voucher_duration\":2,\t\"voucher_deletedate\":30}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"link\": true,    \"id\": \"ff0459f97996b603\",    \"username\": \"ab\",    \"code\": \"ab\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/ff0459f97996b603\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all vouchers",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all vouchers');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}&include_share_codes={{include_share_codes}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                },
                {
                  "key": "include_share_codes",
                  "value": "{{include_share_codes}}"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)    - `include_share_codes` (Query parameter, type: `boolean`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all vouchers",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "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\"}]}}"
            }
          ]
        },
        {
          "name": "Get generated vouchers as CSV",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_series = pm.environment.get('voucher_series');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_series) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get generated vouchers as CSV');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers?filter={{voucher_series}}&format=csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers"
              ],
              "query": [
                {
                  "key": "filter",
                  "value": "{{voucher_series}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "format",
                  "value": "csv",
                  "description": "Response format: json (default) or csv"
                }
              ]
            },
            "description": "**Parameters:**- `filter` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`"
          },
          "response": [
            {
              "name": "Get all vouchers",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "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\"}]}}"
            },
            {
              "name": "Get all vouchers Copy",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers?filter={{voucher_series}}&format=csv",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers"
                  ],
                  "query": [
                    {
                      "key": "filter",
                      "value": "{{voucher_series}}"
                    },
                    {
                      "key": "format",
                      "value": "csv"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": null,
              "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": [],
              "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\"}"
            }
          ]
        },
        {
          "name": "Get voucher by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_id = pm.environment.get('voucher_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get voucher by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_id}}"
              ]
            },
            "description": "**Parameters:**- `voucher_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get voucher by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"47764a53ec76993b\",    \"username\": \"eligendi\",    \"code\": \"eligendi\",    \"notes\": \"\",    \"authdate\": null,    \"deletiondate\": \"2025-08-19T09:52:28.000000Z\",    \"source\": \"voucher_generator\",    \"orgunit\": \"\",    \"transaction_token\": null,    \"device_data\": [],    \"session_limits\": null,    \"status\": \"valid\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/47764a53ec76993b\"        }    }}"
            }
          ]
        },
        {
          "name": "Get voucher by Code",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get voucher by Code');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_code}}"
              ]
            },
            "description": "**Parameters:**- `voucher_code` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get voucher by Code",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_code}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"38c3cd013956e636\",    \"username\": \"nulla\",    \"code\": \"nulla\",    \"notes\": \"\",    \"authdate\": null,    \"deletiondate\": \"2025-08-19T09:53:33.000000Z\",    \"source\": \"voucher_generator\",    \"orgunit\": \"\",    \"transaction_token\": null,    \"device_data\": [],    \"session_limits\": null,    \"status\": \"valid\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"        }    }}"
            }
          ]
        },
        {
          "name": "Update voucher by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_id = pm.environment.get('voucher_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update voucher by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"active\": 0}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_id}}"
              ]
            },
            "description": "**Parameters:**- `voucher_id` (Query parameter, type: `string`, required: `yes`)    - `active` (Body parameter, type: `integer`, required: `no`)    - `notes` (Body parameter, type: `integer`, required: `no`)    - `orgunit` (Body parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Update voucher by ID",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"active\": 0}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"active\": 0,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"        }    }}"
            }
          ]
        },
        {
          "name": "Update voucher by Code",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Update voucher by Code');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"active\": 0}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_code}}"
              ]
            },
            "description": "**Parameters:**- `voucher_code` (Query parameter, type: `string`, required: `yes`)    - `active` (Body parameter, type: `integer`, required: `no`)    - `notes` (Body parameter, type: `integer`, required: `no`)    - `orgunit` (Body parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Update voucher by Code",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"active\": 0}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_code}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"active\": 0,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/nulla\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete voucher by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_id = pm.environment.get('voucher_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete voucher by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_id}}"
              ]
            },
            "description": "**Parameters:**- `voucher_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete voucher by ID",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        },
        {
          "name": "Delete voucher by Code",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Delete voucher by Code');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_code}}"
              ]
            },
            "description": "**Parameters:**- `voucher_code` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete voucher by Code",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_code}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage prepaid access vouchers.Vouchers provide one-time or limited-use WiFi access codes.**Features:**- Generate single or batch vouchers- Set validity and usage limits- Track redemption- Export voucher codes"
    },
    {
      "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": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sharecode?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sharecode"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all share codes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/sharecode?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "sharecode"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                }
              },
              "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": [],
              "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\"}]}}"
            }
          ]
        },
        {
          "name": "Get share code by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_id = pm.environment.get('voucher_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get share code by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_id}}"
              ]
            },
            "description": "**Parameters:**- `sharecode_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get voucher by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"47764a53ec76993b\",    \"username\": \"eligendi\",    \"code\": \"eligendi\",    \"notes\": \"\",    \"authdate\": null,    \"deletiondate\": \"2025-08-19T09:52:28.000000Z\",    \"source\": \"voucher_generator\",    \"orgunit\": \"\",    \"transaction_token\": null,    \"device_data\": [],    \"session_limits\": null,    \"status\": \"valid\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/47764a53ec76993b\"        }    }}"
            }
          ]
        },
        {
          "name": "Get share code by Code",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get share code by Code');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_code}}"
              ]
            },
            "description": "**Parameters:**- `share_code` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get voucher by Code",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_code}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"38c3cd013956e636\",    \"username\": \"nulla\",    \"code\": \"nulla\",    \"notes\": \"\",    \"authdate\": null,    \"deletiondate\": \"2025-08-19T09:53:33.000000Z\",    \"source\": \"voucher_generator\",    \"orgunit\": \"\",    \"transaction_token\": null,    \"device_data\": [],    \"session_limits\": null,    \"status\": \"valid\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"        }    }}"
            }
          ]
        },
        {
          "name": "Update share code by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_id = pm.environment.get('voucher_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update share code by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"active\": 0}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_id}}"
              ]
            },
            "description": "**Parameters:**- `sharecode_id` (Query parameter, type: `string`, required: `yes`)    - `active` (Body parameter, type: `integer`, required: `no`)    - `notes` (Body parameter, type: `integer`, required: `no`)    - `orgunit` (Body parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Update voucher by ID",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"active\": 0}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"active\": 0,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/38c3cd013956e636\"        }    }}"
            }
          ]
        },
        {
          "name": "Update share code by Code",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Update share code by Code');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"active\": 0}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_code}}"
              ]
            },
            "description": "**Parameters:**- `share_code` (Query parameter, type: `string`, required: `yes`)    - `active` (Body parameter, type: `integer`, required: `no`)    - `notes` (Body parameter, type: `integer`, required: `no`)    - `orgunit` (Body parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Update voucher by Code",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"active\": 0}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_code}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_code}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"active\": 0,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/vouchers/nulla\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete share code by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const voucher_id = pm.environment.get('voucher_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!voucher_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete share code by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vouchers",
                "{{voucher_id}}"
              ]
            },
            "description": "**Parameters:**- `sharecode_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete voucher by ID",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vouchers/{{voucher_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vouchers",
                    "{{voucher_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        },
        {
          "name": "Delete share code by Code",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Delete share code by Code');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sharecode/{{share_code}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sharecode",
                "{{share_code}}"
              ]
            },
            "description": "**Parameters:**- `share_code` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete share code by Code",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "body": null,
                "url": {
                  "raw": "{{baseUrl}}/sharecode/{{share_code}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "sharecode",
                    "{{share_code}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage sharing codes for resources.Share codes allow sharing captive portals and configurations with other accounts.**Use cases:**- Template sharing- Multi-tenant deployments- Partner access"
    },
    {
      "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add connector');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"dbtype\":\"csv\",    \"filename\":\"sample.csv\",    \"filesize\":638,    \"csvFile\":\"data:text/csv;base64,IyJ1c2VybmFtZSIsImZpcnN0bmFtZSIsImxhc3RuYW1lIiwiZW1haWwiLCJncm91cDF8cHJpb3JpdHkxLGdyb3VwMnxwcmlvcml0eTIiLCJhdHRfY2hlY2sxfG9wMXx2YWx1ZTEsYXR0X2NoZWNrMnxvcDJ8dmFsdWUyIiwiYXR0X3JlcGx5MXxvcDF8dmFsdWUxLGF0dF9yZXBseTJ8b3AyfHZhbHVlMiIsIm9yZ3VuaXQiLCJjbGllbnRfbWFjMSxjbGllbnRfbWFjMiIKInVzZXJuYW1lMjAiLCJqb2huIiwic21pdGgiLCJqb2huQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJFbXBsb3llZSIsIjExOjIyOjMzOjQ0OjU1OjY2IgoidXNlcm5hbWUyMSIsImphbmUiLCJzbWl0aCIsImphbmVAZXhhbXBsZS5jb20iLCIxaG91cnwxIiwiQ2xlYXJ0ZXh0LVBhc3N3b3JkfDo9fGFiYzEyMyIsIlNlc3Npb24tVGltZW91dHw6PXwxNDQwMCIsIlN0dWRlbnQiLCIxMS0yMi0zMy00NC01NS02NixBQUJCQ0NEREVFRkYiCiJ1c2VybmFtZTIyIiwic3RldmUiLCJzbWl0aCIsInN0ZXZlQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJTdHVkZW50Igo=\",    \"name\":\"{{$randomWords}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/connectors",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connectors"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)    - `dbtype` (Body parameter, type: `string`, required: `yes`)    - `filename` (Body parameter, type: `string`, required: `no`)    - `filesize` (Body parameter, type: `integer`, required: `no`)    - `csvFile` (Body parameter, type: `string`, required: `no`)    - `api_token` (Body parameter, type: `string`, required: `no`)    - `domain` (Body parameter, type: `string`, required: `no`)    - `searchfilter` (Body parameter, type: `string`, required: `no`)    - `authsource` (Body parameter, type: `string`, required: `no`)    - `templateid` (Body parameter, type: `string`, required: `no`)    - `basedn` (Body parameter, type: `string`, required: `no`)    - `dbhostname` (Body parameter, type: `string`, required: `no`)    - `dbport` (Body parameter, type: `string`, required: `no`)    - `dbusername` (Body parameter, type: `string`, required: `no`)    - `dbpassword` (Body parameter, type: `string`, required: `no`)    - `api_endpoint` (Body parameter, type: `string`, required: `no`)    - `api_token` (Body parameter, type: `string`, required: `no`)    - `client_id` (Body parameter, type: `string`, required: `no`)    - `client_secret` (Body parameter, type: `string`, required: `no`)    - `tid` (Body parameter, type: `string`, required: `no`)    - `bind` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Add connector",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{    \"dbtype\":\"csv\",    \"filename\":\"sample.csv\",    \"filesize\":638,    \"csvFile\":\"data:text/csv;base64,IyJ1c2VybmFtZSIsImZpcnN0bmFtZSIsImxhc3RuYW1lIiwiZW1haWwiLCJncm91cDF8cHJpb3JpdHkxLGdyb3VwMnxwcmlvcml0eTIiLCJhdHRfY2hlY2sxfG9wMXx2YWx1ZTEsYXR0X2NoZWNrMnxvcDJ8dmFsdWUyIiwiYXR0X3JlcGx5MXxvcDF8dmFsdWUxLGF0dF9yZXBseTJ8b3AyfHZhbHVlMiIsIm9yZ3VuaXQiLCJjbGllbnRfbWFjMSxjbGllbnRfbWFjMiIKInVzZXJuYW1lMjAiLCJqb2huIiwic21pdGgiLCJqb2huQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJFbXBsb3llZSIsIjExOjIyOjMzOjQ0OjU1OjY2IgoidXNlcm5hbWUyMSIsImphbmUiLCJzbWl0aCIsImphbmVAZXhhbXBsZS5jb20iLCIxaG91cnwxIiwiQ2xlYXJ0ZXh0LVBhc3N3b3JkfDo9fGFiYzEyMyIsIlNlc3Npb24tVGltZW91dHw6PXwxNDQwMCIsIlN0dWRlbnQiLCIxMS0yMi0zMy00NC01NS02NixBQUJCQ0NEREVFRkYiCiJ1c2VybmFtZTIyIiwic3RldmUiLCJzbWl0aCIsInN0ZXZlQGV4YW1wbGUuY29tIiwiMWhvdXJ8MSIsIkNsZWFydGV4dC1QYXNzd29yZHw6PXxhYmMxMjMiLCJTZXNzaW9uLVRpbWVvdXR8Oj18MTQ0MDAiLCJTdHVkZW50Igo=\",    \"name\":\"{{$randomWords}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"89ca936d-66f7-4a4d-bc5b-c53165589c06\",    \"name\": \"New Connector\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/connectors/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all connectors",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all connectors');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/connectors?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connectors"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all connectors",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": "{    \"_embedded\": {        \"connectors\": [            {                \"id\": \"29710057-0284-432b-b2e0-b66332f1e706\",                \"name\": \"Active Directory\",                \"type\": \"ldap\",                \"status\": \"active\"            }        ]    },    \"total_items\": 2,    \"page\": 1,    \"page_size\": 25}"
            }
          ]
        },
        {
          "name": "Get connector",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const connector_id = pm.environment.get('connector_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!connector_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/connectors/{{connector_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connectors",
                "{{connector_id}}"
              ]
            },
            "description": "**Parameters:**- `connector_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get connector",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors/{{connector_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors",
                    "{{connector_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"3efe06ab-6b4a-4d5b-aa3b-fc4f9edd9223\",    \"name\": \"Active Directory\",    \"type\": \"ldap\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/connectors/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Update connector",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const connector_id = pm.environment.get('connector_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!connector_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"name\":\"{{$randomLoremSentence}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/connectors/{{connector_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connectors",
                "{{connector_id}}"
              ]
            },
            "description": "**Parameters:**- `connector_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `status` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update connector",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors/{{connector_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors",
                    "{{connector_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete connector",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const connector_id = pm.environment.get('connector_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!connector_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/connectors/{{connector_id}}?delete_users={{delete_users}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connectors",
                "{{connector_id}}"
              ],
              "query": [
                {
                  "key": "delete_users",
                  "value": "{{delete_users}}"
                }
              ]
            },
            "description": "**Parameters:**- `connector_id` (Query parameter, type: `string`, required: `yes`)    - `delete_users` (Query parameter, type: `boolean`, required: `no`)"
          },
          "response": [
            {
              "name": "Delete connector",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/connectors/{{connector_id}}?delete_users={{delete_users}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "connectors",
                    "{{connector_id}}"
                  ],
                  "query": [
                    {
                      "key": "delete_users",
                      "value": "{{delete_users}}"
                    }
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage external system connectors.Connectors integrate IronWiFi with external systems (LDAP, AD, APIs).**Connector types:**- LDAP/Active Directory- REST API webhooks- SMS gateways- Payment providers"
    },
    {
      "name": "Attributes",
      "item": [
        {
          "name": "Add attribute",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Create a dedicated user for attribute testing",
                  "const timestamp = Date.now();",
                  "const attrTestUsername = `attr-test-${timestamp}`;",
                  "const token = pm.environment.get('auth_bearer_token');",
                  "",
                  "pm.sendRequest({",
                  "    url: pm.environment.get('baseUrl') + '/users',",
                  "    method: 'POST',",
                  "    header: {",
                  "        'Content-Type': 'application/json',",
                  "        'Authorization': 'Bearer ' + token",
                  "    },",
                  "    body: {",
                  "        mode: 'raw',",
                  "        raw: JSON.stringify({ username: attrTestUsername })",
                  "    }",
                  "}, function (err, res) {",
                  "    if (err) {",
                  "        console.log('Error creating user:', err);",
                  "    } else if (res.code === 201 || res.code === 200) {",
                  "        const userData = res.json();",
                  "        pm.environment.set('user_id', userData.id);",
                  "        console.log('Created test user:', userData.id);",
                  "    } else {",
                  "        console.log('Failed to create user:', res.code, res.status);",
                  "    }",
                  "});",
                  "",
                  "// Generate password for testing",
                  "const password = 'TestPass' + Math.random().toString(36).substring(2, 8);",
                  "pm.environment.set('generatedPassword', password);",
                  "pm.environment.set('table', 'radcheck');",
                  "",
                  "console.log('Executing: Add attribute');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Response time is acceptable', function() {",
                  "    pm.expect(pm.response.responseTime).to.be.below(5000);",
                  "});",
                  "",
                  "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, 500]);",
                  "});",
                  "",
                  "// Save attribute_id for subsequent tests",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('attribute_id', jsonData.id);",
                  "            console.log('Saved attribute_id:', jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        console.log('Could not parse response');",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{    \"value\": \"{{generatedPassword}}\",    \"userid\": \"{{user_id}}\",    \"attribute\": \"Cleartext-Password\",    \"operator\": \":=\",    \"table\": \"radcheck\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/attributes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "attributes"
              ]
            },
            "description": "**Parameters:**- `value` (Body parameter, type: `string`, required: `yes`)    - `userid` (Body parameter, type: `string`, required: `yes`)    - `attribute` (Body parameter, type: `string`, required: `yes`)    - `operator` (Body parameter, type: `string`, required: `yes`)    - `table` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add attribute",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{    \"value\": \"{{generatedPassword}}\",    \"userid\": \"{{user_id}}\",    \"attribute\": \"Cleartext-Password\",    \"operator\": \":=\",    \"table\": \"radcheck\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/attributes",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"id\": \"eee6025b-0471-4576-8362-f0927fbab4bf\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/attributes/eee6025b-0471-4576-8362-f0927fbab4bf\"        }    }}"
            }
          ]
        },
        {
          "name": "Add group attribute",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Create a dedicated group for attribute testing",
                  "const timestamp = Date.now();",
                  "const groupName = `attr-group-${timestamp}`;",
                  "const token = pm.environment.get('auth_bearer_token');",
                  "",
                  "pm.sendRequest({",
                  "    url: pm.environment.get('baseUrl') + '/groups',",
                  "    method: 'POST',",
                  "    header: {",
                  "        'Content-Type': 'application/json',",
                  "        'Authorization': 'Bearer ' + token",
                  "    },",
                  "    body: {",
                  "        mode: 'raw',",
                  "        raw: JSON.stringify({ groupname: groupName })",
                  "    }",
                  "}, function (err, res) {",
                  "    if (err) {",
                  "        console.log('Error creating group:', err);",
                  "    } else if (res.code === 201 || res.code === 200) {",
                  "        const groupData = res.json();",
                  "        pm.environment.set('group_id', groupData.id);",
                  "        console.log('Created test group:', groupData.id);",
                  "    } else {",
                  "        console.log('Failed to create group:', res.code, res.status);",
                  "    }",
                  "});",
                  "",
                  "pm.environment.set('table', 'radgroupcheck');",
                  "console.log('Executing: Add group attribute');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"group_attribute_id\", jsonData.id);",
                  "            console.log(\"Saved group_attribute_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"groupid\": \"{{group_id}}\",\t\"attribute\": \"Expire-After\",\t\"operator\": \":=\",\t\"table\": \"radgroupcheck\",\t\"value\": \"600\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/attributes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "attributes"
              ]
            },
            "description": "**Parameters:**- `groupid` (Body parameter, type: `string`, required: `yes`)    - `attribute` (Body parameter, type: `string`, required: `yes`)    - `operator` (Body parameter, type: `string`, required: `yes`)    - `table` (Body parameter, type: `string`, required: `yes`)    - `value` (Body parameter, type: `integer`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add group attribute",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/attributes",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "attributes"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"groupid\": \"{{group_id}}\",\t\"attribute\": \"Expire-After\",\t\"operator\": \":=\",\t\"table\": \"radgroupcheck\",\t\"value\": \"600\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"9a4b8b36-b2dc-4da2-b218-e6e8cfd8a5d1\",    \"attribute\": \"Session-Timeout\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Get list of attributes",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const group_id = pm.environment.get('group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Response time is acceptable', function() {",
                  "    pm.expect(pm.response.responseTime).to.be.below(5000);",
                  "});",
                  "",
                  "pm.test('Response status is valid for GET', function() {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404, 500]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Response has _embedded data', function() {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property('_embedded');",
                  "    });",
                  "    pm.test('Response has pagination info', function() {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property('total_items');",
                  "    });",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/attributes?groupid={{group_id}}&table={{table}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "attributes"
              ],
              "query": [
                {
                  "key": "groupid",
                  "value": "{{group_id}}"
                },
                {
                  "key": "table",
                  "value": "{{table}}"
                }
              ]
            },
            "description": "**Parameters:**- `table` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get list of attributes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/attributes?groupid={{group_id}}&table={{table}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "attributes"
                  ],
                  "query": [
                    {
                      "key": "groupid",
                      "value": "{{group_id}}"
                    },
                    {
                      "key": "table",
                      "value": "{{table}}"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"323013ce-dde6-4416-81ae-f1e2973e04b2\",    \"attribute\": \"Session-Timeout\",    \"op\": \":=\",    \"value\": \"3600\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Get list of group attributes",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const group_id = pm.environment.get('group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Response time is acceptable', function() {",
                  "    pm.expect(pm.response.responseTime).to.be.below(5000);",
                  "});",
                  "",
                  "pm.test('Response status is valid for GET', function() {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404, 500]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Response has _embedded data', function() {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property('_embedded');",
                  "    });",
                  "    pm.test('Response has pagination info', function() {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property('total_items');",
                  "    });",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/attributes?groupid={{group_id}}&table={{table}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "attributes"
              ],
              "query": [
                {
                  "key": "groupid",
                  "value": "{{group_id}}"
                },
                {
                  "key": "table",
                  "value": "{{table}}"
                }
              ]
            },
            "description": "Retrieve a list of attributess or a specific attributes by ID.**Parameters:**- `groupid` (Query parameter, type: `string`, required: `yes`)    - `table` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get list of group attributes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/attributes?groupid={{group_id}}&table={{table}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "attributes"
                  ],
                  "query": [
                    {
                      "key": "groupid",
                      "value": "{{group_id}}"
                    },
                    {
                      "key": "table",
                      "value": "{{table}}"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": "{    \"id\": \"323013ce-dde6-4416-81ae-f1e2973e04b2\",    \"attribute\": \"Session-Timeout\",    \"op\": \":=\",    \"value\": \"3600\",    \"_links\": {        \"self\": {            \"href\": \"https://console.ironwifi.io/api/attributes/{id}\"        }    }}"
            }
          ]
        },
        {
          "name": "Patch attribute",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const attribute_id = pm.environment.get('attribute_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!attribute_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"value\":\"Su\",\t\"table\":\"radcheck\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/attributes/{{attribute_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "attributes",
                "{{attribute_id}}"
              ]
            },
            "description": "Update the specified fields of a {{login_attribute}}.**Parameters:**- `attribute_id` (Query parameter, type: `string`, required: `yes`)    - `value` (Body parameter, type: `string`, required: `yes`)    - `table` (Body parameter, type: `string`, required: `yes`)    - `operator` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Patch attribute",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/attributes/{{attribute_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "attributes",
                    "{{attribute_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete attribute",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const attribute_id = pm.environment.get('attribute_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!attribute_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/attributes/{{attribute_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "attributes",
                "{{attribute_id}}"
              ]
            },
            "description": "**Parameters:**- `attribute_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete attribute",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/attributes/{{attribute_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "attributes",
                    "{{attribute_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage RADIUS attributes.Custom RADIUS attributes for advanced authentication policies.**Attribute types:**- Check attributes (authentication)- Reply attributes (authorization)- Vendor-specific attributes"
    },
    {
      "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"user_group_id\", jsonData.id);",
                  "            console.log(\"Saved user_group_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add user-group mapping');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"userid\":\"{{user_id}}\",\t\"groupid\":\"{{group_id}}\",\t\"priority\":\"1\"\t}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/user-groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "user-groups"
              ]
            },
            "description": "**Parameters:**- `userid` (Body parameter, type: `string`, required: `yes`)    - `groupid` (Body parameter, type: `string`, required: `yes`)    - `priority` (Body parameter, type: `integer`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add user-group mapping",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/user-groups",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "user-groups"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete user-group mapping",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const user_group_id = pm.environment.get('user_group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!user_group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete user-group mapping');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"groupid\":\"{{group_id}}\",\t\"attribute\":\"Expire-After\",\t\"operator\":\":=\",\t\"table\":\"radgroupcheck\",\t\"value\":\"333\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/user-groups/{{user_group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "user-groups",
                "{{user_group_id}}"
              ]
            },
            "description": "Delete a specific user-group mapping.**Parameters:**- `user_group_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete user-group mapping",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/user-groups/{{user_group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "user-groups",
                    "{{user_group_id}}"
                  ]
                }
              },
              "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage user-to-group assignments.Link users to groups for policy application.**Operations:**- Add user to group- Remove user from group- List group members"
    },
    {
      "name": "Groups",
      "item": [
        {
          "name": "Add group",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add group');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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.environment.set(resourceName + \"_id\", jsonData.id);",
                  "            console.log(\"Saved \" + resourceName + \"_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"groupname\":\"{{$randomWord}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups"
              ]
            },
            "description": "**Parameters:**- `groupname` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add group",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"groupname\":\"{{$randomWord}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/groups",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"id\": \"753d1c96-9244-4012-90e6-ba1dbf692175\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all groups",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all groups');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/groups?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "type",
                  "value": "{{type}}",
                  "description": "Resource type filter"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all groups",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/groups?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "groups"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}"
                    },
                    {
                      "key": "type",
                      "value": "{{type}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                }
              },
              "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": [],
              "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}"
            }
          ]
        },
        {
          "name": "Get group by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const group_id = pm.environment.get('group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/groups/{{group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                "{{group_id}}"
              ]
            },
            "description": "**Parameters:**- `group_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get group by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/groups/{{group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "groups",
                    "{{group_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"753d1c96-9244-4012-90e6-ba1dbf692175\",    \"groupname\": \"bus\",    \"priority\": null,    \"description\": null,    \"source\": null,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175\"        }    }}"
            }
          ]
        },
        {
          "name": "Update group",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const group_id = pm.environment.get('group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"description\":\"{{$randomLoremSentence}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/groups/{{group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                "{{group_id}}"
              ]
            },
            "description": "**Parameters:**- `group_id` (Query parameter, type: `string`, required: `yes`)    - `description` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Update group",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\t\"description\":\"{{$randomLoremSentence}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/groups/{{group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "groups",
                    "{{group_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"description\": \"Libero qui aliquid culpa esse illo et deleniti officia ducimus.\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/groups/753d1c96-9244-4012-90e6-ba1dbf692175\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete group",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const group_id = pm.environment.get('group_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!group_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/groups/{{group_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                "{{group_id}}"
              ]
            },
            "description": "**Parameters:**- `group_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete group",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/groups/{{group_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "groups",
                    "{{group_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage user groups.Groups organize users and apply common policies.**Features:**- Create logical groups- Set group-level attributes- Apply bandwidth policies"
    },
    {
      "name": "API Keys",
      "description": "Manage API keys (access tokens) for programmatic access to the API.API keys are used for Bearer token authentication in all API requests.",
      "item": [
        {
          "name": "Create API key",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys"
              ]
            },
            "description": "Creates a new API key (access token). The full access_token is only shown once - save it securely.**Required permission:** `api_keys.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Production API Key\",    \"comment\": \"For production integrations\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Create API key",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/keys",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "keys"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('API key created', 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.environment.set('api_key_id', _data.id);",
                  "    console.log('Created API key:', _data.id);",
                  "    console.log('IMPORTANT: Save this access_token - it will not be shown again:', _data.access_token);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Get all API keys",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys"
              ]
            },
            "description": "Lists all API keys for the account. Note: The full access_token is not returned for security.**Required permission:** `api_keys.full` or `api_keys.read`"
          },
          "response": [
            {
              "name": "Get all API keys",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/keys",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "keys"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Delete API key",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/keys/{{api_key_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys",
                "{{api_key_id}}"
              ]
            },
            "description": "Deletes an API key. This immediately revokes access for any systems using this key.**Required permission:** `api_keys.full`"
          },
          "response": [
            {
              "name": "Delete API key",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/keys/{{api_key_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "keys",
                    "{{api_key_id}}"
                  ]
                }
              },
              "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": null
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('API key deleted', function() {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 204]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const api_key_id = pm.environment.get('api_key_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!api_key_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Authentication Providers",
      "description": "Configure external authentication providers (LDAP, SAML, OAuth2, Google Workspace, Azure AD, etc.).Authentication providers enable SSO and directory integration for user authentication.",
      "item": [
        {
          "name": "Add authentication provider",
          "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"auth_provider_id\", jsonData.id);",
                  "            console.log(\"Saved auth_provider_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/authentication-providers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "authentication-providers"
              ]
            },
            "description": "Creates a new authentication provider configuration.**Supported types:**- `ldap` - LDAP/Active Directory- `saml` - SAML 2.0 IdP- `oauth2` - OAuth2/OpenID Connect- `google` - Google Workspace- `azure` - Azure Active Directory- `okta` - Okta**Required permission:** `authentication_providers.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Corporate LDAP\",    \"type\": \"ldap\",    \"host\": \"ldap.example.com\",    \"port\": 636,    \"use_ssl\": true,    \"base_dn\": \"dc=example,dc=com\",    \"bind_dn\": \"cn=admin,dc=example,dc=com\",    \"bind_password\": \"{{ldap_password}}\",    \"user_filter\": \"(uid=%s)\",    \"enabled\": true}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Add authentication provider",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get all authentication providers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/authentication-providers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "authentication-providers"
              ]
            },
            "description": "Lists all configured authentication providers.**Required permission:** `authentication_providers.full` or `authentication_providers.read`"
          },
          "response": [
            {
              "name": "Get all authentication providers",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get authentication provider",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "authentication-providers",
                "{{auth_provider_id}}"
              ]
            },
            "description": "Gets details of a specific authentication provider.**Required permission:** `authentication_providers.full` or `authentication_providers.read`"
          },
          "response": [
            {
              "name": "Get authentication provider",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers",
                    "{{auth_provider_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const auth_provider_id = pm.environment.get('auth_provider_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!auth_provider_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Update authentication provider",
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "authentication-providers",
                "{{auth_provider_id}}"
              ]
            },
            "description": "Updates an authentication provider configuration.**Required permission:** `authentication_providers.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"enabled\": true,    \"name\": \"Updated LDAP Provider\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update authentication provider",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers",
                    "{{auth_provider_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const auth_provider_id = pm.environment.get('auth_provider_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!auth_provider_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Test authentication provider",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "authentication-providers",
                "{{auth_provider_id}}",
                "test"
              ]
            },
            "description": "Tests connection to an authentication provider.**Required permission:** `authentication_providers.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"username\": \"testuser\",    \"password\": \"testpassword\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Test authentication provider",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}/test",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers",
                    "{{auth_provider_id}}",
                    "test"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const auth_provider_id = pm.environment.get('auth_provider_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!auth_provider_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Delete authentication provider",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "authentication-providers",
                "{{auth_provider_id}}"
              ]
            },
            "description": "Deletes an authentication provider.**Required permission:** `authentication_providers.full`"
          },
          "response": [
            {
              "name": "Delete authentication provider",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/authentication-providers/{{auth_provider_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "authentication-providers",
                    "{{auth_provider_id}}"
                  ]
                }
              },
              "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": null
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const auth_provider_id = pm.environment.get('auth_provider_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!auth_provider_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Hotspot Plans",
      "description": "Manage hotspot plans that define bandwidth limits, data quotas, and time restrictions for captive portal users.",
      "item": [
        {
          "name": "Add hotspot plan",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hotspot-plans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "hotspot-plans"
              ]
            },
            "description": "Creates a new hotspot plan with bandwidth and usage limits.**Required permission:** `hotspot_plans.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Basic WiFi\",    \"download_speed\": 10,    \"upload_speed\": 5,    \"data_limit\": 1073741824,    \"time_limit\": 3600,    \"price\": 0,    \"currency\": \"USD\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Add hotspot plan",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/hotspot-plans",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "hotspot-plans"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get all hotspot plans",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hotspot-plans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "hotspot-plans"
              ]
            },
            "description": "Lists all hotspot plans.**Required permission:** `hotspot_plans.full` or `hotspot_plans.read`"
          },
          "response": [
            {
              "name": "Get all hotspot plans",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/hotspot-plans",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "hotspot-plans"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get hotspot plan",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hotspot-plans/{{hotspot_plan_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "hotspot-plans",
                "{{hotspot_plan_id}}"
              ]
            },
            "description": "Gets details of a specific hotspot plan.**Required permission:** `hotspot_plans.full` or `hotspot_plans.read`"
          },
          "response": [
            {
              "name": "Get hotspot plan",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/hotspot-plans/{{hotspot_plan_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "hotspot-plans",
                    "{{hotspot_plan_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const hotspot_plan_id = pm.environment.get('hotspot_plan_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!hotspot_plan_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Update hotspot plan",
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hotspot-plans/{{hotspot_plan_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "hotspot-plans",
                "{{hotspot_plan_id}}"
              ]
            },
            "description": "Updates a hotspot plan.**Required permission:** `hotspot_plans.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Premium WiFi\",    \"download_speed\": 50,    \"upload_speed\": 25}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update hotspot plan",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/hotspot-plans/{{hotspot_plan_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "hotspot-plans",
                    "{{hotspot_plan_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const hotspot_plan_id = pm.environment.get('hotspot_plan_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!hotspot_plan_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Delete hotspot plan",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hotspot-plans/{{hotspot_plan_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "hotspot-plans",
                "{{hotspot_plan_id}}"
              ]
            },
            "description": "Deletes a hotspot plan.**Required permission:** `hotspot_plans.full`"
          },
          "response": [
            {
              "name": "Delete hotspot plan",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/hotspot-plans/{{hotspot_plan_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "hotspot-plans",
                    "{{hotspot_plan_id}}"
                  ]
                }
              },
              "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": null
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const hotspot_plan_id = pm.environment.get('hotspot_plan_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!hotspot_plan_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Support Tickets",
      "description": "Manage support tickets for tracking issues and requests.",
      "item": [
        {
          "name": "Create ticket",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "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]);",
                  "});",
                  "",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('ticket_id', jsonData.id);",
                  "            console.log('Saved ticket_id: ' + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets"
              ]
            },
            "description": "Creates a new support ticket.**Required permission:** `tickets.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Network connectivity issue\",    \"description\": \"Users reporting slow WiFi in Building A\",    \"priority\": \"high\",    \"type\": \"incident\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Create ticket",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/tickets",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tickets"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get all tickets",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets"
              ]
            },
            "description": "Lists all support tickets.**Query parameters:**- `status` - Filter by status (open, in_progress, resolved, closed)- `priority` - Filter by priority (low, medium, high, critical)**Required permission:** `tickets.full` or `tickets.read`"
          },
          "response": [
            {
              "name": "Get all tickets",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/tickets",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tickets"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get ticket",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets/{{ticket_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets",
                "{{ticket_id}}"
              ]
            },
            "description": "Gets details of a specific ticket.**Required permission:** `tickets.full` or `tickets.read`"
          },
          "response": [
            {
              "name": "Get ticket",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/tickets/{{ticket_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tickets",
                    "{{ticket_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const ticket_id = pm.environment.get('ticket_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!ticket_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Update ticket",
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets/{{ticket_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets",
                "{{ticket_id}}"
              ]
            },
            "description": "Updates a ticket.**Required permission:** `tickets.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"status\": \"in_progress\",    \"comment\": \"Investigating the issue\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update ticket",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/tickets/{{ticket_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tickets",
                    "{{ticket_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const ticket_id = pm.environment.get('ticket_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!ticket_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Delete ticket",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets/{{ticket_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets",
                "{{ticket_id}}"
              ]
            },
            "description": "Deletes a ticket.**Required permission:** `tickets.full`"
          },
          "response": [
            {
              "name": "Delete ticket",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/tickets/{{ticket_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "tickets",
                    "{{ticket_id}}"
                  ]
                }
              },
              "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": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": null
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const ticket_id = pm.environment.get('ticket_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!ticket_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Get tickets by status (open)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Response status is 200 OK', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Response contains tickets array', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData).to.have.property('_embedded');",
                  "    pm.expect(jsonData._embedded).to.have.property('tickets');",
                  "    pm.expect(jsonData._embedded.tickets).to.be.an('array');",
                  "});",
                  "",
                  "pm.test('All returned tickets have open status or NULL treated as open', function () {",
                  "    const jsonData = pm.response.json();",
                  "    if (jsonData._embedded && jsonData._embedded.tickets) {",
                  "        jsonData._embedded.tickets.forEach(function(ticket) {",
                  "            // NULL status is treated as 'open' by the API",
                  "            const status = ticket.status || 'open';",
                  "            pm.expect(status).to.equal('open');",
                  "        });",
                  "    }",
                  "});"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets?status=open",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "open"
                }
              ]
            },
            "description": "Filter tickets by status.\n\n**Note:** Tickets with NULL status are treated as 'open'.\n\n**Required permission:** `tickets.read` or `tickets.full`"
          },
          "response": []
        },
        {
          "name": "Get tickets by priority (high)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Response status is 200 OK', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('All returned tickets have high priority', function () {",
                  "    const jsonData = pm.response.json();",
                  "    if (jsonData._embedded && jsonData._embedded.tickets) {",
                  "        jsonData._embedded.tickets.forEach(function(ticket) {",
                  "            pm.expect(ticket.priority).to.equal('high');",
                  "        });",
                  "    }",
                  "});"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tickets?priority=high",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets"
              ],
              "query": [
                {
                  "key": "priority",
                  "value": "high"
                }
              ]
            },
            "description": "Filter tickets by priority level.\n\n**Required permission:** `tickets.read` or `tickets.full`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Support Dashboard",
      "description": "Support Dashboard API for aggregate ticket metrics and team performance stats.\n\n**Note:** This is an RPC-style endpoint (not REST) that returns dashboard metrics.\n\n**Required permission:** `tickets.read` or `tickets.full`",
      "item": [
        {
          "name": "Get Dashboard Metrics",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Response status is 200 OK', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Response is valid JSON', function () {",
                  "    pm.response.to.be.json;",
                  "});",
                  "",
                  "pm.test('Dashboard contains required metrics', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData).to.have.property('open_cases');",
                  "    pm.expect(jsonData).to.have.property('in_progress_cases');",
                  "    pm.expect(jsonData).to.have.property('assigned_to_me');",
                  "    pm.expect(jsonData).to.have.property('pending_refunds');",
                  "    pm.expect(jsonData).to.have.property('resolved_today');",
                  "});",
                  "",
                  "pm.test('Dashboard contains recent tickets array', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData).to.have.property('recent_tickets');",
                  "    pm.expect(jsonData.recent_tickets).to.be.an('array');",
                  "});",
                  "",
                  "pm.test('Dashboard contains category breakdown', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData).to.have.property('categories');",
                  "});",
                  "",
                  "pm.test('Open cases count is non-negative integer', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData.open_cases).to.be.a('number');",
                  "    pm.expect(jsonData.open_cases).to.be.at.least(0);",
                  "});",
                  "",
                  "// Save dashboard data for reference in subsequent tests",
                  "if (pm.response.code === 200) {",
                  "    const jsonData = pm.response.json();",
                  "    pm.environment.set('dashboard_open_cases', jsonData.open_cases);",
                  "    pm.environment.set('dashboard_in_progress', jsonData.in_progress_cases);",
                  "    console.log('Dashboard: ' + jsonData.open_cases + ' open, ' + jsonData.in_progress_cases + ' in progress');",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/support-dashboard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "support-dashboard"
              ]
            },
            "description": "Returns aggregate dashboard metrics for support tickets.\n\n**Response includes:**\n- `open_cases` - Count of tickets with status 'open' or NULL\n- `in_progress_cases` - Count of tickets in progress\n- `assigned_to_me` - Tickets assigned to current user\n- `pending_refunds` - Tickets with category 'refund'\n- `resolved_today` - Tickets resolved today\n- `avg_resolution_time` - Average hours to resolution\n- `recent_tickets` - Latest 5 tickets with status, category, priority\n- `urgent_cases` - High/urgent priority open tickets\n- `categories` - Breakdown by category\n\n**Note:** Tickets with NULL status are treated as 'open' in all counts.\n\n**Required permission:** `tickets.read` or `tickets.full`"
          },
          "response": [
            {
              "name": "Dashboard Metrics Success",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/support-dashboard",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "support-dashboard"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                }
              ],
              "body": "{\n  \"open_cases\": 2,\n  \"in_progress_cases\": 0,\n  \"assigned_to_me\": 0,\n  \"pending_refunds\": 0,\n  \"resolved_today\": 0,\n  \"avg_resolution_time\": null,\n  \"recent_tickets\": [\n    {\n      \"id\": \"ticket-uuid-1\",\n      \"ticket_number\": \"18185\",\n      \"subject\": \"Test ticket\",\n      \"status\": \"open\",\n      \"priority\": \"medium\",\n      \"category\": \"general\",\n      \"customer_email\": \"test@example.com\",\n      \"creationdate\": \"2025-10-13T16:20:00Z\"\n    }\n  ],\n  \"urgent_cases\": [],\n  \"categories\": [\n    {\n      \"category\": \"general\",\n      \"count\": 2\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Account",
      "description": "Manage account settings, profile, 2FA, and billing information.",
      "item": [
        {
          "name": "Get account info",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ]
            },
            "description": "Gets current account information including subscription status, usage limits, and profile.**Required permission:** `account.read` or `account.full`"
          },
          "response": [
            {
              "name": "Get account info",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/account",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "account"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Update account profile",
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ]
            },
            "description": "Updates account profile information.**Required permission:** `account.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"company_name\": \"Acme Corp\",    \"timezone\": \"America/New_York\",    \"language\": \"en\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update account profile",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/account",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "account"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get account usage",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "usage"
              ]
            },
            "description": "Gets account usage statistics and quota information.**Required permission:** `account.read` or `account.full`"
          },
          "response": [
            {
              "name": "Get account usage",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/account/usage",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "account",
                    "usage"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Enable 2FA",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account/2fa/enable",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "2fa",
                "enable"
              ]
            },
            "description": "Initiates 2FA setup. Returns QR code for authenticator app.**Required permission:** `account.full`"
          },
          "response": [
            {
              "name": "Enable 2FA",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/account/2fa/enable",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "account",
                    "2fa",
                    "enable"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Verify 2FA",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account/2fa/verify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "2fa",
                "verify"
              ]
            },
            "description": "Verifies 2FA setup with code from authenticator app.**Required permission:** `account.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"code\": \"123456\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Verify 2FA",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/account/2fa/verify",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "account",
                    "2fa",
                    "verify"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Disable 2FA",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account/2fa/disable",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "2fa",
                "disable"
              ]
            },
            "description": "Disables 2FA for the account.**Required permission:** `account.full`",
            "body": {
              "mode": "raw",
              "raw": "{    \"code\": \"123456\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Disable 2FA",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/account/2fa/disable",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "account",
                    "2fa",
                    "disable"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Profiles (Onboarding)",
      "description": "Generate device onboarding profiles for WiFi configuration (iOS mobileconfig, Android, Windows, macOS).",
      "item": [
        {
          "name": "Generate profile",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "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]);",
                  "});",
                  "",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.uuid) {",
                  "            pm.environment.set('profile_uuid', jsonData.uuid);",
                  "            console.log('Saved profile_uuid: ' + jsonData.uuid);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/profiles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "profiles"
              ]
            },
            "description": "Generates a device onboarding profile for automatic WiFi configuration.**Supported platforms:**- `ios` - iOS/iPadOS mobileconfig- `android` - Android WiFi config- `windows` - Windows WiFi profile- `macos` - macOS mobileconfig- `chromeos` - Chrome OS policy",
            "body": {
              "mode": "raw",
              "raw": "{    \"platform\": \"ios\",    \"network_id\": \"{{network_id}}\",    \"username\": \"user@example.com\",    \"include_certificate\": true}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Generate profile",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/profiles",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "profiles"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get profile",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/profiles/{{profile_uuid}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "profiles",
                "{{profile_uuid}}"
              ]
            },
            "description": "Downloads a previously generated profile."
          },
          "response": [
            {
              "name": "Get profile",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/profiles/{{profile_uuid}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "profiles",
                    "{{profile_uuid}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ],
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const profile_uuid = pm.environment.get('profile_uuid');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!profile_uuid) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Organization Units",
      "item": [
        {
          "name": "Add unit",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Add unit');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"org_unit_id\", jsonData.id);",
                  "            console.log(\"Saved org_unit_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\":\"{{$randomLoremWords}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/orgunits",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orgunits"
              ]
            },
            "description": "**Parameters:**- `name` (Body parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add unit",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\":\"{{$randomLoremWords}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/orgunits",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "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": [],
              "body": "{    \"id\": \"97df5006-d4d2-4a62-be79-09818b06ffe1\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"        }    }}"
            }
          ]
        },
        {
          "name": "Get all units",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get all units');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/orgunits?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orgunits"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `integer`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `integer`, required: `no`)"
          },
          "response": [
            {
              "name": "Get all units",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "orgunits",
                    "{{org_unit_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"97df5006-d4d2-4a62-be79-09818b06ffe1\",    \"name\": \"cum alias enim\",    \"description\": null,    \"console_access\": null,    \"console_role\": null,    \"source\": null,    \"members\": 0,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"        }    }}"
            }
          ]
        },
        {
          "name": "Get unit by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const org_unit_id = pm.environment.get('org_unit_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!org_unit_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get unit by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orgunits",
                "{{org_unit_id}}"
              ]
            },
            "description": "**Parameters:**- `org_unit_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Get unit by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "orgunits",
                    "{{org_unit_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"id\": \"97df5006-d4d2-4a62-be79-09818b06ffe1\",    \"name\": \"cum alias enim\",    \"description\": null,    \"console_access\": null,    \"console_role\": null,    \"source\": null,    \"members\": 0,    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"        }    }}"
            }
          ]
        },
        {
          "name": "Update unit",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const org_unit_id = pm.environment.get('org_unit_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!org_unit_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update unit');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\"name\":\"{{$randomLoremWords}}\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orgunits",
                "{{org_unit_id}}"
              ]
            },
            "description": "**Parameters:**- `org_unit_id` (Query parameter, type: `string`, required: `yes`)    - `name` (Body parameter, type: `string`, required: `no`)    - `description` (Body parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Update unit",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\"name\":\"{{$randomLoremWords}}\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "orgunits",
                    "{{org_unit_id}}"
                  ]
                }
              },
              "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": [],
              "body": "{    \"name\": \"et ea necessitatibus\",    \"_links\": {        \"self\": {            \"href\": \"https://console-dev.ironwifi.io/api/orgunits/97df5006-d4d2-4a62-be79-09818b06ffe1\"        }    }}"
            }
          ]
        },
        {
          "name": "Delete unit",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const org_unit_id = pm.environment.get('org_unit_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!org_unit_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete unit');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "// 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": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orgunits",
                "{{org_unit_id}}"
              ]
            },
            "description": "**Parameters:**- `org_unit_id` (Query parameter, type: `string`, required: `yes`)"
          },
          "response": [
            {
              "name": "Delete unit",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/orgunits/{{org_unit_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "orgunits",
                    "{{org_unit_id}}"
                  ]
                }
              },
              "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": [],
              "body": null
            }
          ]
        }
      ],
      "description": "Manage organizational units for multi-tenant deployments.Org units provide hierarchical organization of resources.**Use cases:**- Department segregation- Multi-site management- Delegated administration"
    },
    {
      "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": {}
              }
            },
            {
              "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, 500]);",
                  "});",
                  "",
                  "// 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) {",
                  "            pm.environment.set(\"group_unit_mapping_id\", jsonData.id);",
                  "            console.log(\"Saved group_unit_mapping_id: \" + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\t\"orgunitid\":\"{{org_unit_id}}\",\t\"groupid\":\"{{group_id}}\",\t\"priority\":\"1\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/org-units-groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "org-units-groups"
              ]
            },
            "description": "**Parameters:**- `orgunitid` (Body parameter, type: `string`, required: `yes`)    - `groupid` (Body parameter, type: `string`, required: `yes`)    - `priority` (Body parameter, type: `integer`, required: `yes`)"
          },
          "response": [
            {
              "name": "Add Group-Unit Mapping",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/org-units-groups",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "org-units-groups"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Tue, 10 Dec 2024 12:00:00 GMT"
                }
              ],
              "body": "{\n  \"status\": \"success\"\n}"
            }
          ]
        },
        {
          "name": "Get All Group-Unit mappings",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get All Group-Unit mappings');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "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, 422]);",
                  "});",
                  "",
                  "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": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/org-units-groups?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "org-units-groups"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number for pagination (starts at 1)"
                },
                {
                  "key": "filter",
                  "value": "{{filter}}",
                  "description": "Filter expression (e.g., name:value, status:active)"
                },
                {
                  "key": "sort",
                  "value": "{{sort}}",
                  "description": "Sort field and direction (e.g., name:asc, created:desc)"
                },
                {
                  "key": "format",
                  "value": "{{format}}",
                  "description": "Response format: json (default) or csv"
                },
                {
                  "key": "type",
                  "value": "{{type}}",
                  "description": "Resource type filter"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Number of items per page (default: 25, max: 100)"
                }
              ]
            },
            "description": "**Parameters:**- `page` (Query parameter, type: `string`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `page_size` (Query parameter, type: `string`, required: `no`)"
          },
          "response": [
            {
              "name": "Get All Group-Unit mappings",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/org-units-groups?page={{page}}&filter={{filter}}&sort={{sort}}&format={{format}}&type={{type}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "org-units-groups"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}",
                      "description": "Page number for pagination (starts at 1)"
                    },
                    {
                      "key": "filter",
                      "value": "{{filter}}",
                      "description": "Filter expression (e.g., name:value, status:active)"
                    },
                    {
                      "key": "sort",
                      "value": "{{sort}}",
                      "description": "Sort field and direction (e.g., name:asc, created:desc)"
                    },
                    {
                      "key": "format",
                      "value": "{{format}}",
                      "description": "Response format: json (default) or csv"
                    },
                    {
                      "key": "type",
                      "value": "{{type}}",
                      "description": "Resource type filter"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}",
                      "description": "Number of items per page (default: 25, max: 100)"
                    }
                  ]
                },
                "description": "**Parameters:**- `page` (Query parameter, type: `string`, required: `no`)    - `filter` (Query parameter, type: `string`, required: `no`)    - `sort` (Query parameter, type: `string`, required: `no`)    - `format` (Query parameter, type: `string`, required: `no`) - `enum`    - `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"
                }
              ],
              "body": "{  \"_embedded\": {    \"org-unit-groups\": [      {        \"id\": \"2ec0dadb-997a-483c-ab89-6c7de3ad523d\",        \"name\": \"Engineering\",        \"parent_id\": null      }    ]  },  \"total_items\": 3,  \"page\": 1}"
            }
          ]
        }
      ],
      "description": "Manage org-unit to group relationships.Link organization units to user groups for hierarchical access control."
    },
    {
      "name": "Utilities",
      "description": "Health checks and utility endpoints for monitoring and debugging.",
      "item": [
        {
          "name": "Health Check",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Health Check');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Health check returns 200', function() {",
                  "    pm.expect(pm.response.code).to.equal(200);",
                  "});",
                  "",
                  "pm.test('Response has status field', function() {",
                  "const _data = pm.response.json();",
                  "    pm.expect(_data).to.have.property('status');",
                  "    // Accept healthy, degraded (dev env), or ok as valid statuses",
                  "    pm.expect(['healthy', 'degraded', 'ok']).to.include(_data.status);",
                  "});",
                  "",
                  "pm.test('Response has timestamp', function() {",
                  "const _data = pm.response.json();",
                  "    pm.expect(_data).to.have.property('timestamp');",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ]
            },
            "description": "Checks the health status of the API including database connectivity.**Use this endpoint for:**- Load balancer health checks- Monitoring systems- Verifying API availability**Response includes:**- API status- Database connectivity status- Response time"
          },
          "response": [
            {
              "name": "Health Check",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/health",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "health"
                  ]
                },
                "description": "Checks the health status of the API including database connectivity.**Use this endpoint for:**- Load balancer health checks- Monitoring systems- Verifying API availability**Response includes:**- API status- Database connectivity status- Response time"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"status\": \"healthy\",  \"database\": \"connected\",  \"timestamp\": \"2024-12-10T12:00:00Z\"}"
            }
          ]
        },
        {
          "name": "Ping",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Ping');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Ping returns 200', function() {",
                  "    pm.expect(pm.response.code).to.equal(200);",
                  "});",
                  "",
                  "pm.test('Response has ack timestamp', function() {",
                  "const _data = pm.response.json();",
                  "    // API returns {ack: timestamp}",
                  "    pm.expect(_data).to.have.property('ack');",
                  "    pm.expect(_data.ack).to.be.a('number');",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/ping",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ping"
              ]
            },
            "description": "Simple ping endpoint for quick connectivity tests.**Returns:** `pong` response with timestamp**Use for:**- Quick connectivity tests- Latency measurements- Basic availability checks"
          },
          "response": [
            {
              "name": "Ping",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/ping",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "ping"
                  ]
                },
                "description": "Simple ping endpoint for quick connectivity tests.**Returns:** `pong` response with timestamp**Use for:**- Quick connectivity tests- Latency measurements- Basic availability checks"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"message\": \"pong\",  \"timestamp\": \"2024-12-10T12:00:00Z\"}"
            }
          ]
        }
      ]
    },
    {
      "name": "Bulk Operations",
      "description": "Endpoints for performing bulk operations on resources.**Supported resources:**- users- devices- vouchers- guests**Operation types:**- Synchronous bulk create/update/delete- Async operations with job status tracking- Filter-based bulk updates/deletes",
      "item": [
        {
          "name": "Bulk Create Users",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Bulk Create Users');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Bulk create accepted or endpoint not available\", function() {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 400, 403, 404, 405, 422]);",
                  "});",
                  "",
                  "if (pm.response.code === 200 || pm.response.code === 201) {",
                  "    try {",
                  "        const _data = pm.response.json();",
                  "        pm.test(\"All users created\", function() {",
                  "            pm.expect(_data.created).to.be.an(\"array\");",
                  "        });",
                  "    } catch (e) {",
                  "        console.log(\"Response not JSON\");",
                  "    }",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/bulk/users",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "bulk",
                "users"
              ]
            },
            "description": "Create multiple users in a single request.**Limits:**- Maximum 100 users per request- All users must belong to the same group (optional)**Parameters:**- `users` (array): Array of user objects  - `username` (required): Email or username  - `password` (required): User password  - `group_id` (optional): Assign to group",
            "body": {
              "mode": "raw",
              "raw": "{    \"users\": [        {            \"username\": \"user1@example.com\",            \"password\": \"SecurePass123!\"        },        {            \"username\": \"user2@example.com\",            \"password\": \"SecurePass456!\"        },        {            \"username\": \"user3@example.com\",            \"password\": \"SecurePass789!\"        }    ]}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Bulk Create Users",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/bulk/users",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "bulk",
                    "users"
                  ]
                },
                "description": "Create multiple users in a single request.**Limits:**- Maximum 100 users per request- All users must belong to the same group (optional)**Parameters:**- `users` (array): Array of user objects  - `username` (required): Email or username  - `password` (required): User password  - `group_id` (optional): Assign to group",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"users\": [        {            \"username\": \"user1@example.com\",            \"password\": \"SecurePass123!\"        },        {            \"username\": \"user2@example.com\",            \"password\": \"SecurePass456!\"        },        {            \"username\": \"user3@example.com\",            \"password\": \"SecurePass789!\"        }    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"created\": [    {      \"id\": \"uuid-1\",      \"username\": \"user1@example.com\"    },    {      \"id\": \"uuid-2\",      \"username\": \"user2@example.com\"    },    {      \"id\": \"uuid-3\",      \"username\": \"user3@example.com\"    }  ],  \"failed\": [],  \"total\": 3,  \"success_count\": 3,  \"failure_count\": 0}"
            }
          ]
        },
        {
          "name": "Bulk Create Users (Async)",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Bulk Create Users (Async)');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Async job accepted or endpoint not available\", function() {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 202, 400, 403, 404, 405, 422]);",
                  "});",
                  "",
                  "if (pm.response.code === 202) {",
                  "    try {",
                  "        const _data = pm.response.json();",
                  "        if (_data.job_id) {",
                  "            pm.environment.set(\"bulk_job_id\", _data.job_id);",
                  "            console.log(\"Job ID saved:\", _data.job_id);",
                  "        }",
                  "    } catch (e) {",
                  "        console.log(\"Response not JSON\");",
                  "    }",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/bulk/users/async",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "bulk",
                "users",
                "async"
              ]
            },
            "description": "Create multiple users asynchronously for large batches.**Use when:**- Creating more than 100 users- You don't need immediate confirmation- Processing large imports**Returns:** Job ID for status tracking",
            "body": {
              "mode": "raw",
              "raw": "{    \"users\": [        {            \"username\": \"bulk-user-{{$randomInt}}@example.com\",            \"password\": \"SecurePass123!\"        }    ],    \"options\": {        \"send_welcome_email\": false,        \"skip_duplicates\": true    }}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Bulk Create Users (Async)",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/bulk/users/async",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "bulk",
                    "users",
                    "async"
                  ]
                },
                "description": "Create multiple users asynchronously for large batches.**Use when:**- Creating more than 100 users- You don't need immediate confirmation- Processing large imports**Returns:** Job ID for status tracking",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"users\": [        {            \"username\": \"bulk-user-{{$randomInt}}@example.com\",            \"password\": \"SecurePass123!\"        }    ],    \"options\": {        \"send_welcome_email\": false,        \"skip_duplicates\": true    }}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"job_id\": \"bulk-job-uuid-12345\",  \"status\": \"queued\",  \"message\": \"Bulk operation queued for processing\",  \"status_url\": \"/api/bulk/status/bulk-job-uuid-12345\"}"
            }
          ]
        },
        {
          "name": "Get Bulk Job Status",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const bulk_job_id = pm.environment.get('bulk_job_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!bulk_job_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get Bulk Job Status');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get(\"_skip_test\")) {",
                  "    pm.test.skip(\"Skipped: dependency not available\");",
                  "} else {",
                  "    pm.test(\"Status retrieved or endpoint not available\", function() {",
                  "        pm.expect(pm.response.code).to.be.oneOf([200, 400, 403, 404, 405]);",
                  "    });",
                  "",
                  "    if (pm.response.code === 200) {",
                  "        try {",
                  "            const _data = pm.response.json();",
                  "            console.log(\"Job status:\", _data.status);",
                  "            console.log(\"Progress:\", _data.progress + \"%\");",
                  "        } catch (e) {",
                  "            console.log(\"Response not JSON\");",
                  "        }",
                  "    }",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/bulk/status/{{bulk_job_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "bulk",
                "status",
                "{{bulk_job_id}}"
              ]
            },
            "description": "Check the status of an async bulk operation.**Status values:**- `queued`: Job is waiting to be processed- `processing`: Job is currently running- `completed`: Job finished successfully- `failed`: Job encountered errors- `partial`: Some items succeeded, some failed"
          },
          "response": [
            {
              "name": "Get Bulk Job Status",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/bulk/status/{{bulk_job_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "bulk",
                    "status",
                    "{{bulk_job_id}}"
                  ]
                },
                "description": "Check the status of an async bulk operation.**Status values:**- `queued`: Job is waiting to be processed- `processing`: Job is currently running- `completed`: Job finished successfully- `failed`: Job encountered errors- `partial`: Some items succeeded, some failed"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"job_id\": \"bulk-job-uuid-12345\",  \"status\": \"completed\",  \"progress\": 100,  \"total_items\": 50,  \"processed_items\": 50,  \"success_count\": 48,  \"failure_count\": 2,  \"started_at\": \"2024-12-10T12:00:00Z\",  \"completed_at\": \"2024-12-10T12:01:30Z\",  \"errors\": [    {      \"item\": 23,      \"error\": \"Duplicate username\"    },    {      \"item\": 41,      \"error\": \"Invalid email format\"    }  ]}"
            }
          ]
        },
        {
          "name": "Bulk Delete Users by Filter",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Bulk Delete Users by Filter');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Bulk delete accepted or endpoint not available\", function() {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204, 400, 403, 404, 405, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/bulk/users/delete-filter",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "bulk",
                "users",
                "delete-filter"
              ]
            },
            "description": "Delete multiple users matching a filter criteria.**Warning:** This operation is irreversible!**Filter options:**- `disabled`: Delete only disabled users- `group_id`: Delete users in a specific group- `created_before`: Delete users created before date- `last_login_before`: Delete inactive users",
            "body": {
              "mode": "raw",
              "raw": "{    \"filter\": {        \"disabled\": 1,        \"created_before\": \"2024-01-01T00:00:00Z\"    },    \"confirm\": true}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Bulk Delete Users by Filter",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/bulk/users/delete-filter",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "bulk",
                    "users",
                    "delete-filter"
                  ]
                },
                "description": "Delete multiple users matching a filter criteria.**Warning:** This operation is irreversible!**Filter options:**- `disabled`: Delete only disabled users- `group_id`: Delete users in a specific group- `created_before`: Delete users created before date- `last_login_before`: Delete inactive users",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"filter\": {        \"disabled\": 1,        \"created_before\": \"2024-01-01T00:00:00Z\"    },    \"confirm\": true}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"deleted_count\": 15,  \"message\": \"15 users deleted successfully\"}"
            }
          ]
        },
        {
          "name": "Bulk Update Users by Filter",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Bulk Update Users by Filter');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/bulk/users/update-filter",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "bulk",
                "users",
                "update-filter"
              ]
            },
            "description": "Update multiple users matching filter criteria.**Common use cases:**- Disable all users in a group- Update expiration dates- Change group membership",
            "body": {
              "mode": "raw",
              "raw": "{    \"filter\": {        \"group_id\": \"{{group_id}}\"    },    \"update\": {        \"disabled\": 1    }}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Bulk Update Users by Filter",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/bulk/users/update-filter",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "bulk",
                    "users",
                    "update-filter"
                  ]
                },
                "description": "Update multiple users matching filter criteria.**Common use cases:**- Disable all users in a group- Update expiration dates- Change group membership",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"filter\": {        \"group_id\": \"{{group_id}}\"    },    \"update\": {        \"disabled\": 1    }}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"updated_count\": 25,  \"message\": \"25 users updated successfully\"}"
            }
          ]
        }
      ]
    },
    {
      "name": "Dictionary",
      "description": "RADIUS attribute dictionary for configuring reply and check attributes.This is a read-only endpoint that returns available RADIUS attributes organized by vendor.",
      "item": [
        {
          "name": "Get All Attributes",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get All Attributes');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/dictionary?page={{page}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dictionary"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}"
                }
              ]
            },
            "description": "Retrieve the complete RADIUS attribute dictionary.**Returns:**- Standard RADIUS attributes- Vendor-specific attributes (VSAs)- Attribute metadata (type, values, description)**Use for:**- Populating attribute dropdowns in UI- Validating attribute configurations"
          },
          "response": [
            {
              "name": "Get All Attributes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/dictionary?page={{page}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "dictionary"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                },
                "description": "Retrieve the complete RADIUS attribute dictionary.**Returns:**- Standard RADIUS attributes- Vendor-specific attributes (VSAs)- Attribute metadata (type, values, description)**Use for:**- Populating attribute dropdowns in UI- Validating attribute configurations"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"dictionary\": [      {        \"id\": \"1\",        \"attribute\": \"User-Name\",        \"vendor\": \"standard\",        \"type\": \"string\"      },      {        \"id\": \"2\",        \"attribute\": \"User-Password\",        \"vendor\": \"standard\",        \"type\": \"string\"      },      {        \"id\": \"6\",        \"attribute\": \"Service-Type\",        \"vendor\": \"standard\",        \"type\": \"integer\",        \"values\": [          \"Login\",          \"Framed\",          \"Callback-Login\"        ]      },      {        \"id\": \"26\",        \"attribute\": \"Vendor-Specific\",        \"vendor\": \"standard\",        \"type\": \"octets\"      }    ]  },  \"total_items\": 500,  \"page\": 1,  \"page_size\": 25}"
            }
          ]
        },
        {
          "name": "Get Attribute by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const attribute_id = pm.environment.get('attribute_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!attribute_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/dictionary/{{attribute_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dictionary",
                "{{attribute_id}}"
              ]
            },
            "description": "Get details of a specific RADIUS attribute.**Returns:**- Attribute name and ID- Data type- Valid values (for enumerated types)- Description"
          },
          "response": [
            {
              "name": "Get Attribute by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/dictionary/{{attribute_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "dictionary",
                    "{{attribute_id}}"
                  ]
                },
                "description": "Get details of a specific RADIUS attribute.**Returns:**- Attribute name and ID- Data type- Valid values (for enumerated types)- Description"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"6\",  \"attribute\": \"Service-Type\",  \"vendor\": \"standard\",  \"type\": \"integer\",  \"description\": \"Indicates the type of service the user has requested\",  \"values\": [    {      \"name\": \"Login-User\",      \"value\": 1    },    {      \"name\": \"Framed-User\",      \"value\": 2    },    {      \"name\": \"Callback-Login-User\",      \"value\": 3    }  ]}"
            }
          ]
        },
        {
          "name": "Search Attributes",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Search Attributes');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/dictionary?filter=Session&vendor=standard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dictionary"
              ],
              "query": [
                {
                  "key": "filter",
                  "value": "Session"
                },
                {
                  "key": "vendor",
                  "value": "standard"
                }
              ]
            },
            "description": "Search for RADIUS attributes by name or vendor.**Filter by:**- `filter`: Attribute name pattern- `vendor`: Vendor name (standard, cisco, microsoft, etc.)"
          },
          "response": [
            {
              "name": "Search Attributes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/dictionary?filter=Session&vendor=standard",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "dictionary"
                  ],
                  "query": [
                    {
                      "key": "filter",
                      "value": "Session"
                    },
                    {
                      "key": "vendor",
                      "value": "standard"
                    }
                  ]
                },
                "description": "Search for RADIUS attributes by name or vendor.**Filter by:**- `filter`: Attribute name pattern- `vendor`: Vendor name (standard, cisco, microsoft, etc.)"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"dictionary\": [      {        \"id\": \"27\",        \"attribute\": \"Session-Timeout\",        \"vendor\": \"standard\",        \"type\": \"integer\"      },      {        \"id\": \"28\",        \"attribute\": \"Idle-Timeout\",        \"vendor\": \"standard\",        \"type\": \"integer\"      },      {        \"id\": \"44\",        \"attribute\": \"Acct-Session-Id\",        \"vendor\": \"standard\",        \"type\": \"string\"      }    ]  },  \"total_items\": 3}"
            }
          ]
        }
      ]
    },
    {
      "name": "Vendors",
      "description": "RADIUS vendor information for vendor-specific attributes (VSAs).Vendors define proprietary RADIUS attributes for their networking equipment.",
      "item": [
        {
          "name": "Get All Vendors",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get All Vendors');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vendors?page={{page}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vendors"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}"
                }
              ]
            },
            "description": "List all RADIUS vendors with their vendor IDs.**Common vendors:**- Cisco (9)- Microsoft (311)- Aruba (14823)- Ruckus (25053)- Ubiquiti (41112)"
          },
          "response": [
            {
              "name": "Get All Vendors",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vendors?page={{page}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vendors"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                },
                "description": "List all RADIUS vendors with their vendor IDs.**Common vendors:**- Cisco (9)- Microsoft (311)- Aruba (14823)- Ruckus (25053)- Ubiquiti (41112)"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"vendors\": [      {        \"id\": \"9\",        \"name\": \"Cisco\",        \"attribute_count\": 45      },      {        \"id\": \"311\",        \"name\": \"Microsoft\",        \"attribute_count\": 12      },      {        \"id\": \"14823\",        \"name\": \"Aruba\",        \"attribute_count\": 28      },      {        \"id\": \"25053\",        \"name\": \"Ruckus\",        \"attribute_count\": 15      },      {        \"id\": \"41112\",        \"name\": \"Ubiquiti\",        \"attribute_count\": 8      }    ]  },  \"total_items\": 150}"
            }
          ]
        },
        {
          "name": "Get Vendor by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const vendor_id = pm.environment.get('vendor_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!vendor_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/vendors/{{vendor_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "vendors",
                "{{vendor_id}}"
              ]
            },
            "description": "Get vendor details and their specific attributes.**Returns:**- Vendor name and ID- List of vendor-specific attributes- Attribute descriptions"
          },
          "response": [
            {
              "name": "Get Vendor by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/vendors/{{vendor_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "vendors",
                    "{{vendor_id}}"
                  ]
                },
                "description": "Get vendor details and their specific attributes.**Returns:**- Vendor name and ID- List of vendor-specific attributes- Attribute descriptions"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"9\",  \"name\": \"Cisco\",  \"attributes\": [    {      \"attribute\": \"Cisco-AVPair\",      \"type\": \"string\"    },    {      \"attribute\": \"Cisco-NAS-Port\",      \"type\": \"string\"    },    {      \"attribute\": \"Cisco-Command\",      \"type\": \"string\"    }  ]}"
            }
          ]
        }
      ]
    },
    {
      "name": "Roles",
      "description": "Role-based access control (RBAC) management.Roles define what actions operators can perform in the console.",
      "item": [
        {
          "name": "Get All Roles",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get All Roles');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/roles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "roles"
              ]
            },
            "description": "List all available roles for operator accounts.**Default roles:**- `admin`: Full access to all features- `operator`: Standard operational access- `viewer`: Read-only access- `support`: Support ticket access only"
          },
          "response": [
            {
              "name": "Get All Roles",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/roles",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "roles"
                  ]
                },
                "description": "List all available roles for operator accounts.**Default roles:**- `admin`: Full access to all features- `operator`: Standard operational access- `viewer`: Read-only access- `support`: Support ticket access only"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"roles\": [      {        \"id\": \"role-admin-uuid\",        \"name\": \"admin\",        \"description\": \"Full administrative access\",        \"is_system\": true      },      {        \"id\": \"role-operator-uuid\",        \"name\": \"operator\",        \"description\": \"Standard operator access\",        \"is_system\": true      },      {        \"id\": \"role-viewer-uuid\",        \"name\": \"viewer\",        \"description\": \"Read-only access\",        \"is_system\": true      },      {        \"id\": \"role-custom-uuid\",        \"name\": \"network-admin\",        \"description\": \"Custom network admin role\",        \"is_system\": false      }    ]  },  \"total_items\": 4}"
            }
          ]
        },
        {
          "name": "Create Role",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Create Role');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "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]);",
                  "});",
                  "",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('role_id', jsonData.id);",
                  "            console.log('Saved role_id: ' + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/roles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "roles"
              ]
            },
            "description": "Create a custom role with specific permissions.**Parameters:**- `name` (required): Role name- `description`: Role description- `permissions`: Array of permission IDs",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"network-manager\",    \"description\": \"Can manage networks and access points\",    \"permissions\": [        \"networks.read\",        \"networks.write\",        \"nodes.read\",        \"nodes.write\"    ]}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Create Role",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/roles",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "roles"
                  ]
                },
                "description": "Create a custom role with specific permissions.**Parameters:**- `name` (required): Role name- `description`: Role description- `permissions`: Array of permission IDs",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"network-manager\",    \"description\": \"Can manage networks and access points\",    \"permissions\": [        \"networks.read\",        \"networks.write\",        \"nodes.read\",        \"nodes.write\"    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"new-role-uuid\",  \"name\": \"network-manager\",  \"description\": \"Can manage networks and access points\",  \"permissions\": [    \"networks.read\",    \"networks.write\",    \"nodes.read\",    \"nodes.write\"  ],  \"is_system\": false}"
            }
          ]
        },
        {
          "name": "Get Role by ID",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const role_id = pm.environment.get('role_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!role_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Get Role by ID');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/roles/{{role_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "roles",
                "{{role_id}}"
              ]
            },
            "description": "Get details of a specific role including all permissions."
          },
          "response": [
            {
              "name": "Get Role by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/roles/{{role_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "roles",
                    "{{role_id}}"
                  ]
                },
                "description": "Get details of a specific role including all permissions."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"role-uuid\",  \"name\": \"network-manager\",  \"description\": \"Can manage networks and access points\",  \"permissions\": [    {      \"id\": \"networks.read\",      \"description\": \"View networks\"    },    {      \"id\": \"networks.write\",      \"description\": \"Create/edit networks\"    },    {      \"id\": \"nodes.read\",      \"description\": \"View access points\"    },    {      \"id\": \"nodes.write\",      \"description\": \"Manage access points\"    }  ]}"
            }
          ]
        },
        {
          "name": "Update Role",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const role_id = pm.environment.get('role_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!role_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update Role');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/roles/{{role_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "roles",
                "{{role_id}}"
              ]
            },
            "description": "Update a custom role's permissions or description.**Note:** System roles cannot be modified.",
            "body": {
              "mode": "raw",
              "raw": "{    \"description\": \"Updated description\",    \"permissions\": [        \"networks.read\",        \"networks.write\",        \"nodes.read\"    ]}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update Role",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/roles/{{role_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "roles",
                    "{{role_id}}"
                  ]
                },
                "description": "Update a custom role's permissions or description.**Note:** System roles cannot be modified.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"description\": \"Updated description\",    \"permissions\": [        \"networks.read\",        \"networks.write\",        \"nodes.read\"    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"role-uuid\",  \"name\": \"network-manager\",  \"description\": \"Updated description\",  \"permissions\": [    \"networks.read\",    \"networks.write\",    \"nodes.read\"  ]}"
            }
          ]
        },
        {
          "name": "Delete Role",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const role_id = pm.environment.get('role_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!role_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete Role');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/roles/{{role_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "roles",
                "{{role_id}}"
              ]
            },
            "description": "Delete a custom role.**Note:** System roles cannot be deleted. Operators with this role will need to be reassigned."
          },
          "response": [
            {
              "name": "Delete Role",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/roles/{{role_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "roles",
                    "{{role_id}}"
                  ]
                },
                "description": "Delete a custom role.**Note:** System roles cannot be deleted. Operators with this role will need to be reassigned."
              },
              "status": "No Content",
              "code": 204,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{}"
            }
          ]
        }
      ]
    },
    {
      "name": "Alert Contacts",
      "description": "Manage contacts for system alerts and notifications.Alert contacts receive notifications for:- Network outages- License expiration warnings- Security events- Scheduled report delivery",
      "item": [
        {
          "name": "Get All Alert Contacts",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get All Alert Contacts');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/alertcontacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "alertcontacts"
              ]
            },
            "description": "List all configured alert contacts."
          },
          "response": [
            {
              "name": "Get All Alert Contacts",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/alertcontacts",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "alertcontacts"
                  ]
                },
                "description": "List all configured alert contacts."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"alertcontacts\": [      {        \"id\": \"contact-uuid-1\",        \"name\": \"IT Admin\",        \"email\": \"admin@company.com\",        \"phone\": \"+1234567890\",        \"alerts\": [          \"outage\",          \"security\"        ]      },      {        \"id\": \"contact-uuid-2\",        \"name\": \"NOC Team\",        \"email\": \"noc@company.com\",        \"alerts\": [          \"outage\"        ]      }    ]  },  \"total_items\": 2}"
            }
          ]
        },
        {
          "name": "Create Alert Contact",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Create Alert Contact');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "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]);",
                  "});",
                  "",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('alert_contact_id', jsonData.id);",
                  "            console.log('Saved alert_contact_id: ' + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/alertcontacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "alertcontacts"
              ]
            },
            "description": "Add a new alert contact.**Parameters:**- `name` (required): Contact name- `email` (required): Email address- `phone` (optional): Phone for SMS alerts- `alerts` (required): Array of alert types to receive",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Network Admin\",    \"email\": \"network-admin@company.com\",    \"phone\": \"+1234567890\",    \"alerts\": [        \"outage\",        \"security\",        \"license\"    ]}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Create Alert Contact",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/alertcontacts",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "alertcontacts"
                  ]
                },
                "description": "Add a new alert contact.**Parameters:**- `name` (required): Contact name- `email` (required): Email address- `phone` (optional): Phone for SMS alerts- `alerts` (required): Array of alert types to receive",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Network Admin\",    \"email\": \"network-admin@company.com\",    \"phone\": \"+1234567890\",    \"alerts\": [        \"outage\",        \"security\",        \"license\"    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"new-contact-uuid\",  \"name\": \"Network Admin\",  \"email\": \"network-admin@company.com\",  \"phone\": \"+1234567890\",  \"alerts\": [    \"outage\",    \"security\",    \"license\"  ]}"
            }
          ]
        },
        {
          "name": "Update Alert Contact",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const alert_contact_id = pm.environment.get('alert_contact_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!alert_contact_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update Alert Contact');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/alertcontacts/{{alert_contact_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "alertcontacts",
                "{{alert_contact_id}}"
              ]
            },
            "description": "Update an existing alert contact.",
            "body": {
              "mode": "raw",
              "raw": "{    \"alerts\": [        \"outage\",        \"security\",        \"license\",        \"report\"    ]}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update Alert Contact",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/alertcontacts/{{alert_contact_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "alertcontacts",
                    "{{alert_contact_id}}"
                  ]
                },
                "description": "Update an existing alert contact.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"alerts\": [        \"outage\",        \"security\",        \"license\",        \"report\"    ]}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"contact-uuid\",  \"name\": \"Network Admin\",  \"email\": \"network-admin@company.com\",  \"alerts\": [    \"outage\",    \"security\",    \"license\",    \"report\"  ]}"
            }
          ]
        },
        {
          "name": "Delete Alert Contact",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const alert_contact_id = pm.environment.get('alert_contact_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!alert_contact_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete Alert Contact');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/alertcontacts/{{alert_contact_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "alertcontacts",
                "{{alert_contact_id}}"
              ]
            },
            "description": "Remove an alert contact."
          },
          "response": [
            {
              "name": "Delete Alert Contact",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/alertcontacts/{{alert_contact_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "alertcontacts",
                    "{{alert_contact_id}}"
                  ]
                },
                "description": "Remove an alert contact."
              },
              "status": "No Content",
              "code": 204,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{}"
            }
          ]
        }
      ]
    },
    {
      "name": "Routes (Static IP)",
      "description": "Manage static IP routes for framed users.Routes define IP address assignments and routing for RADIUS users.",
      "item": [
        {
          "name": "Get All Routes",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get All Routes');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/routes?page={{page}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}"
                }
              ]
            },
            "description": "List all configured static routes."
          },
          "response": [
            {
              "name": "Get All Routes",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/routes?page={{page}}&page_size={{page_size}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "routes"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    }
                  ]
                },
                "description": "List all configured static routes."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"routes\": [      {        \"id\": \"route-uuid-1\",        \"name\": \"Office VLAN\",        \"network\": \"192.168.10.0/24\",        \"gateway\": \"192.168.10.1\"      },      {        \"id\": \"route-uuid-2\",        \"name\": \"Guest VLAN\",        \"network\": \"192.168.20.0/24\",        \"gateway\": \"192.168.20.1\"      }    ]  },  \"total_items\": 2}"
            }
          ]
        },
        {
          "name": "Create Route",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Create Route');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "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]);",
                  "});",
                  "",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        if (jsonData && jsonData.id) {",
                  "            pm.environment.set('route_id', jsonData.id);",
                  "            console.log('Saved route_id: ' + jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        // Response may not be JSON",
                  "    }",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/routes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes"
              ]
            },
            "description": "Create a new static route.**Parameters:**- `name`: Route identifier- `network`: Network address in CIDR notation- `gateway`: Gateway IP address",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"IoT Devices VLAN\",    \"network\": \"192.168.30.0/24\",    \"gateway\": \"192.168.30.1\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Create Route",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/routes",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "routes"
                  ]
                },
                "description": "Create a new static route.**Parameters:**- `name`: Route identifier- `network`: Network address in CIDR notation- `gateway`: Gateway IP address",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"IoT Devices VLAN\",    \"network\": \"192.168.30.0/24\",    \"gateway\": \"192.168.30.1\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"new-route-uuid\",  \"name\": \"IoT Devices VLAN\",  \"network\": \"192.168.30.0/24\",  \"gateway\": \"192.168.30.1\"}"
            }
          ]
        },
        {
          "name": "Update Route",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const route_id = pm.environment.get('route_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!route_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Update Route');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/routes/{{route_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "{{route_id}}"
              ]
            },
            "description": "Update an existing route.",
            "body": {
              "mode": "raw",
              "raw": "{    \"gateway\": \"192.168.30.254\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update Route",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/routes/{{route_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "routes",
                    "{{route_id}}"
                  ]
                },
                "description": "Update an existing route.",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"gateway\": \"192.168.30.254\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"route-uuid\",  \"name\": \"IoT Devices VLAN\",  \"network\": \"192.168.30.0/24\",  \"gateway\": \"192.168.30.254\"}"
            }
          ]
        },
        {
          "name": "Delete Route",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const route_id = pm.environment.get('route_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!route_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}",
                  "",
                  "console.log('Executing: Delete Route');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/routes/{{route_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "{{route_id}}"
              ]
            },
            "description": "Delete a static route."
          },
          "response": [
            {
              "name": "Delete Route",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/routes/{{route_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "routes",
                    "{{route_id}}"
                  ]
                },
                "description": "Delete a static route."
              },
              "status": "No Content",
              "code": 204,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{}"
            }
          ]
        }
      ]
    },
    {
      "name": "Company Settings",
      "description": "Manage company/organization settings and preferences.",
      "item": [
        {
          "name": "Get Company Info",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get Company Info');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/company",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "company"
              ]
            },
            "description": "Retrieve company profile and settings."
          },
          "response": [
            {
              "name": "Get Company Info",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/company",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "company"
                  ]
                },
                "description": "Retrieve company profile and settings."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"company-uuid\",  \"name\": \"Acme Corporation\",  \"contact_email\": \"admin@acme.com\",  \"timezone\": \"America/New_York\",  \"date_format\": \"YYYY-MM-DD\",  \"subscription\": {    \"plan\": \"enterprise\",    \"expires\": \"2025-12-31\",    \"user_limit\": 10000  }}"
            }
          ]
        },
        {
          "name": "Update Company Info",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Update Company Info');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/company",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "company"
              ]
            },
            "description": "Update company profile settings.**Editable fields:**- `name`: Company name- `contact_email`: Primary contact- `timezone`: Default timezone- `date_format`: Date display format",
            "body": {
              "mode": "raw",
              "raw": "{    \"name\": \"Acme Corporation Inc.\",    \"timezone\": \"Europe/London\"}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Update Company Info",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/company",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "company"
                  ]
                },
                "description": "Update company profile settings.**Editable fields:**- `name`: Company name- `contact_email`: Primary contact- `timezone`: Default timezone- `date_format`: Date display format",
                "body": {
                  "mode": "raw",
                  "raw": "{    \"name\": \"Acme Corporation Inc.\",    \"timezone\": \"Europe/London\"}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"company-uuid\",  \"name\": \"Acme Corporation Inc.\",  \"timezone\": \"Europe/London\"}"
            }
          ]
        }
      ]
    },
    {
      "name": "Outgoing Emails",
      "description": "View email delivery history and manage email templates.Track emails sent for:- User welcome messages- Password resets- Voucher delivery- Report delivery- Alert notifications",
      "item": [
        {
          "name": "Get Email History",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "console.log('Executing: Get Email History');"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outgoing-emails?page={{page}}&page_size={{page_size}}&type=welcome",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outgoing-emails"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}"
                },
                {
                  "key": "type",
                  "value": "welcome"
                }
              ]
            },
            "description": "View history of sent emails.**Filters:**- `recipient`: Filter by recipient email- `type`: Email type (welcome, reset, voucher, etc.)- `status`: Delivery status (sent, delivered, bounced, failed)"
          },
          "response": [
            {
              "name": "Get Email History",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/outgoing-emails?page={{page}}&page_size={{page_size}}&type=welcome",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "outgoing-emails"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "{{page}}"
                    },
                    {
                      "key": "page_size",
                      "value": "{{page_size}}"
                    },
                    {
                      "key": "type",
                      "value": "welcome"
                    }
                  ]
                },
                "description": "View history of sent emails.**Filters:**- `recipient`: Filter by recipient email- `type`: Email type (welcome, reset, voucher, etc.)- `status`: Delivery status (sent, delivered, bounced, failed)"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"_embedded\": {    \"emails\": [      {        \"id\": \"email-uuid-1\",        \"recipient\": \"user@example.com\",        \"subject\": \"Welcome to WiFi\",        \"type\": \"welcome\",        \"status\": \"delivered\",        \"sent_at\": \"2024-12-10T10:00:00Z\"      },      {        \"id\": \"email-uuid-2\",        \"recipient\": \"user2@example.com\",        \"subject\": \"Your WiFi Credentials\",        \"type\": \"welcome\",        \"status\": \"sent\",        \"sent_at\": \"2024-12-10T11:00:00Z\"      }    ]  },  \"total_items\": 150}"
            }
          ]
        },
        {
          "name": "Get Email Details",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const email_id = pm.environment.get('email_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!email_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outgoing-emails/{{email_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outgoing-emails",
                "{{email_id}}"
              ]
            },
            "description": "Get details of a specific sent email including delivery status."
          },
          "response": [
            {
              "name": "Get Email Details",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/outgoing-emails/{{email_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "outgoing-emails",
                    "{{email_id}}"
                  ]
                },
                "description": "Get details of a specific sent email including delivery status."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"id\": \"email-uuid\",  \"recipient\": \"user@example.com\",  \"subject\": \"Welcome to WiFi\",  \"type\": \"welcome\",  \"status\": \"delivered\",  \"sent_at\": \"2024-12-10T10:00:00Z\",  \"delivered_at\": \"2024-12-10T10:00:05Z\",  \"opened_at\": \"2024-12-10T10:30:00Z\"}"
            }
          ]
        },
        {
          "name": "Resend Email",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const email_id = pm.environment.get('email_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!email_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Response status is valid', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204, 400, 401, 403, 404, 422]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outgoing-emails/{{email_id}}/resend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outgoing-emails",
                "{{email_id}}",
                "resend"
              ]
            },
            "description": "Resend a previously sent email.**Use cases:**- Email bounced and user provided new address- User didn't receive original email"
          },
          "response": [
            {
              "name": "Resend Email",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/outgoing-emails/{{email_id}}/resend",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "outgoing-emails",
                    "{{email_id}}",
                    "resend"
                  ]
                },
                "description": "Resend a previously sent email.**Use cases:**- Email bounced and user provided new address- User didn't receive original email"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                },
                {
                  "key": "access-control-allow-origin",
                  "value": "*"
                },
                {
                  "key": "date",
                  "value": "Wed, 10 Dec 2025 00:54:02 GMT"
                }
              ],
              "body": "{  \"message\": \"Email queued for resending\",  \"new_email_id\": \"new-email-uuid\"}"
            }
          ]
        }
      ]
    },
    {
      "name": "Customers (Reseller)",
      "description": "Manage reseller customers. These endpoints allow resellers to create, manage, and bill their customers.\n\n**Note:** These endpoints require reseller-level API access.",
      "item": [
        {
          "name": "List all customers",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Response has correct structure', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData).to.have.property('_embedded');",
                  "    pm.expect(jsonData).to.have.property('total_items');",
                  "    pm.expect(jsonData).to.have.property('page');",
                  "    pm.expect(jsonData).to.have.property('page_size');",
                  "});",
                  "",
                  "pm.test('Customers array exists', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData._embedded).to.have.property('customers');",
                  "    pm.expect(jsonData._embedded.customers).to.be.an('array');",
                  "});",
                  "",
                  "pm.test('Pagination values are valid', function () {",
                  "    const jsonData = pm.response.json();",
                  "    pm.expect(jsonData.total_items).to.be.a('number');",
                  "    pm.expect(jsonData.page).to.be.at.least(1);",
                  "    pm.expect(jsonData.page_size).to.be.at.least(1);",
                  "    pm.expect(jsonData.page_size).to.be.at.most(500);",
                  "});",
                  "",
                  "// Store first customer ID for subsequent tests",
                  "if (pm.response.code === 200) {",
                  "    const jsonData = pm.response.json();",
                  "    if (jsonData._embedded.customers && jsonData._embedded.customers.length > 0) {",
                  "        pm.environment.set('customer_id', jsonData._embedded.customers[0].id);",
                  "        console.log('Stored customer_id:', jsonData._embedded.customers[0].id);",
                  "    }",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/customers?page={{page}}&page_size={{page_size}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "{{page}}",
                  "description": "Page number (default: 1)"
                },
                {
                  "key": "page_size",
                  "value": "{{page_size}}",
                  "description": "Items per page (default: 25, max: 500)"
                },
                {
                  "key": "sort",
                  "value": "creationdate",
                  "description": "Sort by: company_name, creationdate, region, total_users, total_aps, username",
                  "disabled": true
                }
              ]
            },
            "description": "Retrieve a paginated list of all customers belonging to the reseller.\n\n**Sortable fields:**\n- `company_name` - Customer company name\n- `creationdate` - Account creation date\n- `region` - Deployment region\n- `total_users` - Number of RADIUS users\n- `total_aps` - Number of access points\n- `username` - Customer email/username"
          },
          "response": [
            {
              "name": "List all customers",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/customers?page=1&page_size=25",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "page_size",
                      "value": "25"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "{\n  \"_embedded\": {\n    \"customers\": [\n      {\n        \"id\": \"customer-uuid-1\",\n        \"company_name\": \"Acme Corp\",\n        \"username\": \"admin@acme.com\",\n        \"creationdate\": \"2024-01-15T10:30:00Z\",\n        \"region\": \"us-central1\",\n        \"plan\": \"ap_based_monthly_201902\",\n        \"plan_quantity\": 10,\n        \"total_users\": 150,\n        \"total_aps\": 8,\n        \"total_venues\": 2,\n        \"billing_method\": \"separate\"\n      }\n    ]\n  },\n  \"total_items\": 1,\n  \"page\": 1,\n  \"page_size\": 25,\n  \"page_count\": 1\n}"
            }
          ]
        },
        {
          "name": "Get customer by ID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Response has customer data', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property('id');",
                  "        pm.expect(jsonData).to.have.property('company_name');",
                  "        pm.expect(jsonData).to.have.property('username');",
                  "    });",
                  "",
                  "    pm.test('Customer ID matches request', function () {",
                  "        const jsonData = pm.response.json();",
                  "        const requestedId = pm.environment.get('customer_id');",
                  "        pm.expect(jsonData.id).to.equal(requestedId);",
                  "    });",
                  "}",
                  "",
                  "if (pm.response.code === 404) {",
                  "    pm.test('Not found response has error details', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData).to.have.property('status');",
                  "        pm.expect(jsonData.status).to.equal(404);",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const customer_id = pm.environment.get('customer_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!customer_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/customers/{{customer_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers",
                "{{customer_id}}"
              ]
            },
            "description": "Retrieve details for a specific customer by ID, company name, or username."
          },
          "response": [
            {
              "name": "Get customer by ID",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/customers/{{customer_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "{{customer_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "{\n  \"id\": \"customer-uuid-1\",\n  \"company_name\": \"Acme Corp\",\n  \"username\": \"admin@acme.com\",\n  \"creationdate\": \"2024-01-15T10:30:00Z\",\n  \"region\": \"us-central1\",\n  \"plan\": \"ap_based_monthly_201902\",\n  \"plan_quantity\": 10,\n  \"total_users\": 150,\n  \"total_aps\": 8,\n  \"billing_method\": \"separate\",\n  \"stripe_subscription_id\": \"sub_xxx\"\n}"
            },
            {
              "name": "Customer not found",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/customers/invalid-id",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "invalid-id"
                  ]
                }
              },
              "status": "Not Found",
              "code": 404,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"Not Found\"\n}"
            }
          ]
        },
        {
          "name": "Create customer",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is valid\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201, 400, 403, 409, 422]);",
                  "});",
                  "",
                  "if (pm.response.code === 201 || pm.response.code === 200) {",
                  "    try {",
                  "        const jsonData = pm.response.json();",
                  "        pm.test(\"Response has new customer ID\", function () {",
                  "            pm.expect(jsonData).to.have.property(\"id\");",
                  "            pm.expect(jsonData.id).to.be.a(\"string\");",
                  "        });",
                  "",
                  "        if (jsonData.username) {",
                  "            pm.test(\"Customer has correct username\", function () {",
                  "                pm.expect(jsonData.username).to.include(\"@\");",
                  "            });",
                  "        }",
                  "",
                  "        // Store created customer ID for cleanup",
                  "        if (jsonData.id) {",
                  "            pm.environment.set(\"created_customer_id\", jsonData.id);",
                  "            console.log(\"Created customer:\", jsonData.id);",
                  "        }",
                  "    } catch (e) {",
                  "        console.log(\"Response not JSON:\", e.message);",
                  "    }",
                  "}",
                  "",
                  "if (pm.response.code === 409) {",
                  "    pm.test(\"Conflict response indicates duplicate\", function () {",
                  "        try {",
                  "            const jsonData = pm.response.json();",
                  "            pm.expect(jsonData.status).to.equal(409);",
                  "        } catch (e) {",
                  "            // Response may not be JSON",
                  "        }",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Generate unique email to avoid conflicts",
                  "const timestamp = Date.now();",
                  "const testEmail = `test-customer-${timestamp}@postman-test.com`;",
                  "pm.environment.set('test_customer_email', testEmail);",
                  "console.log('Generated test email:', testEmail);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"username\": \"{{test_customer_email}}\",\n    \"company_name\": \"Postman Test Company\",\n    \"plan\": \"14_days_trial\",\n    \"region\": \"us-central1\",\n    \"billing_method\": \"separate\",\n    \"currency\": \"usd\",\n    \"timezone\": \"America/New_York\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers"
              ]
            },
            "description": "Create a new customer account.\n\n**Required fields:**\n- `username` - Customer email address (must be unique)\n- `company_name` - Customer's company name\n- `plan` - Subscription plan ID\n\n**Optional fields:**\n- `region` - Deployment region (default: reseller's region)\n- `billing_method` - 'separate' or 'consolidated' (default: separate)\n- `currency` - 'usd', 'eur', or 'gbp' (default: usd)\n- `timezone` - Timezone for reports\n- `welcome_email` - Send welcome email (boolean)\n- `phone` - Customer phone number\n- `max_aps` - Max access points (for usage-based plans)\n- `max_users` - Max RADIUS users (for usage-based plans)\n\n**Available plans:**\n- Trial: `14_days_trial`, `17_days_trial`\n- Free: `10`\n- Usage-based: `ap_based_201902`, `user_based_201902`, `ap_based_monthly_201902`, `user_based_monthly_201902`"
          },
          "response": [
            {
              "name": "Create customer - Success",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n    \"username\": \"new-customer@example.com\",\n    \"company_name\": \"New Customer Corp\",\n    \"plan\": \"14_days_trial\",\n    \"region\": \"us-central1\",\n    \"billing_method\": \"separate\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/customers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "{\n  \"id\": \"new-customer-uuid\",\n  \"username\": \"new-customer@example.com\",\n  \"company_name\": \"New Customer Corp\",\n  \"plan\": \"14_days_trial\",\n  \"region\": \"us-central1\",\n  \"billing_method\": \"separate\",\n  \"creationdate\": \"2024-12-10T12:00:00Z\"\n}"
            },
            {
              "name": "Create customer - Duplicate email",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n    \"username\": \"existing@example.com\",\n    \"company_name\": \"Duplicate Corp\",\n    \"plan\": \"14_days_trial\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/customers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers"
                  ]
                }
              },
              "status": "Conflict",
              "code": 409,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Conflict\",\n  \"status\": 409,\n  \"detail\": \"Email address already exists\"\n}"
            }
          ]
        },
        {
          "name": "Update customer",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Status code is 200 or 403 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 403, 404]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Update was successful', function () {",
                  "        // PATCH typically returns true/success indicator",
                  "        pm.expect(pm.response.text()).to.not.be.empty;",
                  "    });",
                  "}",
                  "",
                  "if (pm.response.code === 403) {",
                  "    pm.test('Access denied response', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData.status).to.equal(403);",
                  "    });",
                  "}",
                  "",
                  "if (pm.response.code === 404) {",
                  "    pm.test('Customer not found', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData.status).to.equal(404);",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const customer_id = pm.environment.get('customer_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!customer_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"company_name\": \"Updated Company Name\",\n    \"reseller_notes\": \"Updated via API\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/customers/{{customer_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers",
                "{{customer_id}}"
              ]
            },
            "description": "Update an existing customer's details.\n\n**Updatable fields:**\n- `company_name` - Company display name\n- `reseller_notes` - Internal notes for reseller\n- `username` - Email address (must be unique)\n- `region` - Deployment region\n- `plan` - Subscription plan (triggers billing changes)\n- `plan_quantity` - Quantity for usage-based plans\n- `billing_method` - 'separate' or 'consolidated'\n- `billing` - 'charge_automatically' or 'send_invoice'\n\n**Special operations:**\n- Set `reseller: ''` to release customer from reseller"
          },
          "response": [
            {
              "name": "Update customer - Success",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n    \"company_name\": \"Updated Company Name\",\n    \"reseller_notes\": \"Updated via API\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/customers/{{customer_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "{{customer_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "true"
            }
          ]
        },
        {
          "name": "Update customer plan",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Status code is 200 or error', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 402, 403, 404, 422]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Plan update was successful', function () {",
                  "        pm.expect(pm.response.text()).to.not.be.empty;",
                  "    });",
                  "}",
                  "",
                  "if (pm.response.code === 402) {",
                  "    pm.test('Payment required - check Stripe setup', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData.status).to.equal(402);",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const customer_id = pm.environment.get('customer_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!customer_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"plan\": \"ap_based_monthly_201902\",\n    \"plan_quantity\": 5,\n    \"max_aps\": 5,\n    \"currency\": \"usd\",\n    \"billing\": \"charge_automatically\",\n    \"purchase_price\": 65\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/customers/{{customer_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers",
                "{{customer_id}}"
              ]
            },
            "description": "Change a customer's subscription plan.\n\n**For usage-based plans, include:**\n- `plan` - New plan ID\n- `plan_quantity` - Number of units\n- `max_aps` or `max_users` - Limit matching the plan type\n- `currency` - Currency for billing\n- `purchase_price` - Expected price (for verification)\n- `billing` - Billing method\n\n**Plan change behavior:**\n- Cancels existing subscription\n- Creates new subscription with new plan\n- Prorates charges automatically"
          },
          "response": [
            {
              "name": "Update customer plan - Success",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n    \"plan\": \"ap_based_monthly_201902\",\n    \"plan_quantity\": 5,\n    \"max_aps\": 5,\n    \"currency\": \"usd\",\n    \"billing\": \"charge_automatically\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/customers/{{customer_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "{{customer_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "true"
            }
          ]
        },
        {
          "name": "Change billing method",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Status code is 200 or error', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 402, 403, 404]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Billing method change was successful', function () {",
                  "        pm.expect(pm.response.text()).to.not.be.empty;",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const customer_id = pm.environment.get('customer_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!customer_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"billing_method\": \"consolidated\",\n    \"plan\": \"ap_based_monthly_201902\",\n    \"plan_quantity\": 5,\n    \"currency\": \"usd\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/customers/{{customer_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers",
                "{{customer_id}}"
              ]
            },
            "description": "Change customer billing method between 'separate' and 'consolidated'.\n\n**Billing methods:**\n- `separate` - Customer has own Stripe subscription (billed individually)\n- `consolidated` - Customer shares reseller's subscription (billed together)\n\n**Note:** Changing billing method cancels the old subscription and creates a new one with the new method."
          },
          "response": [
            {
              "name": "Change billing method - Success",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n    \"billing_method\": \"consolidated\",\n    \"plan\": \"ap_based_monthly_201902\",\n    \"plan_quantity\": 5\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/customers/{{customer_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "{{customer_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "true"
            }
          ]
        },
        {
          "name": "Release customer from reseller",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Status code is 200 or error', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 403, 404]);",
                  "});",
                  "",
                  "if (pm.response.code === 200) {",
                  "    pm.test('Customer released successfully', function () {",
                  "        pm.expect(pm.response.text()).to.not.be.empty;",
                  "    });",
                  "    console.log('Customer released from reseller');",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const customer_id = pm.environment.get('customer_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!customer_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"reseller\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/customers/{{customer_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers",
                "{{customer_id}}"
              ]
            },
            "description": "Release a customer from reseller management.\n\n**Effects:**\n- Cancels current Stripe subscription\n- Removes reseller permissions\n- Sets customer plan to 14-day trial\n- Customer becomes independent\n\n**Note:** This action cannot be undone. The customer will need to be re-added manually."
          },
          "response": [
            {
              "name": "Release customer - Success",
              "originalRequest": {
                "method": "PATCH",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n    \"reseller\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{baseUrl}}/customers/{{customer_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "{{customer_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/hal+json"
                }
              ],
              "body": "true"
            }
          ]
        },
        {
          "name": "Delete customer",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "// Check if test should be skipped due to missing dependencies",
                  "if (pm.variables.get('_skip_test')) {",
                  "    pm.test.skip('Skipped: dependency not available');",
                  "    return;",
                  "}",
                  "",
                  "pm.test('Status code is 204 or error', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([204, 403, 404]);",
                  "});",
                  "",
                  "if (pm.response.code === 204) {",
                  "    pm.test('Customer deleted successfully', function () {",
                  "        // 204 No Content is expected",
                  "        pm.expect(pm.response.text()).to.be.empty;",
                  "    });",
                  "    console.log('Customer deleted');",
                  "}",
                  "",
                  "if (pm.response.code === 403) {",
                  "    pm.test('Access denied response', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData.status).to.equal(403);",
                  "    });",
                  "}",
                  "",
                  "if (pm.response.code === 404) {",
                  "    pm.test('Customer not found', function () {",
                  "        const jsonData = pm.response.json();",
                  "        pm.expect(jsonData.status).to.equal(404);",
                  "    });",
                  "}"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "// Check required variables before running test",
                  "const created_customer_id = pm.environment.get('created_customer_id');",
                  "",
                  "// Skip test if any required variable is missing or empty",
                  "if (!created_customer_id) {",
                  "    console.warn('Skipping test: Required variable(s) not set from previous test');",
                  "    // Set a flag that test script can check",
                  "    pm.variables.set('_skip_test', true);",
                  "}"
                ],
                "type": "text/javascript",
                "packages": {}
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/customers/{{created_customer_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "customers",
                "{{created_customer_id}}"
              ]
            },
            "description": "Delete a customer account.\n\n**This action:**\n- Cancels all Stripe subscriptions\n- Removes customer from all regions\n- Deletes company record\n- Removes RBAC permissions\n\n**Warning:** This action is irreversible. All customer data will be permanently deleted across all regions."
          },
          "response": [
            {
              "name": "Delete customer - Success",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/customers/{{customer_id}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "{{customer_id}}"
                  ]
                }
              },
              "status": "No Content",
              "code": 204,
              "_postman_previewlanguage": "text",
              "header": [],
              "body": ""
            },
            {
              "name": "Delete customer - Access denied",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/customers/not-your-customer",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "customers",
                    "not-your-customer"
                  ]
                }
              },
              "status": "Forbidden",
              "code": 403,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "content-type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\",\n  \"title\": \"Forbidden\",\n  \"status\": 403,\n  \"detail\": \"Access denied\"\n}"
            }
          ]
        }
      ]
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{auth_bearer_token}}",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "exec": [
          "// Automatic Bearer token handling",
          "const token = pm.environment.get('auth_bearer_token') || pm.environment.get('auth_bearer_token');",
          "if (token) {",
          "    pm.request.headers.add({",
          "        key: 'Authorization',",
          "        value: 'Bearer ' + token",
          "    });",
          "}",
          "",
          "// Add Content-Type header for requests with body",
          "if (pm.request.body && pm.request.body.raw) {",
          "    pm.request.headers.add({",
          "        key: 'Content-Type',",
          "        value: 'application/json'",
          "    });",
          "}",
          "",
          "// Log request for debugging",
          "console.log('Request:', pm.request.method, pm.request.url.toString());"
        ],
        "type": "text/javascript"
      }
    },
    {
      "listen": "test",
      "script": {
        "exec": [
          "// Common response validation",
          "pm.test(\"Response time is acceptable\", function() {",
          "    // Allow up to 30 seconds for bulk/complex operations",
          "    pm.expect(pm.response.responseTime).to.be.below(30000);",
          "});",
          "",
          "// Log response status for debugging",
          "console.log(\"Response:\", pm.response.code, pm.response.status);",
          "",
          "// Handle common error responses",
          "if (pm.response.code === 401) {",
          "    console.error(\"Authentication failed - check your API token\");",
          "}",
          "if (pm.response.code === 429) {",
          "    const retryAfter = pm.response.headers.get(\"Retry-After\");",
          "    console.warn(\"Rate limited - retry after:\", retryAfter, \"seconds\");",
          "}"
        ],
        "type": "text/javascript"
      }
    }
  ],
  "variable": [
    {
      "key": "page",
      "value": "1",
      "description": "Page number for paginated results"
    },
    {
      "key": "page_size",
      "value": "25",
      "description": "Number of items per page (default: 25, max: 100)"
    },
    {
      "key": "filter",
      "value": "",
      "description": "Filter expression (e.g., name:test)"
    },
    {
      "key": "sort",
      "value": "",
      "description": "Sort field and direction (e.g., name:asc)"
    },
    {
      "key": "format",
      "value": "",
      "description": "Response format (json, csv)"
    },
    {
      "key": "earliest",
      "value": "-7d",
      "description": "Start time for reports (e.g., -7d, -24h, 2024-01-01)"
    },
    {
      "key": "latest",
      "value": "now",
      "description": "End time for reports (e.g., now, -1h, 2024-01-31)"
    },
    {
      "key": "network_id",
      "value": "",
      "description": "ID of the network (auto-populated after Add network)"
    },
    {
      "key": "user_id",
      "value": "",
      "description": "ID of the user (auto-populated after Add user)"
    },
    {
      "key": "group_id",
      "value": "",
      "description": "ID of the group (auto-populated after Add group)"
    },
    {
      "key": "captive_portal_id",
      "value": "",
      "description": "ID of the captive portal"
    },
    {
      "key": "voucher_id",
      "value": "",
      "description": "ID of the voucher"
    },
    {
      "key": "voucher_code",
      "value": "",
      "description": "Voucher code for redemption"
    },
    {
      "key": "voucher_series",
      "value": "",
      "description": "Series identifier for batch voucher operations"
    },
    {
      "key": "certificate_id",
      "value": "",
      "description": "ID of the certificate"
    },
    {
      "key": "certificate_path_id",
      "value": "",
      "description": "Certificate path identifier"
    },
    {
      "key": "connector_id",
      "value": "",
      "description": "ID of the connector"
    },
    {
      "key": "device_id",
      "value": "",
      "description": "ID of the device"
    },
    {
      "key": "employee_id",
      "value": "",
      "description": "ID of the employee"
    },
    {
      "key": "fleet_id",
      "value": "",
      "description": "ID of the fleet"
    },
    {
      "key": "guest_id",
      "value": "",
      "description": "ID of the guest"
    },
    {
      "key": "guest_profile_id",
      "value": "",
      "description": "ID of the guest profile"
    },
    {
      "key": "node_id",
      "value": "",
      "description": "ID of the access point/node"
    },
    {
      "key": "org_unit_id",
      "value": "",
      "description": "ID of the organization unit"
    },
    {
      "key": "theme_id",
      "value": "",
      "description": "ID of the theme"
    },
    {
      "key": "translation_id",
      "value": "",
      "description": "ID of the translation"
    },
    {
      "key": "tariff_id",
      "value": "",
      "description": "ID of the tariff"
    },
    {
      "key": "tariff_group_id",
      "value": "",
      "description": "ID of the tariff group"
    },
    {
      "key": "venue_id",
      "value": "",
      "description": "ID of the venue"
    },
    {
      "key": "vehicle_id",
      "value": "",
      "description": "ID of the vehicle"
    },
    {
      "key": "customer_id",
      "value": "",
      "description": "ID of the customer (reseller customer)"
    },
    {
      "key": "created_customer_id",
      "value": "",
      "description": "ID of customer created during tests (for cleanup)"
    },
    {
      "key": "test_customer_email",
      "value": "",
      "description": "Generated unique email for customer creation tests"
    },
    {
      "key": "configuration_id",
      "value": "",
      "description": "ID of the configuration"
    },
    {
      "key": "attribute_id",
      "value": "",
      "description": "ID of the attribute"
    },
    {
      "key": "shared_file_id",
      "value": "",
      "description": "ID of the shared file"
    },
    {
      "key": "variable_id",
      "value": "",
      "description": "ID of the variable"
    },
    {
      "key": "scheduled_report_id",
      "value": "",
      "description": "ID of the scheduled report"
    },
    {
      "key": "share_code",
      "value": "",
      "description": "Share code for sharing resources"
    },
    {
      "key": "username",
      "value": "",
      "description": "Username for user lookup"
    },
    {
      "key": "token_id",
      "value": "",
      "description": "ID of the API token"
    },
    {
      "key": "report_id",
      "value": "110",
      "description": "Report type ID (110=auth logs, 111=accounting, etc.)"
    },
    {
      "key": "user_group_id",
      "value": "",
      "description": "ID of the user-group relationship"
    },
    {
      "key": "task_name",
      "value": "",
      "description": "Name of async task to check status"
    },
    {
      "key": "type",
      "value": "",
      "description": "Type filter for resources"
    },
    {
      "key": "table",
      "value": "",
      "description": "Table name for export operations"
    },
    {
      "key": "delete_users",
      "value": "false",
      "description": "Whether to delete associated users"
    },
    {
      "key": "include_share_codes",
      "value": "false",
      "description": "Include share codes in response"
    },
    {
      "key": "splash_url",
      "value": "",
      "description": "Splash page URL for captive portal testing"
    },
    {
      "key": "workflow_group_id",
      "value": "",
      "description": "Temp variable for workflow examples"
    },
    {
      "key": "workflow_user_id",
      "value": "",
      "description": "Temp variable for workflow examples"
    },
    {
      "key": "workflow_voucher_series",
      "value": "",
      "description": "Temp variable for workflow examples"
    },
    {
      "key": "api_key_id",
      "value": "",
      "description": "ID of the API key"
    },
    {
      "key": "auth_provider_id",
      "value": "",
      "description": "ID of the authentication provider"
    },
    {
      "key": "group_attribute_id",
      "value": "",
      "description": "ID of the group attribute"
    },
    {
      "key": "group_unit_mapping_id",
      "value": "",
      "description": "ID of the group-unit mapping"
    },
    {
      "key": "hotspot_plan_id",
      "value": "",
      "description": "ID of the hotspot plan"
    },
    {
      "key": "ticket_id",
      "value": "",
      "description": "ID of the support ticket"
    },
    {
      "key": "profile_uuid",
      "value": "",
      "description": "UUID of the generated profile"
    },
    {
      "key": "ldap_password",
      "value": "",
      "description": "LDAP bind password (set in environment)"
    },
    {
      "key": "bulk_job_id",
      "value": "",
      "description": "ID of bulk operation job"
    },
    {
      "key": "vendor_id",
      "value": "",
      "description": "RADIUS vendor ID"
    },
    {
      "key": "role_id",
      "value": "",
      "description": "Role ID for RBAC"
    },
    {
      "key": "alert_contact_id",
      "value": "",
      "description": "Alert contact ID"
    },
    {
      "key": "route_id",
      "value": "",
      "description": "Static route ID"
    },
    {
      "key": "email_id",
      "value": "",
      "description": "Outgoing email ID"
    },
    {
      "key": "setup_network_id",
      "value": "",
      "description": "Workflow: network ID"
    },
    {
      "key": "setup_group_id",
      "value": "",
      "description": "Workflow: group ID"
    },
    {
      "key": "setup_portal_id",
      "value": "",
      "description": "Workflow: portal ID"
    },
    {
      "key": "sso_connector_id",
      "value": "",
      "description": "Workflow: SSO connector ID"
    },
    {
      "key": "sso_auth_provider_id",
      "value": "",
      "description": "Workflow: SSO auth provider ID"
    },
    {
      "key": "cert_ca_id",
      "value": "",
      "description": "Workflow: CA certificate ID"
    },
    {
      "key": "cert_client_id",
      "value": "",
      "description": "Workflow: Client certificate ID"
    },
    {
      "key": "azure_client_secret",
      "value": "",
      "description": "Azure AD client secret (set in environment)"
    }
  ]
}
