{
  "openapi": "3.0.3",
  "info": {
    "title": "SmartOLT API",
    "version": "1.0",
    "description": "# SmartOLT API\n\n**Machine-readable version (OpenAPI, for tools and AI assistants):** [https://www.smartolt.com/openapi.json](https://www.smartolt.com/openapi.json)\n\n---\n\n## 🔴 The API changed. Please read this page again.\n\n#### Updated October 2026. Check your integration against these changes:\n\n- **🆕 Real-time events.** Get ONU status changes, ONU changes, signal changes and PON outages when they occur. Use an event stream (SSE) or a webhook. You do not need to poll the API. See **Real-time events** below.\n- **⚡ Asynchronous calls for high-volume actions.** Send `async=1` to enable or disable ONUs, change CATV or change speed profiles. The request does not wait for the OLT. See **Asynchronous calls** below.\n- **📦 Bulk actions.** One bulk call can contain up to **10,000 ONU IDs** with `async=1`. Do not send one call for each ONU. See **Recommended API usage** below.\n- **🆕 ONU status history.** Get how long an ONU was Online, LOS, Power fail or Offline, for up to 365 days. See **Get ONU status history by ONU unique external ID**.\n- **🆕 MAC addresses.** Get the MAC addresses behind an ONU, or find the ONU of a MAC address. See **Get ONU MAC addresses by ONU unique external ID** and **Search ONU by MAC address**.\n\n#### ⚠️ If your system polls Get all ONUs statuses or Get all ONUs signals, change it to use real-time events.\n\n---\n\n## How to call the API\n\n- Send each request to `https://<your-subdomain>.smartolt.com/api/...`.\n- Send your API key in the `X-Token` header.\n- Every response has `status`. When `status` is `false`, read `error` for the message and `error_code` for the reason, when it is present.\n\n## Limits\n\n#### API access is a privilege. Use it responsibly.\n\n- The default budget is **1,000 API calls per hour**. For very large installations, we can review and extend the budget if the operational requirements justify it.\n- Asynchronous calls have their own budget, by default **5,000 calls per hour**.\n- The default limit is **15 calls per second**. If you send more, all your calls are blocked for 10 seconds.\n- Some endpoints have their own hourly limit. The description of the endpoint gives it.\n- When you are over a limit, the API returns HTTP **429** with the error code `rate_limit_exceeded` and a `Retry-After` header. Wait that number of seconds before you call again.\n- Each response has `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` headers. `X-RateLimit-Reset` is the number of seconds until the budget resets.\n\nIf you use the API too much, SmartOLT can limit your calls or revoke your API access.\n\n#### **Do not use the API as a live database.** Store the data that you use again in your system, and do not send the same request again and again.\n\n#### **Add a random delay to scheduled requests.** For example, do not send a request exactly every 5 minutes at fixed times. Add a small random delay to each call, so that many systems do not call the API at the same time.\n\n## Real-time events (new)\n\nGet ONU and PON events when they occur. You do not need to poll the API.\n\n- **Event stream (SSE):** your system keeps one connection open, and the events arrive on it.\n- **Webhook:** SmartOLT sends each batch of events as an HTTPS POST to your URL. Set it up in **General > API key > Edit > Webhook**.\n\nEvent types: `onu.status_changed`, `onu.authorized`, `onu.updated`, `onu.deleted`, `onu.signal_changed`, `onu.signal_reading`, `pon.outage_started`, `pon.outage_ended`,`onu.unconfigured_detected`. See the **Real-time events** folder.\n\n## Asynchronous calls (recommended for high-volume actions)\n\n**For high-volume actions, use asynchronous calls.** Use them to enable ONUs, disable ONUs, change CATV or change speed profiles on many ONUs. Send `async=1` with the request. SmartOLT checks the request, puts the work in a queue and returns immediately. The request does not wait for the OLT.\n\nThese endpoints accept `async=1`:\n\n- Single ONU: [`enable`](#enable_onu_by_onu_unique_external_id), [`disable`](#disable_onu_by_onu_unique_external_id), [`enable_catv`](#enable_onu_catv_by_onu_unique_external_id), [`disable_catv`](#disable_onu_catv_by_onu_unique_external_id), [`update_onu_speed_profiles`](#update_onu_speed_profiles_by_onu_unique_external_id)\n- Multiple ONUs: [`bulk_enable`](#enable_multiple_onus_by_onu_unique_external_ids), [`bulk_disable`](#disable_multiple_onus_by_onu_unique_external_ids), [`bulk_enable_catv`](#enable_multiple_onus_catv_by_onu_unique_external_ids), [`bulk_disable_catv`](#disable_multiple_onus_catv_by_onu_unique_external_ids), [`bulk_update_speed_profiles`](#update_multiple_onus_speed_profiles_by_onu_unique_external_ids)\n\n[`bulk_apply_configuration_preset`](#apply_configuration_preset_on_multiple_onus_by_onu_unique_external_ids) and [`bulk_remove_configuration_preset`](#remove_configuration_preset_from_multiple_onus_by_onu_unique_external_ids) are always asynchronous. They also use the asynchronous budget.\n\n**Why use asynchronous calls:**\n\n- The request returns immediately. A normal request waits until the OLT finishes the command.\n- A bulk call accepts up to **10,000 ONU IDs** with `async=1`, and only up to **50 ONU IDs** without `async=1`.\n- Asynchronous calls use their own hourly budget, not the normal budget.\n- SmartOLT runs all actions for one ONU in the order it received them.\n\n**How to use asynchronous calls:**\n\n1. Send the request with `async=1`.\n2. Read the `queued` field in the response. It shows which ONUs SmartOLT queued.\n3. Some minutes later, call [`check_bulk_task_status`](#check_bulk_task_status) to see the result for each ONU. Do not call it in a tight loop. Each status check counts in the normal hourly budget.\n\n**Important:** `\"queued\": true` means that SmartOLT accepted the action. It does not mean that the OLT did it. A request without `async=1` can also return `\"queued\": true` when the ONU already has queued actions. Do not mark the action as done until [`check_bulk_task_status`](#check_bulk_task_status) shows `succeeded`.\n\n## Recommended API usage\n\n- **ONU statuses**\n  - Use the `onu.status_changed` real-time event.\n  - If you cannot use events, call [Get all ONUs statuses](#get_all_onus_statuses) every **5-7 minutes**, and store the response between calls.\n- **ONU signal levels**\n  - Use the `onu.signal_reading` or `onu.signal_changed` real-time events. These events give the 1310 value only.\n  - Call [Get all ONUs signals](#get_all_onus_signals) at start-up, after a `resync` event, or when you need the 1490 value. If you cannot use events, call it every **15-30 minutes**, and store the response between calls.\n- **High-volume actions** (enable, disable, CATV, speed profiles on many ONUs)\n  - Use one bulk call with `async=1` for up to **10,000 ONU IDs**. Without `async=1`, a bulk call can only contain up to 50 ONU IDs.\n  - Do not send one call for each ONU.\n\n#### **Important:** Do not poll individual ONUs again and again when a bulk endpoint or a real-time event gives the same data. Your integration must store data, use reasonable polling intervals and use bulk calls. If your integration uses the API too much, SmartOLT can limit its calls to protect the platform for all users."
  },
  "servers": [
    {
      "url": "https://{subdomain}.smartolt.com",
      "variables": {
        "subdomain": {
          "default": "yourcompany",
          "description": "Your SmartOLT subdomain"
        }
      }
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "tags": [
    {
      "name": "Real-time events",
      "description": "Get ONU and PON events in real time. You do not need to poll the API.\n\nYou can get the events in two ways:\n\n- **Event stream (SSE)**: your system keeps one HTTP connection open, and the events arrive on it. See *Get event stream URL*.\n- **Webhook**: SmartOLT sends each batch of events as an HTTPS POST to your URL. See *Webhook delivery*.\n\nBoth ways send the same event body:\n\n```\n{\"type\": \"onu.status_changed\", \"timestamp\": \"2026-10-08T10:00:00Z\", \"data\": {\"onus\": [ ... ]}}\n```\n\nONU events put the rows in `data.onus`. PON events put the rows in `data.pons`. One batch has one event type and up to 1000 rows.\n\nEvent types:\n\n- `onu.status_changed`: the ONU status changed (Online, LOS, Power fail, Offline).\n- `onu.authorized`: an ONU was authorized.\n- `onu.updated`: the configuration or details of an ONU changed. You get the full current ONU row.\n- `onu.deleted`: an ONU was deleted.\n- `onu.signal_changed`: the ONU signal moved to another band, or changed by 2 dB or more.\n- `onu.signal_reading`: each new ONU signal reading.\n- `pon.outage_started`: a PON outage started.\n- `pon.outage_ended`: a PON outage ended.\n- `onu.unconfigured_detected`: a new ONU appeared in the Unconfigured list of an OLT. Disabled ONUs are not sent. An ONU that leaves the list and comes back within 15 minutes is not sent again.\n\nOnly API keys that you create in SmartOLT can use events.",
      "x-postman-id": "d2c498e2-01cc-4953-93f4-84c791f2072e"
    },
    {
      "name": "API endpoints",
      "description": "SmartOLT API requests in collection order."
    }
  ],
  "paths": {
    "/api/onu/get_event_stream": {
      "get": {
        "tags": [
          "Real-time events"
        ],
        "summary": "Get event stream URL",
        "operationId": "get_event_stream_url",
        "x-postman-id": "d3c00181-9877-49ed-aa7b-b5a155f08c73",
        "x-postman-order": 0,
        "description": "Gets a URL for a live event stream (Server-Sent Events). Open the URL with any SSE client, for example `EventSource` or `curl -N`.\n\n**How to use it**\n\n1. Call this endpoint. Select the event types with `events`.\n2. Open the returned `url` within `expires_in` seconds (15 minutes).\n3. Read the events. Each event has an `id`, an `event` (the event type) and a `data` line with the event body.\n4. The stream closes after about 1 hour. Then call this endpoint again and open the new URL. Send the last `id` you got in the `Last-Event-ID` header. You then get the events that you missed.\n\n**Control events**\n\n- `resync`: you missed events. Load the current data again, for example with *Get all ONUs statuses*.\n- `expired`: the stream is closed. Get a new URL.\n- `disabled`: the stream is closed because the API key was disabled or changed. Get a new URL.\n- A `: ping` comment comes every 25 seconds to keep the connection open.\n\n**Limits**\n\n- You can call this endpoint up to 60 times per hour.\n- Each account can have up to 15 open streams for API keys.\n\nIt returns a 400 error code when `events` contains an unknown event type.\n\nIt returns a 403 error code when the API key is not a client API key.\n\nIt returns a 503 error code when the event stream is not available. Use *Get all ONUs statuses* until it is available again.",
        "parameters": [
          {
            "name": "events",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "onu.status_changed,pon.outage_started,pon.outage_ended"
            },
            "description": "(String) The event types to get, separated by commas. Leave it empty to get only `onu.status_changed`. Known types: onu.status_changed, onu.authorized, onu.updated, onu.deleted, onu.signal_changed, onu.signal_reading, pon.outage_started, pon.outage_ended"
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "url": "https://example.smartolt.com:8443/onu-status/stream?token=eyJkYiI6...",
                        "expires_in": 900
                      },
                      "response_code": "success"
                    }
                  }
                }
              },
              "text/plain": {
                "examples": {
                  "200_stream_content_open_the_returned_url": {
                    "summary": "200 - Stream content (open the returned url)",
                    "value": "retry: 15000\n\nid: 1728381600123-0\nevent: onu.status_changed\ndata: {\"type\":\"onu.status_changed\",\"timestamp\":\"2026-10-08T10:00:01Z\",\"data\":{\"onus\":[{\"unique_external_id\":\"ext-1001\",\"sn\":\"HWTC00000015\",\"olt_id\":\"1\",\"board\":\"0\",\"port\":\"5\",\"onu\":\"15\",\"zone_id\":\"5\",\"name\":\"John Doe\",\"address\":\"Main St 1\",\"contact\":\"+1555\",\"odb_id\":null,\"status\":\"LOS\",\"last_status_change\":\"2026-10-08 10:00:00.123456\",\"status_observed_at\":\"2026-10-08 10:00:01\"}]}}\n\n: ping\n\nid: 1728381720456-0\nevent: pon.outage_started\ndata: {\"type\":\"pon.outage_started\",\"timestamp\":\"2026-10-08T10:02:00Z\",\"data\":{\"pons\":[{\"alert_kind\":\"full_outage\",\"olt_id\":\"11\",\"olt_name\":\"OLT 11\",\"board\":\"2\",\"port\":\"3\",\"total_onus\":\"8\",\"los_count\":\"8\",\"power_count\":\"0\",\"offline_count\":\"0\",\"zone_name\":\"Zone 3\",\"pon_description\":\"Feeder 3\",\"cause\":\"los\"}]}}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Unknown event type",
            "content": {
              "application/json": {
                "examples": {
                  "400_unknown_event_type": {
                    "summary": "400 - Unknown event type",
                    "value": {
                      "status": false,
                      "error": "Invalid events. Known event types: onu.status_changed, onu.authorized, onu.updated, onu.deleted, pon.outage_started, pon.outage_ended, onu.signal_changed, onu.signal_reading"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "503 - Not available",
            "content": {
              "application/json": {
                "examples": {
                  "503_not_available": {
                    "summary": "503 - Not available",
                    "value": {
                      "status": false,
                      "error": "ONU status push is not available right now. Poll get_onus_statuses instead."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_olts": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get OLTs list",
        "operationId": "get_olts_list",
        "x-postman-id": "26e5dc8a-971e-4f0d-ae67-cb34ac2025ca",
        "x-postman-order": 2,
        "description": "To maintain platform stability and fair resource usage for all users, heavy usage may be subject to rate limiting or even **revocation of all access to the SmartOLT API**.\n\nIt has been observed that multiple API integrations are using this endpoint eroneusly as a heartbeat check of the API.  \n\\**Do NOT use this endpoint as a heartbeat between API calls.\\**\n\nGets a list of all OLTs names, IPs, telnet ports, SNMP ports and unique IDs.",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": "1",
                          "name": "Huawei",
                          "olt_hardware_version": "Huawei-MA5680T",
                          "ip": "1.2.3.4",
                          "telnet_port": "2333",
                          "snmp_port": "2161"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/olt/get_olts_uptime_and_env_temperature": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get OLTs uptime and environment temperature",
        "operationId": "get_olts_uptime_and_environment_temperature",
        "x-postman-id": "651649ff-4ef0-4f7b-8468-51aa9c0dfc35",
        "x-postman-order": 3,
        "description": "Gets a list of all OLTs uptimes and environment temperatures.",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "olt_id": "1",
                          "olt_name": "Huawei",
                          "uptime": "576 days, 21:05",
                          "env_temp": "24°C"
                        },
                        {
                          "olt_id": "2",
                          "olt_name": "ZTE",
                          "uptime": "93 days, 10:48",
                          "env_temp": "38°C"
                        },
                        {
                          "olt_id": "3",
                          "olt_name": "C600",
                          "uptime": "431 days, 02:32",
                          "env_temp": "33°C"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_olt_cards_details/{olt_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get OLT cards details",
        "operationId": "get_olt_cards_details",
        "x-postman-id": "49423511-b501-49d5-87f2-d838fc3c6699",
        "x-postman-order": 4,
        "description": "Gets a list of OLT cards by OLT ID, as defined in SmartOLT OLT cards section.   \n\nEach OLT card consists of:\n\n- slot\n- type\n- real type\n- number of ports\n- software version\n- status\n- role\n- date & time when the info was last updated",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "slot": "1",
                          "type": "GTGO",
                          "real_type": "GTGO",
                          "ports": "8",
                          "software_version": "V2.1.0",
                          "status": "Online",
                          "role": "Main",
                          "info_updated": "2020-07-14 14:43:58"
                        },
                        {
                          "slot": "2",
                          "type": "GTGH",
                          "real_type": "GTGH",
                          "ports": "16",
                          "software_version": "V2.1.0",
                          "status": "Online",
                          "role": "Main",
                          "info_updated": "2020-07-14 14:43:58"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_olt_pon_ports_details/{olt_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get OLT PON ports details",
        "operationId": "get_olt_pon_ports_details",
        "x-postman-id": "266add14-70e0-4a75-aea7-7fa4f39b10d1",
        "x-postman-order": 5,
        "description": "Gets a list of OLT PON ports by OLT ID, as defined in SmartOLT OLT PON ports section.\n\nEach OLT PON port consists of:\n\n- slot\n- port\n- type\n- admin state\n- status\n- total ONUs\n- online ONUs\n- average signal\n- description\n- min range\n- max range\n- TX Power",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "board": "2",
                          "pon_port": "1",
                          "pon_type": "GPON",
                          "admin_status": "Enabled",
                          "operational_status": "Up",
                          "description": "",
                          "min_range": "0 m",
                          "max_range": "20000 m",
                          "tx_power": "6.839 dBm",
                          "onus_count": 0,
                          "online_onus_count": 0,
                          "average_signal": 0
                        },
                        {
                          "board": "2",
                          "pon_port": "2",
                          "pon_type": "GPON",
                          "admin_status": "Enabled",
                          "operational_status": "Up",
                          "description": "",
                          "min_range": "0 m",
                          "max_range": "30000 m",
                          "tx_power": "7.041 dBm",
                          "onus_count": 0,
                          "online_onus_count": 0,
                          "average_signal": 0
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_outage_pons/{olt_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get OLT outage PONs details",
        "operationId": "get_olt_outage_pons_details",
        "x-postman-id": "3d23149a-f47d-44d7-a984-54872b561b6d",
        "x-postman-order": 6,
        "description": "Returns active PON outages for an OLT pre-aggregated and grouped for NOC triage.\n\n- Sections - three cause buckets: los (fiber cut, grouped by PON), power (grouped by zone), offline/unknown (grouped by zone). Each group lists the affected pons.\n- Each PON includes pon_description, and odb_names/odb_count — the full set of ODBs/splitters on that PON (a PON spans many ODBs)\n- Stale - PONs down > 7 days (likely decommissioned), shown separately, never dropped",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "total_pons": 1,
                        "sections": [
                          {
                            "key": "los",
                            "group_by": "pon",
                            "pon_count": 1,
                            "subscribers": 12,
                            "groups": [
                              {
                                "label": "test 2",
                                "sublabel": "SMA",
                                "pon_count": 1,
                                "subscribers": 12,
                                "since": "2026-06-21 21:14:22",
                                "pons": [
                                  {
                                    "olt_id": "12",
                                    "olt_name": "OLT 1",
                                    "olt_version": "1.1.C6xx",
                                    "board": "1",
                                    "port": "1",
                                    "total_onus": "12",
                                    "has_gps": "1",
                                    "los_count": "12",
                                    "power_count": "0",
                                    "offline_count": "0",
                                    "location_id": "10",
                                    "zone_name": "SMA",
                                    "odb_id": "3645",
                                    "odb_name": "F401-055-5",
                                    "pon_description": "test 2",
                                    "odb_names": "F401-055-1, F401-055-2, F401-055-3, F401-055-4, F401-055-5, F401-055-6, F401-055-7, F401-055-8",
                                    "odb_count": 8,
                                    "latest_status_change": "2026-06-21 21:14:22",
                                    "is_active": "1"
                                  }
                                ]
                              }
                            ]
                          },
                          {
                            "key": "power",
                            "group_by": "zone",
                            "pon_count": 0,
                            "subscribers": 0,
                            "groups": []
                          },
                          {
                            "key": "offline",
                            "group_by": "zone",
                            "pon_count": 0,
                            "subscribers": 0,
                            "groups": []
                          }
                        ],
                        "stale": {
                          "pon_count": 0,
                          "subscribers": 0,
                          "groups": []
                        },
                        "unreachable_olts": []
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_olt_uplink_ports_details/{olt_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get OLT uplink ports details",
        "operationId": "get_olt_uplink_ports_details",
        "x-postman-id": "a45d6a94-3feb-479a-93c1-c9ef852818f4",
        "x-postman-order": 7,
        "description": "Gets a list of OLT uplink ports by OLT ID, as defined in SmartOLT OLT uplink ports section.   \n\nEach OLT uplink port consists of:\n\n- name\n- description\n- type\n- admin state\n- status\n- negotiation\n- MTU\n- wavelength\n- temperature\n- PVID untag\n- mode\n- tagged VLANs",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "name": "gei_1/4/1",
                          "mode": "Hybrid",
                          "vlan_tag": "10,99-200,627-628",
                          "negotiation_auto": "Forced 1G-FullD",
                          "status": "Down",
                          "mtu": "1600",
                          "type": "Fiber",
                          "wavelength": "0",
                          "description": "",
                          "temperature": "N/A",
                          "pvid": "",
                          "admin_status": "Enabled"
                        },
                        {
                          "name": "xgei_1/4/2",
                          "mode": "Hybrid",
                          "vlan_tag": "10,99-200,627-628",
                          "negotiation_auto": "Forced 10G-FullD",
                          "status": "10G-FullD",
                          "mtu": "1600",
                          "type": "Fiber",
                          "wavelength": "1330",
                          "description": "",
                          "temperature": 25.2,
                          "pvid": "",
                          "admin_status": "Enabled"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_onu_types": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU types list",
        "operationId": "get_onu_types_list",
        "x-postman-id": "a7e7c676-fae5-4a1e-b7b3-35bda065202d",
        "x-postman-order": 8,
        "description": "Gets a list of all ONU types as defined in SmartOLT ONU Types section.   \n\nEach ONU type consists of:\n\n- unique ID\n- name\n- PON type (it can be \"gpon\" or \"epon\")\n- capability (it can be \"Bridging\" or \"Bridging/Routing\")\n- number of ethernet ports\n- number of WiFi ports\n- number of VoIP ports\n- CATV\n- if it allows custom ONU profiles (1 - it allows, 0 - it doesn't allow)",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": "29",
                          "name": "ZTE-F623",
                          "pon_type": "gpon",
                          "capability": "Bridging/Routing",
                          "ethernet_ports": 4,
                          "wifi_ports": 4,
                          "voip_ports": 2,
                          "catv": "0",
                          "allow_custom_profiles": "0"
                        },
                        {
                          "id": "30",
                          "name": "ZTE-F660",
                          "pon_type": "gpon",
                          "capability": "Bridging/Routing",
                          "ethernet_ports": 4,
                          "wifi_ports": 4,
                          "voip_ports": 2,
                          "catv": "0",
                          "allow_custom_profiles": "1"
                        },
                        {
                          "id": "44",
                          "name": "ZTE-F401",
                          "pon_type": "epon",
                          "capability": "Bridging",
                          "ethernet_ports": 1,
                          "wifi_ports": 1,
                          "voip_ports": 0,
                          "catv": "0",
                          "allow_custom_profiles": "0"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_onu_types_by_pon_type/{pon_type}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU types list by PON type",
        "operationId": "get_onu_types_list_by_pon_type",
        "x-postman-id": "0ebb5b74-ed00-4c8d-8d62-068549044134",
        "x-postman-order": 9,
        "description": "Gets a list of ONU types by PON type (it can be \"gpon\" or \"epon\"), as defined in SmartOLT ONU Types section.   \n\nEach ONU type consists of:\n\n- unique ID\n- name\n- PON type (it can be \"gpon\" or \"epon\")\n- capability (it can be \"Bridging\" or \"Bridging/Routing\")\n- number of ethernet ports\n- number of WiFi ports\n- number of VoIP ports\n- CATV\n- if it allows custom ONU profiles (1 - it allows, 0 - it doesn't allow)",
        "parameters": [
          {
            "name": "pon_type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": "29",
                          "name": "ZTE-F623",
                          "pon_type": "gpon",
                          "capability": "Bridging/Routing",
                          "ethernet_ports": 4,
                          "wifi_ports": 4,
                          "voip_ports": 2,
                          "catv": "0",
                          "allow_custom_profiles": "0"
                        },
                        {
                          "id": "30",
                          "name": "ZTE-F660",
                          "pon_type": "gpon",
                          "capability": "Bridging/Routing",
                          "ethernet_ports": 4,
                          "wifi_ports": 4,
                          "voip_ports": 2,
                          "catv": "0",
                          "allow_custom_profiles": "1"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_onu_type_image/{onu_type_unique_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU type image",
        "operationId": "get_onu_type_image",
        "x-postman-id": "3e4a5479-3935-4237-bb99-5945accd8bf4",
        "x-postman-order": 10,
        "description": "Gets the ONU type image for a specified ONU type unique ID.\n\nThe response consists of:\n\n- Onu type png image\n\nIt returns a 400 error code when:\n\n- no ONU type unique ID was provided\n- no ONU type was found for the provided unique ID\n\nYou can feed the response directly to an img tag in the src attribute with a Content-type header of \"image/png\".  \nExample:\n\nPHP\n\n```php\nheader(\"Content-type: image/png\");\necho $response_image;\n```\n\nHTML\n\n```html\nimg src=\"link_to_your_method_where_you_call_the_api\"\n```",
        "parameters": [
          {
            "name": "onu_type_unique_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "text/plain": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": "Onu type image"
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/add_onu_type": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Add ONU type",
        "operationId": "add_onu_type",
        "x-postman-id": "c7c5e6af-2a3b-430b-adeb-6e5b7da7157a",
        "x-postman-order": 11,
        "description": "Adds a new ONU type.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "example": "ZTE-F660V6.0",
                    "description": "(String) ONU type"
                  },
                  "pon_type": {
                    "type": "string",
                    "example": "gpon",
                    "description": "(String) ONU type PON type. Allowed values: gpon, epon"
                  },
                  "ethernet_ports_nr": {
                    "type": "integer",
                    "example": "4",
                    "description": "(Int) The number of ethernet ports. Allowed values: 1, 2, 3, 4, 5, 8, 16, 24"
                  },
                  "wifi_ssids_nr": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) The number of WiFi SSIDs. Allowed values: 0, 1, 2, 3, 4, 5, 6, 7, 8"
                  },
                  "voip_ports_nr": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) The number of VoIP ports. Allowed values: 0, 1, 2"
                  },
                  "catv": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) 1 if it supports CATV, otherwise 0"
                  },
                  "allow_custom_profiles": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) 1 if it allows custom profiles, otherwise 0"
                  },
                  "capability": {
                    "type": "string",
                    "example": "Bridging/Routing",
                    "description": "(String) ONU type capability. Allowed values: Bridging/Routing, Bridging"
                  }
                },
                "required": [
                  "name",
                  "pon_type",
                  "ethernet_ports_nr",
                  "wifi_ssids_nr",
                  "voip_ports_nr",
                  "catv",
                  "allow_custom_profiles",
                  "capability"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU type ZTE-F660V6.0 added successfully"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_zones": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get zones list",
        "operationId": "get_zones_list",
        "x-postman-id": "569dbe0b-e254-4b92-afa0-da677e2e7537",
        "x-postman-order": 12,
        "description": "Gets a list of all zones as defined in SmartOLT Zones section.   \n\nEach zone consists of:\n\n- unique ID\n- name",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": "1",
                          "name": "Zone 1"
                        },
                        {
                          "id": "2",
                          "name": "Zone 2"
                        },
                        {
                          "id": "3",
                          "name": "Zone 3"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/add_zone": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Add zone",
        "operationId": "add_zone",
        "x-postman-id": "af25b3b5-5728-4b69-a821-227b28e4b54b",
        "x-postman-order": 13,
        "description": "Adds a new zone.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "zone": {
                    "type": "string",
                    "example": "City center",
                    "description": "(String) Zone name"
                  }
                },
                "required": [
                  "zone"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Zone City center added successfully"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_odbs/{zone_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get Splitters list",
        "operationId": "get_splitters_list",
        "x-postman-id": "df0766e6-c470-46b8-b4f3-7c50a529a864",
        "x-postman-order": 14,
        "description": "Gets a list of all Splitters as defined in SmartOLT Splitters section.\n\nIf Zone ID is specified then it gets a list of all Splitters in that Zone.\n\nEach splitter consists of:\n\n- unique ID\n- name\n- latitude\n- longitude\n- external ID\n- zone ID\n- zone name",
        "parameters": [
          {
            "name": "zone_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": "2",
                          "name": "test odb",
                          "latitude": "44.4352497825479",
                          "longitude": "26.100036719531257",
                          "external_id": "ODB-A19",
                          "zone_id": "1",
                          "zone_name": "Zone 1"
                        },
                        {
                          "id": "3",
                          "name": "test odb2",
                          "latitude": null,
                          "longitude": null,
                          "external_id": "ODB-B",
                          "zone_id": "18",
                          "zone_name": "Zone 2"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/add_odb": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Add Splitter",
        "operationId": "add_splitter",
        "x-postman-id": "75695999-d968-4dbe-99be-6ef6083b2320",
        "x-postman-order": 15,
        "description": "Adds a new splitter.\n\n`error_code`: `specify_odb`, `incorrect_odb`, `odb_already_exists`, `specify_zone`, `incorrect_zone`, `incorrect_nr_of_ports`, `incorrect_latitude`, `incorrect_longitude`, `incorrect_external_id`, `odb_add_failed` (all 400); 403 when the key has no access to the zone.\n\n`external_id` must not already be used by another splitter — `external_id_not_unique` (400).",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "zone": {
                    "type": "string",
                    "example": "City center",
                    "description": "(String) Zone name"
                  },
                  "name": {
                    "type": "string",
                    "example": "ODB 1",
                    "description": "(String) Splitter name"
                  },
                  "nr_of_ports": {
                    "type": "integer",
                    "example": "3",
                    "description": "(Int) The number of ports of the splitter"
                  },
                  "latitude": {
                    "type": "string",
                    "example": "52.5113340328893",
                    "description": "(String) Latitude"
                  },
                  "longitude": {
                    "type": "string",
                    "example": "13.401282438647513",
                    "description": "(String) Longitude"
                  },
                  "external_id": {
                    "type": "string",
                    "example": "ODB-A19",
                    "description": "(String) Max 191 chars. Must not already be used by another splitter - enforced, `external_id_not_unique` (400). This is the key that identifies the splitter on edit/delete."
                  }
                },
                "required": [
                  "zone",
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "id": 12,
                        "message": "ODB Block A added successfully"
                      },
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/edit_odb/{odb_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Edit Splitter by unique external ID",
        "operationId": "edit_splitter_by_unique_external_id",
        "x-postman-id": "92d17093-0d17-4c82-9ccd-7f782d8ec6b2",
        "x-postman-order": 16,
        "description": "Update an existing splitter by its unique external ID. At least one field must be sent, otherwise the call fails with `nothing_to_update`.\n\n**Selecting the Splitter.** The URL segment is the splitter's unique `external_id`. Alternatively post `odb_id` with the internal numeric ID - if both are provided, then the internal ID is used to select the splitter.\n\n`error_code`: `specify_odb_id` (400, neither selector sent), `odb_does_not_exist` (400), 403 with no `error_code` when the key has no access to the splitter's zone or the splitter itself, `nr_of_ports_below_used` (400), `nothing_to_update` (400), plus the same field-validation codes as Add Splitter.\n\nSetting `external_id` to a value already used by another splitter fails with `external_id_not_unique` (400).",
        "parameters": [
          {
            "name": "odb_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "example": "ODB Block A renamed",
                    "description": "(String) Send only the fields you want to change — omitted fields are left untouched."
                  },
                  "zone": {
                    "type": "string",
                    "example": "Center",
                    "description": "(String) Zone NAME. Moves the splitter to another zone."
                  },
                  "nr_of_ports": {
                    "type": "string",
                    "example": "24",
                    "description": "(String) Cannot be lowered below the highest splitter port an ONU is currently connected to."
                  },
                  "latitude": {
                    "type": "string",
                    "example": "44.4325"
                  },
                  "longitude": {
                    "type": "string",
                    "example": "26.1039"
                  },
                  "external_id": {
                    "type": "string",
                    "example": "ODB-A19-NEW",
                    "description": "(String) Sets a NEW external ID on the row - a value to write, NOT how the row is selected (selection is the URL segment or `odb_id`). Must not already be used by another splitter."
                  },
                  "odb_id": {
                    "type": "integer",
                    "example": "{{odb_id}}",
                    "description": "(Int) Internal numeric ID. When sent, it takes precedence over the external ID in the URL segment. Use it when the external ID is ambiguous or contains characters a URL segment cannot carry."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ODB updated successfully",
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/delete_odb/{odb_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Delete Splitter by unique external ID",
        "operationId": "delete_splitter_by_unique_external_id",
        "x-postman-id": "5ef233cf-05a8-4209-ac04-7dcbf600b122",
        "x-postman-order": 17,
        "description": "Deletes a splitter.\n\nRefused while ONUs are still assigned to the splitter.\n\n`error_code`: `specify_odb_id` (400), `odb_does_not_exist` (400), `odb_in_use` (403, ONUs still assigned), 403 with no `error_code` for an out-of-scope splitter.",
        "parameters": [
          {
            "name": "odb_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "odb_id": {
                    "type": "integer",
                    "example": "{{odb_id}}",
                    "description": "(Int) Internal numeric ID; takes precedence over the URL segment."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ODB ODB Block A deleted successfully",
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - ODB in use",
            "content": {
              "application/json": {
                "examples": {
                  "403_odb_in_use": {
                    "summary": "403 - ODB in use",
                    "value": {
                      "status": false,
                      "error": "This ODB is assigned to 4 ONU(s) and cannot be deleted",
                      "error_code": "odb_in_use"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_speed_profiles": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get speed profiles list",
        "operationId": "get_speed_profiles_list",
        "x-postman-id": "a1853ef6-45d9-4745-9c42-05c1060eab9c",
        "x-postman-order": 18,
        "description": "Gets a list of all speed profiles as defined in SmartOLT Speed profiles section.   \n\nEach speed profile consists of:\n\n- unique ID\n- name\n- speed\n- direction: upload or download\n- type: iptv or internet",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": 1,
                          "name": "100M",
                          "speed": "104960",
                          "direction": "download",
                          "type": "iptv"
                        },
                        {
                          "id": 2,
                          "name": "INTERNET_100_Mb",
                          "speed": "104960",
                          "direction": "upload",
                          "type": "internet"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/olt/get_vlans/{olt_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get VLANs list",
        "operationId": "get_vlans_list",
        "x-postman-id": "80025fa2-a392-4493-8d6c-d89672c80551",
        "x-postman-order": 19,
        "description": "Gets a list of OLT VLANs by OLT ID, as defined in SmartOLT OLT VLANs section.\n\nEach VLAN consists of:\n\n- unique ID\n- VLAN\n- description\n- OLT ID\n- scope: iptv, mgmt/voip, lan_to_lan or internet\n- default_for_pon_ports: board_1_port_3, board_2_port_1",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": "1830",
                          "vlan": "10",
                          "description": null,
                          "olt_id": "1",
                          "scope": "internet"
                        },
                        {
                          "id": "1832",
                          "vlan": "900",
                          "description": "IPTV",
                          "olt_id": "1",
                          "scope": "iptv"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/olt/add_vlan/{olt_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Add VLAN",
        "operationId": "add_vlan",
        "x-postman-id": "39322366-48bc-4859-b64e-a254ef13d959",
        "x-postman-order": 20,
        "description": "Adds a VLAN to the OLT specified by the OLT ID.",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "vlan": {
                    "type": "integer",
                    "example": "30",
                    "description": "(Int) VLAN-ID"
                  },
                  "description": {
                    "type": "string",
                    "example": "test vlan",
                    "description": "(String) VLAN description"
                  },
                  "for_iptv": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) 1 if the VLAN is a Multicast VLAN, used for IPTV, otherwise 0"
                  },
                  "for_mgmt_voip": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) 1 if the VLAN is a Management/VoIP VLAN, otherwise 0"
                  },
                  "dhcp_snooping": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) 1 to enable DHCP Snooping on VLAN, otherwise 0"
                  },
                  "lan_to_lan": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) 1 to enable direct communication between ONUs on this VLAN (aka. LAN-to-LAN), otherwise 0"
                  }
                },
                "required": [
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "VLAN 30 added successfully to OLT Test"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/get_billing_details": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get billing details",
        "operationId": "get_billing_details",
        "x-postman-id": "540a3d30-0ef6-40b6-b6b1-1a97fa6ca97b",
        "x-postman-order": 21,
        "description": "Gets a list of all OLTs subscription details.\n\nFor each OLT the subscription details are:\n\n- OLT unique ID\n- OLT name\n- subscription status\n- subscription end date (inclusive)",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "text/plain": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": "{\n    \"status\": true,\n    \"response\": {\n        \"olts\": [\n            {\n                \"olt_id\": \"1\",\n                \"olt_name\": \"Huawei\",\n                \"olt_subscription_status\": \"active\",\n                \"olt_subscription_end_date\": \"18-Apr-2022\"\n            },\n            {\n                \"olt_id\": \"2\",\n                \"olt_name\": \"ZTE\",\n                \"olt_subscription_status\": \"expired\",\n                \"olt_subscription_end_date\": \"31-Dec-2020\"\n            }\n    ]\n}"
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/unconfigured_onus": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all unconfigured ONUs",
        "operationId": "get_all_unconfigured_onus",
        "x-postman-id": "c2f59ef3-5732-4247-8422-7df69f7e32c1",
        "x-postman-order": 22,
        "description": "Gets a list of all unconfigured ONUs on all OLTs.   \n\nEach unconfigured ONU consists of:\n\n- PON type (it can be \"gpon\" or \"epon\")\n- board\n- port\n- onu\n- sn (in case of gpon ONU is the SN, in case of epon ONU is the MAC)\n- ONU type name\n- ONU type unique ID\n- OLT unique ID\n- if ONU is disabled (1 - is disabled, 0 - is enabled)\n- A list of possible actions for this ONU: view, resync_config, authorize, move_here",
        "parameters": [
          {
            "name": "sn",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "AD0"
            },
            "description": "(Optional) Search for a specific SN. Performed search is of type CONTAINS."
          },
          {
            "name": "onu_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "F6"
            },
            "description": "(Optional) Search for a specific ONU type. Performed search is of type CONTAINS."
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": 0,
                          "pon_type": "gpon",
                          "board": "2",
                          "port": "3",
                          "pon_description": "",
                          "onu": "1",
                          "sn": "ZTEGC7E230E4",
                          "onu_type_name": "ZTE-F660V6.0",
                          "onu_type_id": "75",
                          "olt_id": "1",
                          "is_disabled": 0,
                          "old_location": null,
                          "new_location": null,
                          "external_id": null,
                          "actions": [
                            "authorize"
                          ]
                        },
                        {
                          "id": 0,
                          "pon_type": "epon",
                          "board": "1",
                          "port": "3",
                          "onu": "1",
                          "sn": "98F4.28FF.0005",
                          "onu_type_name": "ZTE-F460",
                          "onu_type_id": "45",
                          "olt_id": "1",
                          "is_disabled": 0,
                          "old_location": null,
                          "new_location": null,
                          "external_id": null,
                          "actions": [
                            "authorize"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/unconfigured_onus_for_olt/{olt_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get unconfigured ONUs by OLT unique ID",
        "operationId": "get_unconfigured_onus_by_olt_unique_id",
        "x-postman-id": "97c6e560-a827-4362-846f-e914c4736a77",
        "x-postman-order": 23,
        "description": "Gets a list of all unconfigured ONUs for a specified OLT unique ID.   \n\nEach unconfigured ONU consists of:\n\n- PON type (it can be \"gpon\" or \"epon\")\n- board\n- port\n- onu\n- sn (in case of gpon ONU is the SN, in case of epon ONU is the MAC)\n- ONU type name\n- ONU type unique ID\n- OLT unique ID\n- if ONU is disabled (1 - is disabled, 0 - is enabled)\n- A list of possible actions for this ONU: view, resync_config, authorize, move_here\n\nIt returns a 400 error code when:\n\n- no OLT ID was provided\n- no OLT was found for the provided OLT ID",
        "parameters": [
          {
            "name": "olt_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sn",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "AD0"
            },
            "description": "(Optional) Search for a specific SN. Performed search is of type CONTAINS."
          },
          {
            "name": "onu_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "F6"
            },
            "description": "(Optional) Search for a specific ONU type. Performed search is of type CONTAINS."
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "id": 0,
                          "pon_type": "gpon",
                          "board": "2",
                          "port": "3",
                          "onu": "1",
                          "sn": "ZTEGC7E230E4",
                          "onu_type_name": "ZTE-F660V6.0",
                          "onu_type_id": "75",
                          "olt_id": "1",
                          "is_disabled": 0,
                          "old_location": null,
                          "new_location": null,
                          "external_id": null,
                          "actions": [
                            "authorize"
                          ]
                        },
                        {
                          "id": 0,
                          "pon_type": "epon",
                          "board": "1",
                          "port": "3",
                          "onu": "1",
                          "sn": "98F4.28FF.0005",
                          "onu_type_name": "ZTE-F460",
                          "onu_type_id": "45",
                          "olt_id": "1",
                          "is_disabled": 0,
                          "old_location": null,
                          "new_location": null,
                          "external_id": null,
                          "actions": [
                            "authorize"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No OLT for ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_olt_for_id": {
                    "summary": "400 - No OLT for ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No OLT was found with ID 100"
                    }
                  },
                  "400_specify_olt_id": {
                    "summary": "400 - Specify OLT ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the OLT ID"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onus_statuses": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONUs statuses",
        "operationId": "get_all_onus_statuses",
        "x-postman-id": "dd7eff97-6229-497c-9cde-6acd0ad09aee",
        "x-postman-order": 24,
        "description": "Gets all the ONUs statuses for a specified OLT ID, board, PON port or zone. If no OLT ID, board, PON port or zone is specified, then all the ONUs statuses on all OLTs will be returned.   \n\nONU statuses returned can be:\n\n- Online\n- Power fail\n- LOS\n- Offline\n\nIt returns a 400 error code when:\n\n- no OLT was found for the provided OLT ID\n- no OLT ID was provided with board or PON port\n- no OLT ID or no board was provided with PON port\n- no Zone was found for the provided zone name",
        "parameters": [
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT for which to get the ONUs statuses. Leave empty if you want statuses from all OLTs"
          },
          {
            "name": "board",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "2"
            },
            "description": "(Int) OLT board where the ONUs are placed. Leave it empty if you want statuses from all boards on the provided OLT ID"
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "3"
            },
            "description": "(Int) OLT PON port where ONUs are placed. Leave it empty if you want statuses from all PON ports on the provided board"
          },
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "City Centre"
            },
            "description": "(String) The zone where the ONUs are located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character. Leave it empty if you want ONUs statuses from all the zones"
          },
          {
            "name": "status_changed_after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": null
            },
            "description": "(String) Returns only the ONUs whose status changed at or after this date. Use ISO 8601 with a time zone, for example 2026-09-29T10:00:00+00:00. A date without a time zone is read in the time zone of your SmartOLT account."
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "unique_external_id": "test1",
                          "sn": "ZTEGC1D48C98",
                          "olt_id": "53",
                          "board": "0",
                          "port": "3",
                          "onu": "20",
                          "zone_id": "1",
                          "name": "test 1",
                          "address": "",
                          "contact": "",
                          "odb_id": null,
                          "status": "Online",
                          "last_status_change": "2025-12-30 12:00:00"
                        },
                        {
                          "unique_external_id": "test2",
                          "sn": "ZTEGC171A71A",
                          "olt_id": "53",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "zone_id": "1",
                          "name": "test 2",
                          "address": "",
                          "contact": "",
                          "odb_id": null,
                          "status": "Offline",
                          "last_status_change": "2025-12-30 12:00:00"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onus_administrative_statuses": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONUs administrative statuses",
        "operationId": "get_all_onus_administrative_statuses",
        "x-postman-id": "8edcf207-0fbc-40dc-b4a4-5c551e7458e1",
        "x-postman-order": 25,
        "description": "Gets all the ONUs administrative statuses for a specified OLT ID, board, PON port or zone. If no OLT ID, board, PON port or zone is specified, then all the ONUs statuses on all OLTs will be returned.   \n\nONU administrative statuses returned can be:\n\n- Enabled\n- Disabled\n\nIt returns a 400 error code when:\n\n- no OLT was found for the provided OLT ID\n- no OLT ID was provided with board or PON port\n- no OLT ID or no board was provided with PON port\n- no Zone was found for the provided zone name",
        "parameters": [
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT for which to get the ONUs statuses. Leave empty if you want statuses from all OLTs"
          },
          {
            "name": "board",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "2"
            },
            "description": "(Int) OLT board where the ONUs are placed. Leave it empty if you want statuses from all boards on the provided OLT ID"
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "3"
            },
            "description": "(Int) OLT PON port where ONUs are placed. Leave it empty if you want statuses from all PON ports on the provided board"
          },
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "City Centre"
            },
            "description": "(String) The zone where the ONUs are located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character. Leave it empty if you want ONUs statuses from all the zones"
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "unique_external_id": "test1",
                          "sn": "ZTEGC1D48C98",
                          "pon_type": "gpon",
                          "olt_id": "53",
                          "board": "0",
                          "port": "3",
                          "onu": "20",
                          "zone_id": "1",
                          "name": "test 1",
                          "address": "",
                          "contact": "",
                          "admin_status": "Enabled"
                        },
                        {
                          "unique_external_id": "test2",
                          "sn": "ZTEGC171A71A",
                          "pon_type": "gpon",
                          "olt_id": "53",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "zone_id": "1",
                          "name": "test 2",
                          "address": "",
                          "contact": "",
                          "admin_status": "Disabled"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onus_catv_statuses": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONUs CATV statuses",
        "operationId": "get_all_onus_catv_statuses",
        "x-postman-id": "34acfcfc-d63d-4b71-b2f5-b607a65020c9",
        "x-postman-order": 26,
        "description": "Gets all the ONUs CATV statuses for a specified OLT ID, board, PON port or zone. If no OLT ID, board, PON port or zone is specified, then all the ONUs statuses on all OLTs will be returned.   \n\nONU CATV statuses returned can be:\n\n- Enabled\n- Disabled\n- CATV not supported by ONU-Type\n\nIt returns a 400 error code when:\n\n- no OLT was found for the provided OLT ID\n- no OLT ID was provided with board or PON port\n- no OLT ID or no board was provided with PON port\n- no Zone was found for the provided zone name",
        "parameters": [
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT for which to get the ONUs statuses. Leave empty if you want statuses from all OLTs"
          },
          {
            "name": "board",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "2"
            },
            "description": "(Int) OLT board where the ONUs are placed. Leave it empty if you want statuses from all boards on the provided OLT ID"
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "3"
            },
            "description": "(Int) OLT PON port where ONUs are placed. Leave it empty if you want statuses from all PON ports on the provided board"
          },
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "City Centre"
            },
            "description": "(String) The zone where the ONUs are located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character. Leave it empty if you want ONUs statuses from all the zones"
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "unique_external_id": "test1",
                          "sn": "ZTEGC1D48C98",
                          "olt_id": "53",
                          "board": "0",
                          "port": "3",
                          "onu": "20",
                          "zone_id": "1",
                          "name": "test 1",
                          "address": "",
                          "contact": "",
                          "catv_status": "Enabled"
                        },
                        {
                          "unique_external_id": "test2",
                          "sn": "ZTEGC171A71A",
                          "olt_id": "53",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "zone_id": "1",
                          "name": "test 2",
                          "address": "",
                          "contact": "",
                          "catv_status": "Disabled"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onus_signals": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONUs signals",
        "operationId": "get_all_onus_signals",
        "x-postman-id": "43e3094c-0db5-46ea-821e-1ae9c4038006",
        "x-postman-order": 27,
        "description": "Gets all the ONUs signals for a specified OLT ID, board, PON port or zone. If no OLT ID, board, PON port or zone is specified, then all the ONUs signals on all OLTs will be returned.   \n\nThe response consists of:\n\n- ONU signal: 'Critical', 'Warning', 'Very good'\n- ONU signal 1310 value\n\nIt returns a 400 error code when:\n\n- no OLT was found for the provided OLT ID\n- no OLT ID was provided with board or PON port\n- no OLT ID or no board was provided with PON port\n- no Zone was found for the provided zone name",
        "parameters": [
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT for which to get the ONUs statuses. Leave empty if you want signals from all OLTs"
          },
          {
            "name": "board",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "2"
            },
            "description": "(Int) OLT board where the ONUs are placed. Leave it empty if you want signals from all boards on the provided OLT ID"
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "3"
            },
            "description": "(Int) OLT PON port where ONUs are placed. Leave it empty if you want signals from all PON ports on the provided board"
          },
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "City Centre"
            },
            "description": "(String) The zone where the ONUs are located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character. Leave it empty if you want ONUs signals from all the zones"
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": [
                        {
                          "unique_external_id": "test1",
                          "sn": "ZTEGC1D48C98",
                          "olt_id": "53",
                          "board": "0",
                          "port": "3",
                          "onu": "20",
                          "zone_id": "1",
                          "name": "test 1",
                          "address": "",
                          "contact": "",
                          "odb_id": null,
                          "signal_1310": "-20.05 dBm",
                          "signal": "Very good",
                          "signal_1490": "-"
                        },
                        {
                          "unique_external_id": "test2",
                          "sn": "ZTEGC171A71A",
                          "olt_id": "53",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "zone_id": "1",
                          "name": "test 2",
                          "address": "",
                          "contact": "",
                          "odb_id": null,
                          "signal_1310": "-11.89 dBm",
                          "signal": "Very good",
                          "signal_1490": "-"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_all_onus_details": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONUs details",
        "operationId": "get_all_onus_details",
        "x-postman-id": "4e11cd01-2e4b-4f83-807d-963c4e7434af",
        "x-postman-order": 28,
        "description": "Gets all the ONUs details for a specified OLT ID, board, PON port or zone. If no OLT ID, board, PON port or zone is specified, then all the ONUs details on all OLTs will be returned.\n\nThe \"Get all ONUs details\" method is equivalent to an export of the entire database of ONU details and therefore it is not recommended to be used repeatedly, as the contained information does not change so often.\n\nMaximum recommended calls for \"Get all ONUs details\": 15 per hour (calls are blocked after the limit is reached).\n\n**Pagination (recommended)**\n\nPass `page` to receive results in pages. `page_size` accepts 1-100 (default 100). Paginated calls do **not** consume the 15/hours budget of the full export - they count toward the general API budget.\n\nThe paginated response is:\n\n`{ \"status\": true, \"page\": 1, \"page_size\": 100, \"total_items\": 4111, \"total_pages\": 42, \"onus\": [...] }`\n\n`total_items`/`total_pages` are included on page 1.\n\n#### Keeping in sync (recommended pattern)\n\nPage through the full inventory once, store it, then poll with `updated_since=` (e.g. `2026-07-08 12:00:00`) to receive only ONUs whose configuration changed since. A typical incremental sync is 1–2 calls instead of re-paging everything. Status/signal changes do not touch `updated_since` — use the dedicated statuses/signals endpoints for those.\n\n#### Filters\n\nAll optional and combinable — see the query parameters table. Text filters (`sn`, `external_id`, `name`, `address`) match partially; enum filters return 400 on invalid values.\n\n#### Full export\n\nCalling without `page` returns every ONU in one response (`{ \"status\": true, \"onus\": [...] }`). This is equivalent to an export of the entire database: maximum 15 calls per hour, blocked at the limit. Prefer pagination + `updated_since`.\n\n#### Errors\n\n- 400 — unknown OLT ID / zone / splitter, board/port without the required OLT ID, or an invalid filter value (unparseable date, unknown status token)\n- Unsupported query parameters are deprecated: they currently return a `Deprecation` warning header and will be rejected with 410 Gone\n- 429 — rate limit exceeded; the response carries `Retry-After` (seconds until the counting window resets). Back off and retry after that interval",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) Page number. Enables pagination (recommended)."
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "100"
            },
            "description": "(Int) Items per page, 1–100. Default 100."
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "2026-07-08 12:00:00"
            },
            "description": "(String) Only ONUs whose configuration changed since this date. Use for incremental sync after one full pull."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "sn,name,status"
            },
            "description": "(String) Comma-separated list of response fields to return. Include service_ports/ethernet_ports/wifi_ports/voip_ports only when needed — skipping them is faster."
          },
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT for which to get the ONUs details. Leave empty if you want ONUs details from all OLTs"
          },
          {
            "name": "board",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "2"
            },
            "description": "(Int) OLT board where the ONUs are placed. Leave it empty if you want ONUs details from all boards on the provided OLT ID"
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "3"
            },
            "description": "(Int) OLT PON port where ONUs are placed. Leave it empty if you want ONUs details from all PON ports on the provided board"
          },
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "City Centre"
            },
            "description": "(String) The zone where the ONUs are located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character. Leave it empty if you want ONUs details from all the zones"
          },
          {
            "name": "odb",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Splitter325"
            },
            "description": "(String) Splitter. The Splitter can contain only alphanumeric characters, spaces, underscore and the dash (-) character"
          },
          {
            "name": "sn",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU SN"
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU unique external ID"
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU name"
          },
          {
            "name": "address",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU address"
          },
          {
            "name": "onu_type_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU type ID (comma-separable)"
          },
          {
            "name": "vlan",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU VLAN"
          },
          {
            "name": "mode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Routing"
            },
            "description": "(String) ONU mode. Allowed values: Bridging or Routing."
          },
          {
            "name": "wan_mode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "PPPoE"
            },
            "description": "(String) ONU router mode. Allowed values: Setup via ONU webpage, DHCP, Static or PPPoE."
          },
          {
            "name": "administrative_status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "enabled"
            },
            "description": "(String) ONU admin status: Allowed values: enabled, disabled."
          },
          {
            "name": "tr069",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "enabled"
            },
            "description": "(String) ONU TR069 status: Allowed values: enabled, disabled."
          },
          {
            "name": "catv",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "enabled"
            },
            "description": "(String) ONU CATV status: Allowed values: enabled, disabled."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "online"
            },
            "description": "(String) ONU status: Allowed values: online, pwrfail, los, offline. A comma separated list of these values is also allowed."
          },
          {
            "name": "signal",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "critical"
            },
            "description": "(String) ONU signal: Allowed values: very_good, warning, critical."
          },
          {
            "name": "authorized_after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String)ONU authorized on/after this date."
          },
          {
            "name": "authorized_before",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) ONU authorized on/before this date."
          },
          {
            "name": "status_changed_after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": ""
            },
            "description": "(String) Returns only the ONUs whose status changed at or after this date. Use ISO 8601 with a time zone, for example 2026-09-29T10:00:00+00:00. A date without a time zone is read in the time zone of your SmartOLT account."
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "onus": [
                        {
                          "unique_external_id": "HWTC12341234",
                          "pon_type": "gpon",
                          "gpon_channel": "gpon",
                          "sn": "HWTC12341234",
                          "olt_id": "53",
                          "olt_name": "Huawei",
                          "board": "1",
                          "port": "1",
                          "onu": "0",
                          "onu_type_id": "308",
                          "onu_type_name": "ONU-type-eth-4-pots-2-catv-0",
                          "zone_id": "182",
                          "zone_name": "Zone",
                          "name": "test",
                          "address": "",
                          "odb_name": "",
                          "odb_port": "",
                          "mode": "Routing",
                          "wan_mode": "Setup via ONU webpage",
                          "ip_address": null,
                          "subnet_mask": null,
                          "default_gateway": null,
                          "dns1": null,
                          "dns2": null,
                          "username": null,
                          "password": null,
                          "mgmt_ip_mode": "Inactive",
                          "mgmt_ip_address": null,
                          "mgmt_ip_subnet_mask": null,
                          "mgmt_ip_default_gateway": null,
                          "mgmt_ip_dns1": null,
                          "mgmt_ip_dns2": null,
                          "mgmt_ip_service_port": null,
                          "mgmt_ip_vlan": null,
                          "mgmt_ip_cvlan": null,
                          "mgmt_ip_svlan": null,
                          "mgmt_ip_tag_transform_mode": null,
                          "voip_service": "Disabled",
                          "voip_ip_mode": null,
                          "voip_ip_address": null,
                          "voip_ip_subnet_mask": null,
                          "voip_ip_default_gateway": null,
                          "voip_ip_dns1": null,
                          "voip_ip_dns2": null,
                          "voip_ip_service_port": null,
                          "voip_ip_vlan": null,
                          "voip_ip_cvlan": null,
                          "voip_ip_svlan": null,
                          "voip_ip_tag_transform_mode": null,
                          "iptv": "Disabled",
                          "iptv_service_port": null,
                          "iptv_vlan": null,
                          "iptv_cvlan": null,
                          "iptv_svlan": null,
                          "iptv_tag_transform_mode": null,
                          "iptv_upload_speed": null,
                          "iptv_download_speed": null,
                          "iptv_allowed_macs": null,
                          "iptv_filtered_macs": null,
                          "custom_template_name": null,
                          "tr069": "Disabled",
                          "tr069_profile": null,
                          "tr069_device_id": null,
                          "catv": "Not supported by ONU-Type",
                          "administrative_status": "Enabled",
                          "authorization_date": "2023-06-04 00:00:00",
                          "is_synced_after_import": "0",
                          "is_failed_resync_config": "0",
                          "status": null,
                          "last_status_change": null,
                          "signal": null,
                          "signal_1310": null,
                          "signal_1490": null,
                          "latitude": null,
                          "longitude": null,
                          "contact": "",
                          "service_ports": [
                            {
                              "service_port": "348",
                              "vlan": "20",
                              "cvlan": "",
                              "svlan": "",
                              "tag_transform_mode": "translate",
                              "upload_speed": "1G",
                              "download_speed": "1G"
                            }
                          ],
                          "ethernet_ports": [
                            {
                              "port": "eth_0/1",
                              "admin_state": "Enabled",
                              "mode": "Access",
                              "dhcp": "No control",
                              "vlan": "20",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/2",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/3",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/4",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            }
                          ],
                          "wifi_ports": [],
                          "voip_ports": [],
                          "applied_configuration_preset": {
                            "preset_id": 5,
                            "preset_name": "test preset",
                            "is_reversible": true,
                            "applied_at": "2026-07-23 06:51:54",
                            "status": "active"
                          }
                        },
                        {
                          "unique_external_id": "test2",
                          "pon_type": "gpon",
                          "gpon_channel": "gpon",
                          "sn": "ZTEGC171A71A",
                          "name": "Test name2",
                          "olt_id": "53",
                          "olt_name": "OLT 1",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "onu_type_id": "2",
                          "onu_type_name": "ZTE-F600",
                          "zone_id": "1",
                          "zone_name": "City Center",
                          "address": null,
                          "odb_name": "ODB 2",
                          "odb_port": "",
                          "mode": "Routing",
                          "wan_mode": "Setup via ONU webpage",
                          "ip_address": null,
                          "subnet_mask": null,
                          "default_gateway": null,
                          "dns1": null,
                          "dns2": null,
                          "username": null,
                          "password": null,
                          "mgmt_ip_mode": "Inactive",
                          "mgmt_ip_address": null,
                          "mgmt_ip_subnet_mask": null,
                          "mgmt_ip_default_gateway": null,
                          "mgmt_ip_dns1": null,
                          "mgmt_ip_dns2": null,
                          "mgmt_ip_service_port": null,
                          "mgmt_ip_vlan": null,
                          "mgmt_ip_cvlan": null,
                          "mgmt_ip_svlan": null,
                          "mgmt_ip_tag_transform_mode": null,
                          "voip_service": "Disabled",
                          "voip_ip_mode": "DHCP",
                          "voip_ip_address": null,
                          "voip_ip_subnet_mask": null,
                          "voip_ip_default_gateway": null,
                          "voip_ip_dns1": null,
                          "voip_ip_dns2": null,
                          "voip_ip_service_port": null,
                          "voip_ip_vlan": null,
                          "voip_ip_cvlan": null,
                          "voip_ip_svlan": null,
                          "voip_ip_tag_transform_mode": null,
                          "iptv": "OLT IPTV module disabled",
                          "iptv_service_port": null,
                          "iptv_vlan": null,
                          "iptv_cvlan": null,
                          "iptv_svlan": null,
                          "iptv_tag_transform_mode": null,
                          "iptv_upload_speed": null,
                          "iptv_download_speed": null,
                          "iptv_allowed_macs": null,
                          "iptv_filtered_macs": null,
                          "custom_template_name": null,
                          "tr069": "Disabled",
                          "tr069_profile": null,
                          "tr069_device_id": null,
                          "catv": "Enabled",
                          "administrative_status": "Enabled",
                          "authorization_date": "2021-08-30 00:00:00",
                          "is_synced_after_import": 1,
                          "is_failed_resync_config": 0,
                          "status": null,
                          "last_status_change": "2025-12-30 12:00:00",
                          "signal": null,
                          "signal_1310": null,
                          "signal_1490": null,
                          "latitude": null,
                          "longitude": null,
                          "contact": "",
                          "service_ports": [
                            {
                              "service_port": "100",
                              "vlan": "150",
                              "cvlan": "",
                              "svlan": "",
                              "tag_transform_mode": "",
                              "upload_speed": "1G",
                              "download_speed": "1G"
                            }
                          ],
                          "ethernet_ports": [
                            {
                              "port": "eth_0/1",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/2",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/3",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/4",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            }
                          ],
                          "wifi_ports": [],
                          "voip_ports": [],
                          "applied_configuration_preset": null
                        }
                      ]
                    }
                  },
                  "200_ok_paginated": {
                    "summary": "200 - OK (paginated)",
                    "value": {
                      "status": true,
                      "page": 1,
                      "page_size": 100,
                      "total_items": 4111,
                      "total_pages": 42,
                      "onus": [
                        {
                          "unique_external_id": "HWTC12341234",
                          "pon_type": "gpon",
                          "gpon_channel": "gpon",
                          "sn": "HWTC12341234",
                          "olt_id": "53",
                          "olt_name": "Huawei",
                          "board": "1",
                          "port": "1",
                          "onu": "0",
                          "onu_type_id": "308",
                          "onu_type_name": "ONU-type-eth-4-pots-2-catv-0",
                          "zone_id": "182",
                          "zone_name": "Zone",
                          "name": "test",
                          "address": "",
                          "odb_name": "",
                          "odb_port": "",
                          "mode": "Routing",
                          "wan_mode": "Setup via ONU webpage",
                          "ip_address": null,
                          "subnet_mask": null,
                          "default_gateway": null,
                          "dns1": null,
                          "dns2": null,
                          "username": null,
                          "password": null,
                          "mgmt_ip_mode": "Inactive",
                          "mgmt_ip_address": null,
                          "mgmt_ip_subnet_mask": null,
                          "mgmt_ip_default_gateway": null,
                          "mgmt_ip_dns1": null,
                          "mgmt_ip_dns2": null,
                          "mgmt_ip_service_port": null,
                          "mgmt_ip_vlan": null,
                          "mgmt_ip_cvlan": null,
                          "mgmt_ip_svlan": null,
                          "mgmt_ip_tag_transform_mode": null,
                          "voip_service": "Disabled",
                          "voip_ip_mode": null,
                          "voip_ip_address": null,
                          "voip_ip_subnet_mask": null,
                          "voip_ip_default_gateway": null,
                          "voip_ip_dns1": null,
                          "voip_ip_dns2": null,
                          "voip_ip_service_port": null,
                          "voip_ip_vlan": null,
                          "voip_ip_cvlan": null,
                          "voip_ip_svlan": null,
                          "voip_ip_tag_transform_mode": null,
                          "iptv": "Disabled",
                          "iptv_service_port": null,
                          "iptv_vlan": null,
                          "iptv_cvlan": null,
                          "iptv_svlan": null,
                          "iptv_tag_transform_mode": null,
                          "iptv_upload_speed": null,
                          "iptv_download_speed": null,
                          "iptv_allowed_macs": null,
                          "iptv_filtered_macs": null,
                          "custom_template_name": null,
                          "tr069": "Disabled",
                          "tr069_profile": null,
                          "tr069_device_id": null,
                          "catv": "Not supported by ONU-Type",
                          "administrative_status": "Enabled",
                          "authorization_date": "2023-06-04 00:00:00",
                          "is_synced_after_import": "0",
                          "is_failed_resync_config": "0",
                          "status": null,
                          "last_status_change": null,
                          "signal": null,
                          "signal_1310": null,
                          "signal_1490": null,
                          "latitude": null,
                          "longitude": null,
                          "contact": "",
                          "service_ports": [
                            {
                              "service_port": "348",
                              "vlan": "20",
                              "cvlan": "",
                              "svlan": "",
                              "tag_transform_mode": "translate",
                              "upload_speed": "1G",
                              "download_speed": "1G"
                            }
                          ],
                          "ethernet_ports": [
                            {
                              "port": "eth_0/1",
                              "admin_state": "Enabled",
                              "mode": "Access",
                              "dhcp": "No control",
                              "vlan": "20",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/2",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/3",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/4",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            }
                          ],
                          "wifi_ports": [],
                          "voip_ports": [],
                          "applied_configuration_preset": {
                            "preset_id": 5,
                            "preset_name": "test preset",
                            "is_reversible": true,
                            "applied_at": "2026-07-23 06:51:54",
                            "status": "active"
                          }
                        },
                        {
                          "unique_external_id": "test2",
                          "pon_type": "gpon",
                          "gpon_channel": "gpon",
                          "sn": "ZTEGC171A71A",
                          "name": "Test name2",
                          "olt_id": "53",
                          "olt_name": "OLT 1",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "onu_type_id": "2",
                          "onu_type_name": "ZTE-F600",
                          "zone_id": "1",
                          "zone_name": "City Center",
                          "address": null,
                          "odb_name": "ODB 2",
                          "odb_port": "",
                          "mode": "Routing",
                          "wan_mode": "Setup via ONU webpage",
                          "ip_address": null,
                          "subnet_mask": null,
                          "default_gateway": null,
                          "dns1": null,
                          "dns2": null,
                          "username": null,
                          "password": null,
                          "mgmt_ip_mode": "Inactive",
                          "mgmt_ip_address": null,
                          "mgmt_ip_subnet_mask": null,
                          "mgmt_ip_default_gateway": null,
                          "mgmt_ip_dns1": null,
                          "mgmt_ip_dns2": null,
                          "mgmt_ip_service_port": null,
                          "mgmt_ip_vlan": null,
                          "mgmt_ip_cvlan": null,
                          "mgmt_ip_svlan": null,
                          "mgmt_ip_tag_transform_mode": null,
                          "voip_service": "Disabled",
                          "voip_ip_mode": "DHCP",
                          "voip_ip_address": null,
                          "voip_ip_subnet_mask": null,
                          "voip_ip_default_gateway": null,
                          "voip_ip_dns1": null,
                          "voip_ip_dns2": null,
                          "voip_ip_service_port": null,
                          "voip_ip_vlan": null,
                          "voip_ip_cvlan": null,
                          "voip_ip_svlan": null,
                          "voip_ip_tag_transform_mode": null,
                          "iptv": "OLT IPTV module disabled",
                          "iptv_service_port": null,
                          "iptv_vlan": null,
                          "iptv_cvlan": null,
                          "iptv_svlan": null,
                          "iptv_tag_transform_mode": null,
                          "iptv_upload_speed": null,
                          "iptv_download_speed": null,
                          "iptv_allowed_macs": null,
                          "iptv_filtered_macs": null,
                          "custom_template_name": null,
                          "tr069": "Disabled",
                          "tr069_profile": null,
                          "tr069_device_id": null,
                          "catv": "Enabled",
                          "administrative_status": "Enabled",
                          "authorization_date": "2021-08-30 00:00:00",
                          "is_synced_after_import": 1,
                          "is_failed_resync_config": 0,
                          "status": null,
                          "last_status_change": "2025-12-30 12:00:00",
                          "signal": null,
                          "signal_1310": null,
                          "signal_1490": null,
                          "latitude": null,
                          "longitude": null,
                          "contact": "",
                          "service_ports": [
                            {
                              "service_port": "100",
                              "vlan": "150",
                              "cvlan": "",
                              "svlan": "",
                              "tag_transform_mode": "",
                              "upload_speed": "1G",
                              "download_speed": "1G"
                            }
                          ],
                          "ethernet_ports": [
                            {
                              "port": "eth_0/1",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/2",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/3",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/4",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            }
                          ],
                          "wifi_ports": [],
                          "voip_ports": [],
                          "applied_configuration_preset": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_all_onus_gps_coordinates": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONUs GPS coordinates",
        "operationId": "get_all_onus_gps_coordinates",
        "x-postman-id": "fb1b572f-da0e-46f1-85e3-512d2bc4e98f",
        "x-postman-order": 29,
        "description": "Gets all the ONUs GPS coordinates for a specified OLT ID, board, PON port or zone. If no OLT ID, board, PON port or zone is specified, then all the ONUs GPS coordinates on all OLTs will be returned.\n\nMaximum recommended calls for \"Get all ONUs GPS coordinates\": 3 per hour (calls are blocked after the limit is reached).\n\nThe response consists of:\n\n- ONU latitude\n- ONU longitude\n\nIt returns a 400 error code when:\n\n- no OLT was found for the provided OLT ID\n- no OLT ID was provided with board or PON port\n- no OLT ID or no board was provided with PON port\n- no Zone was found for the provided zone name",
        "parameters": [
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT for which to get the ONUs GPS coordinates. Leave empty if you want ONUs GPS coordinates from all OLTs"
          },
          {
            "name": "board",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "2"
            },
            "description": "(Int) OLT board where the ONUs are placed. Leave it empty if you want ONUs GPS coordinates from all boards on the provided OLT ID"
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "4"
            },
            "description": "(Int) OLT PON port where ONUs are placed. Leave it empty if you want ONUs GPS coordinates from all PON ports on the provided board"
          },
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "City Centre"
            },
            "description": "(String) The zone where the ONUs are located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character. Leave it empty if you want ONUs GPS coordinates from all the zones"
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "onus": [
                        {
                          "unique_external_id": "test1",
                          "latitude": "41.22",
                          "longitude": "33.5"
                        },
                        {
                          "unique_external_id": "test2",
                          "latitude": "41.20",
                          "longitude": "32.88"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_status/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU status by ONU unique external ID",
        "operationId": "get_onu_status_by_onu_unique_external_id",
        "x-postman-id": "8b411df2-20c4-4249-9897-695d06b4b0ab",
        "x-postman-order": 30,
        "description": "📡 Performs real-time data collection directly from the OLT  \n**🔧 Designed for LIVE debugging and troubleshooting only**\n\n❗ **Restrictions**🚫 DO NOT use this endpoint in:\n\n- automated polling scripts\n- monitoring loops\n- bulk data collection jobs\n\n**🚫 DO NOT call this endpoint repeatedly for multiple ONUs**\n\nUse get_onu_status only when:\n\n- actively debugging a specific ONU\n- investigating a real-time issue reported by a user\n\nFor regular monitoring or integrations, use endpoints such as Get all onus statuses and cache the response in your system for 5 minutes.\n\nGets the ONU status for a specified ONU unique external ID.\n\nONU status returned can be:\n\n- Online\n- Power fail\n- LOS\n- Offline\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT wasn't able to process the command\n- ONU is saved for later authorization and doesn't have a status yet",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "onu_status": "Online",
                      "last_status_change": "2025-12-30 12:00:00"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_status_history/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU status history by ONU unique external ID",
        "operationId": "get_onu_status_history_by_onu_unique_external_id",
        "x-postman-id": "b02c2e0c-8fc3-49af-b848-02b1278346d6",
        "x-postman-order": 31,
        "description": "Gets the status history of an ONU for a time period: how long the ONU was Online, LOS, Power fail, Offline or Log in, and how many times it went down.\n\nThe data comes from the SmartOLT database. This endpoint does not send commands to the OLT.\n\n**Time period**\n\n- Leave `from` and `to` empty to get the last 24 hours.\n- Or send `from` and `to` together, as `YYYY-MM-DD`. Both days are included. `from` can be up to 365 days ago.\n- All times are in the time zone of your SmartOLT account. The response shows it in `timezone`.\n\n**Detail**\n\n- If the period starts in the last 7 days, `detail` is `transitions`. You get each status period in `periods`.\n- If the period starts earlier, `detail` is `daily`. You get the seconds in each status per day in `days`.\n\n**Fields**\n\n- `summary.online_percent`: the percentage of time Online. Time with no data (`unknown`) is not counted. It is `null` when there is no data.\n- `summary.seconds` and `days[].seconds`: seconds in each status: online, los, power_fail, offline, login, unknown.\n- `interruptions`: how many times the ONU went from Online to another status.\n- `periods[].cause`: `olt_reboot` when the status changed because the OLT rebooted, otherwise `null`.\n\nIt returns a 400 error code when:\n\n- no ONU was found for the provided ONU external ID\n- the dates are not valid (error code `invalid_date_range`)",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "2026-09-01"
            },
            "description": "(String) The first day, as YYYY-MM-DD. Send it together with `to`. Leave both empty to get the last 24 hours."
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "2026-09-30"
            },
            "description": "(String) The last day, as YYYY-MM-DD. This day is included. It cannot be in the future."
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK (last 24 hours)",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok_last_24_hours": {
                    "summary": "200 - OK (last 24 hours)",
                    "value": {
                      "onu_external_id": "ext-1001",
                      "from": "2026-10-08 10:00:00",
                      "to": "2026-10-09 10:00:00",
                      "timezone": "Europe/Berlin",
                      "detail": "transitions",
                      "summary": {
                        "online_percent": 98.26,
                        "known_seconds": 86400,
                        "seconds": {
                          "online": 84900,
                          "los": 1200,
                          "power_fail": 300,
                          "offline": 0,
                          "login": 0,
                          "unknown": 0
                        },
                        "interruptions": 2
                      },
                      "periods": [
                        {
                          "status": "online",
                          "from": "2026-10-08 10:00:00",
                          "to": "2026-10-08 22:10:00",
                          "seconds": 43800,
                          "cause": null
                        },
                        {
                          "status": "los",
                          "from": "2026-10-08 22:10:00",
                          "to": "2026-10-08 22:30:00",
                          "seconds": 1200,
                          "cause": null
                        },
                        {
                          "status": "online",
                          "from": "2026-10-08 22:30:00",
                          "to": "2026-10-09 03:00:00",
                          "seconds": 16200,
                          "cause": null
                        },
                        {
                          "status": "power_fail",
                          "from": "2026-10-09 03:00:00",
                          "to": "2026-10-09 03:05:00",
                          "seconds": 300,
                          "cause": null
                        },
                        {
                          "status": "online",
                          "from": "2026-10-09 03:05:00",
                          "to": "2026-10-09 10:00:00",
                          "seconds": 24900,
                          "cause": null
                        }
                      ],
                      "status": true,
                      "response_code": "success"
                    }
                  },
                  "200_ok_daily_older_period": {
                    "summary": "200 - OK (daily, older period)",
                    "value": {
                      "onu_external_id": "ext-1001",
                      "from": "2026-09-01 00:00:00",
                      "to": "2026-09-03 00:00:00",
                      "timezone": "Europe/Berlin",
                      "detail": "daily",
                      "summary": {
                        "online_percent": 99.65,
                        "known_seconds": 172800,
                        "seconds": {
                          "online": 172200,
                          "los": 600,
                          "power_fail": 0,
                          "offline": 0,
                          "login": 0,
                          "unknown": 0
                        },
                        "interruptions": 1
                      },
                      "days": [
                        {
                          "date": "2026-09-01",
                          "seconds": {
                            "online": 85800,
                            "los": 600,
                            "power_fail": 0,
                            "offline": 0,
                            "login": 0,
                            "unknown": 0
                          },
                          "interruptions": 1
                        },
                        {
                          "date": "2026-09-02",
                          "seconds": {
                            "online": 86400,
                            "los": 0,
                            "power_fail": 0,
                            "offline": 0,
                            "login": 0,
                            "unknown": 0
                          },
                          "interruptions": 0
                        }
                      ],
                      "status": true,
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid dates",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_dates": {
                    "summary": "400 - Invalid dates",
                    "value": {
                      "status": false,
                      "error": "Use from and to together as YYYY-MM-DD, from not after to, within the last 365 days.",
                      "error_code": "invalid_date_range"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_signal/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU signal by ONU unique external ID",
        "operationId": "get_onu_signal_by_onu_unique_external_id",
        "x-postman-id": "91e6e5ac-47c5-4c13-a575-c8d75d56bf31",
        "x-postman-order": 32,
        "description": "Gets the ONU signal for a specified ONU unique external ID.\n\nThis endpoint is should be used only for getting fresh data for a limited number of ONUs between regular polling intervals.\n\nTo maintain system performance for all users, heavy usage may be subject to rate limiting.\n\n❗ **Restrictions\\*\\*\\*\\*🚫 DO NOT use this endpoint in:**\n\n- automated polling scripts\n- monitoring loops\n- bulk data collection jobs\n\n**🚫 DO NOT call this endpoint repeatedly for multiple ONUs**\n\nUse get_onu_signal only when:\n\n- actively debugging a specific ONT\n- investigating a real-time issue reported by a user\n\nThe response consists of:\n\n- ONU signal: 'Critical', 'Warning', 'Very good'\n- ONU signal value: 1490 signal / 1310 signal\n- ONU signal 1310 value\n- ONU signal 1490 value\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT wasn't able to process the command\n- ONU is saved for later authorization and doesn't have signal yet",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "onu_signal": "Very good",
                      "onu_signal_value": "-10.39 dBm / -10.74 dBm ",
                      "onu_signal_1310": "-10.74 dBm",
                      "onu_signal_1490": "-10.39 dBm"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_details/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU details by ONU unique external ID",
        "operationId": "get_onu_details_by_onu_unique_external_id",
        "x-postman-id": "caa2c075-2b1c-4b0a-b36e-8dccd89ddf36",
        "x-postman-order": 33,
        "description": "Get ONU details for a specified ONU unique external ID.\n\nThe response consists of:\n\n- ONU name\n- ONU SN\n- ONU board, port, onu etc\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n\n***Important: Direct ONU link by External ID***  \nUse this URL in your CRM/ERP to directly point to the ONU in SmartOLT:  \n`https://{subdomain}.smartolt.com/onu/details/{onu_external_id}`",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "onu_details": {
                        "unique_external_id": "test2",
                        "pon_type": "gpon",
                        "gpon_channel": "gpon",
                        "sn": "ZTEGC171A71A",
                        "name": "Test name2",
                        "olt_id": "53",
                        "olt_name": "OLT 1",
                        "board": "1",
                        "port": "4",
                        "onu": "4",
                        "onu_type_id": "2",
                        "onu_type_name": "ZTE-F600",
                        "zone_id": "1",
                        "zone_name": "City Center",
                        "address": null,
                        "odb_name": "ODB 2",
                        "odb_port": "",
                        "mode": "Routing",
                        "wan_mode": "Setup via ONU webpage",
                        "ip_address": null,
                        "subnet_mask": null,
                        "default_gateway": null,
                        "dns1": null,
                        "dns2": null,
                        "username": null,
                        "password": null,
                        "mgmt_ip_mode": "Inactive",
                        "mgmt_ip_address": null,
                        "mgmt_ip_subnet_mask": null,
                        "mgmt_ip_default_gateway": null,
                        "mgmt_ip_dns1": null,
                        "mgmt_ip_dns2": null,
                        "mgmt_ip_service_port": null,
                        "mgmt_ip_vlan": null,
                        "mgmt_ip_cvlan": null,
                        "mgmt_ip_svlan": null,
                        "mgmt_ip_tag_transform_mode": null,
                        "voip_service": "Disabled",
                        "voip_ip_mode": "DHCP",
                        "voip_ip_address": null,
                        "voip_ip_subnet_mask": null,
                        "voip_ip_default_gateway": null,
                        "voip_ip_dns1": null,
                        "voip_ip_dns2": null,
                        "voip_ip_service_port": null,
                        "voip_ip_vlan": null,
                        "voip_ip_cvlan": null,
                        "voip_ip_svlan": null,
                        "voip_ip_tag_transform_mode": null,
                        "iptv": "OLT IPTV module disabled",
                        "iptv_service_port": null,
                        "iptv_vlan": null,
                        "iptv_cvlan": null,
                        "iptv_svlan": null,
                        "iptv_tag_transform_mode": null,
                        "iptv_upload_speed": null,
                        "iptv_download_speed": null,
                        "iptv_allowed_macs": null,
                        "iptv_filtered_macs": null,
                        "custom_template_name": null,
                        "tr069": "Disabled",
                        "tr069_profile": null,
                        "tr069_device_id": null,
                        "catv": "Enabled",
                        "administrative_status": "Enabled",
                        "authorization_date": "2021-08-30 00:00:00",
                        "is_synced_after_import": 1,
                        "is_failed_resync_config": 0,
                        "status": null,
                        "last_status_change": "2025-12-30 12:00:00",
                        "signal": null,
                        "signal_1310": null,
                        "signal_1490": null,
                        "latitude": null,
                        "longitude": null,
                        "contact": "",
                        "service_ports": [
                          {
                            "service_port": "100",
                            "vlan": "150",
                            "cvlan": "",
                            "svlan": "",
                            "tag_transform_mode": "",
                            "upload_speed": "1G",
                            "download_speed": "1G"
                          }
                        ],
                        "ethernet_ports": [
                          {
                            "port": "eth_0/1",
                            "admin_state": "Enabled",
                            "mode": "LAN",
                            "dhcp": "No control",
                            "vlan": "",
                            "allowed_vlans": ""
                          },
                          {
                            "port": "eth_0/2",
                            "admin_state": "Enabled",
                            "mode": "LAN",
                            "dhcp": "No control",
                            "vlan": "",
                            "allowed_vlans": ""
                          },
                          {
                            "port": "eth_0/3",
                            "admin_state": "Enabled",
                            "mode": "LAN",
                            "dhcp": "No control",
                            "vlan": "",
                            "allowed_vlans": ""
                          },
                          {
                            "port": "eth_0/4",
                            "admin_state": "Enabled",
                            "mode": "LAN",
                            "dhcp": "No control",
                            "vlan": "",
                            "allowed_vlans": ""
                          }
                        ],
                        "wifi_ports": [],
                        "voip_ports": [],
                        "applied_configuration_preset": {
                          "preset_id": 5,
                          "preset_name": "test preset",
                          "is_reversible": true,
                          "applied_at": "2026-07-23 06:51:54",
                          "status": "active"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onus_details_by_sn/{onu_sn}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONUs details by SN",
        "operationId": "get_onus_details_by_sn",
        "x-postman-id": "7ee627e7-f70a-4b88-8472-45d29ec9691f",
        "x-postman-order": 34,
        "description": "Get ONU details for a specified SN.\n\nThis endpoint is should be used only for getting fresh data for a limited number of ONTs between regular polling intervals.\n\nTo maintain system performance for all users, heavy usage may be subject to rate limiting.\n\n❗ **Restrictions\\*\\*\\*\\*🚫 DO NOT use this endpoint in:**\n\n- automated polling scripts\n- monitoring loops\n- bulk data collection jobs\n\n**🚫 DO NOT call this endpoint repeatedly for multiple ONUs**\n\nUse get_onus_details_by_sn only when:\n\n- actively debugging a specific ONT\n- investigating a real-time issue reported by a user\n\nThe response consists of:\n\n- ONU name\n- ONU SN\n- ONU board, port, onu etc\n\nIt returns a 400 error code when:\n\n- no SN was provided\n\n***Important: Direct ONU link by External ID***  \nUse this URL in your CRM/ERP to directly point to the ONU in SmartOLT:  \n`https://{subdomain}.smartolt.com/onu/details/{onu_external_id}`",
        "parameters": [
          {
            "name": "onu_sn",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "onus": [
                        {
                          "unique_external_id": "test2",
                          "pon_type": "gpon",
                          "gpon_channel": "gpon",
                          "sn": "ZTEGC171A71A",
                          "name": "Test name2",
                          "olt_id": "53",
                          "olt_name": "OLT 1",
                          "board": "1",
                          "port": "4",
                          "onu": "4",
                          "onu_type_id": "2",
                          "onu_type_name": "ZTE-F600",
                          "zone_id": "1",
                          "zone_name": "City Center",
                          "address": null,
                          "odb_name": "ODB 2",
                          "odb_port": "",
                          "mode": "Routing",
                          "wan_mode": "Setup via ONU webpage",
                          "ip_address": null,
                          "subnet_mask": null,
                          "default_gateway": null,
                          "dns1": null,
                          "dns2": null,
                          "username": null,
                          "password": null,
                          "mgmt_ip_mode": "Inactive",
                          "mgmt_ip_address": null,
                          "mgmt_ip_subnet_mask": null,
                          "mgmt_ip_default_gateway": null,
                          "mgmt_ip_dns1": null,
                          "mgmt_ip_dns2": null,
                          "mgmt_ip_service_port": null,
                          "mgmt_ip_vlan": null,
                          "mgmt_ip_cvlan": null,
                          "mgmt_ip_svlan": null,
                          "mgmt_ip_tag_transform_mode": null,
                          "voip_service": "Disabled",
                          "voip_ip_mode": "DHCP",
                          "voip_ip_address": null,
                          "voip_ip_subnet_mask": null,
                          "voip_ip_default_gateway": null,
                          "voip_ip_dns1": null,
                          "voip_ip_dns2": null,
                          "voip_ip_service_port": null,
                          "voip_ip_vlan": null,
                          "voip_ip_cvlan": null,
                          "voip_ip_svlan": null,
                          "voip_ip_tag_transform_mode": null,
                          "iptv": "OLT IPTV module disabled",
                          "iptv_service_port": null,
                          "iptv_vlan": null,
                          "iptv_cvlan": null,
                          "iptv_svlan": null,
                          "iptv_tag_transform_mode": null,
                          "iptv_upload_speed": null,
                          "iptv_download_speed": null,
                          "iptv_allowed_macs": null,
                          "iptv_filtered_macs": null,
                          "custom_template_name": null,
                          "tr069": "Disabled",
                          "tr069_profile": null,
                          "tr069_device_id": null,
                          "catv": "Enabled",
                          "administrative_status": "Enabled",
                          "authorization_date": "2021-08-30 00:00:00",
                          "is_synced_after_import": 1,
                          "is_failed_resync_config": 0,
                          "status": null,
                          "last_status_change": "2025-12-30 12:00:00",
                          "signal": null,
                          "signal_1310": null,
                          "signal_1490": null,
                          "latitude": null,
                          "longitude": null,
                          "contact": "",
                          "service_ports": [
                            {
                              "service_port": "100",
                              "vlan": "150",
                              "cvlan": "",
                              "svlan": "",
                              "tag_transform_mode": "",
                              "upload_speed": "1G",
                              "download_speed": "1G"
                            }
                          ],
                          "ethernet_ports": [
                            {
                              "port": "eth_0/1",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/2",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/3",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            },
                            {
                              "port": "eth_0/4",
                              "admin_state": "Enabled",
                              "mode": "LAN",
                              "dhcp": "No control",
                              "vlan": "",
                              "allowed_vlans": ""
                            }
                          ],
                          "wifi_ports": [],
                          "voip_ports": [],
                          "applied_configuration_preset": {
                            "preset_id": 5,
                            "preset_name": "test preset",
                            "is_reversible": true,
                            "applied_at": "2026-07-23 06:51:54",
                            "status": "active"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_full_status_info/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU full status info by ONU unique external ID",
        "operationId": "get_onu_full_status_info_by_onu_unique_external_id",
        "x-postman-id": "d3d19dbd-a232-4e08-93bc-a17500cf4b01",
        "x-postman-order": 35,
        "description": "Gets the ONU full status info for a specified ONU unique external ID.\n\nThis endpoint is resource-intensive and should be used with caution.\n\nTo maintain system performance for all users, heavy usage may be subject to rate limiting.\n\n⏱️ Average response time: ~5 seconds per request  \n📡 Performs real-time data collection directly from the OLT  \n**🔧 Designed for LIVE debugging and troubleshooting only**\n\n❗ **Restrictions  \n🚫 DO NOT use this endpoint in:**\n\n- automated polling scripts\n- monitoring loops\n- bulk data collection jobs\n\n**🚫 DO NOT call this endpoint repeatedly for multiple ONUs**\n\nUse get_onu_full_status_info only when:\n\n- actively debugging a specific ONT\n- investigating a real-time issue reported by a user\n\nFor regular monitoring or integrations, use endpoints such as Get all onus statuses and cache the response in your system for 5 minutes:\n\n[get_all_onus_statuses](#get_all_onus_statuses)\n\nONU full status info contains info about:\n\n- Current status\n- Status history\n- Optical Tx, Rx signals\n- Ethernet interfaces\n- WAN status\n- MAC table\n- Other ONU info\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT wasn't able to process the command\n- ONU is saved for later authorization and doesn't have status info yet",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "full_status_info": "Copyright(C) Huawei Technologies Co., Ltd. 2002-2016. All rights reserved.\nLogin  Time : 2019-02-19 08:44:21+08:00\nLogout Time : 2019-02-19 08:44:23+08:00\nOptical status:\nModule type                            : GPON\nModule sub-type                        : CLASS B+\nRx optical power(dBm)                  : -23.37\nTx optical power(dBm)                  : 1.91\nTemperature(C)                         : 48\nOLT Rx ONT optical power(dBm)          : -28.54\nCATV Rx optical power(dBm)             : -\nONT-ID                  : 0\nControl flag            : active\nRun state               : online\nMatch state             : mismatch\nONT distance(m)         : 1945\nCPU occupation          : 1%\nManagement mode         : OMCI\nDescription             : ONU_Customer_name_zone_Zone_1_descr\nLast down cause         : dying-gasp\nLast up time            : 2019-02-15 07:50:06+08:00\nLast down time          : 2019-02-15 07:49:01+08:00\nLast dying gasp time    : 2019-02-15 07:49:01+08:00\nONT online duration     : 4 day(s), 0 hour(s), 54 minute(s), 24 second(s) \nInteroperability-mode   : ITU-T\nLine profile ID      : 1\nLine profile name    : SMARTOLT_FLEXIBLE_GPON\nMapping mode        :802.1p PRI\nService profile ID   : 34\nService profile name : HS8545M\nRing check switch                 : Enable\nRing port auto-shutdown           : Enable\nHistory:\nIndex               : 10\nUpTime              : 2019-02-15 07:50:02+08:00\nIndex               : 9\nUpTime              : 2019-02-15 07:46:20+08:00\nDownTime            : 2019-02-15 07:49:01+08:00\nDownCause           : PowerFail\nIndex               : 8\nUpTime              : 2019-02-14 17:55:00+08:00\nDownTime            : 2019-02-15 06:49:58+08:00\nDownCause           : PowerFail\nIndex               : 7\nUpTime              : 2019-02-14 01:24:53+08:00\nDownTime            : 2019-02-14 17:54:46+08:00\nDownCause           : ONT LOSi/LOBi alarm\nIndex               : 6\nUpTime              : 2019-02-10 22:20:26+08:00\nDownTime            : 2019-02-14 01:24:00+08:00\nDownCause           : PowerFail\nIndex               : 5\nUpTime              : 2019-02-07 09:44:07+08:00\nDownTime            : 2019-02-10 19:38:31+08:00\nDownCause           : PowerFail\nIndex               : 4\nUpTime              : 2019-02-02 02:36:32+08:00\nDownTime            : 2019-02-07 09:42:48+08:00\nDownCause           : PowerFail\nIndex               : 3\nUpTime              : 2019-02-01 21:50:01+08:00\nDownTime            : 2019-02-02 02:35:33+08:00\nDownCause           : PowerFail\nIndex               : 2\nUpTime              : 2019-01-27 16:48:24+08:00\nDownTime            : 2019-02-01 21:48:58+08:00\nDownCause           : PowerFail\nIndex               : 1\nUpTime              : 2019-01-26 22:16:42+08:00\nDownTime            : 2019-01-27 16:28:00+08:00\nDownCause           : PowerFail\nIndex                      : 1\nName                       : 1_INTERNET_R_VID_20\nService type               : Internet\nConnection type            : IP routed\nIPv4 Connection status     : Connected\nIPv4 access type           : PPPoE\nIPv4 address               : 10.13.1.178\nSubnet mask                : 255.255.255.255\nDefault gateway            : 192.168.38.1\nManage VLAN                : 20\nManage priority            : 0\nMAC address                : 0087-C6AA-082A\nIPv4 switch                : Enable\nIPv6 Connection status     : Invalid\nInterfaces status:\nONT-ID   ONT Port type Speed(Mbps)   Duplex   LinkState  RingStatus\n0         1         GE -             -        down       noloop    \n0         2         FE -             -        down       noloop    \n0         3         FE -             -        down       noloop    \n0         4         FE -             -        down       noloop    \nVoIP status:\nOnline MACs on this ONU:\nSRVPort  TYPE MAC            MAC TYPE F /S /P  ONTID VCI   VLAN ID\n4     -  gpon 0007-c49a-083a dynamic  0 /1 /2   0    1          20\n"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_running_config/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU running config by ONU unique external ID",
        "operationId": "get_onu_running_config_by_onu_unique_external_id",
        "x-postman-id": "0db06176-968a-4673-aac0-bf509256ac74",
        "x-postman-order": 36,
        "description": "Gets the ONU running config from the OLT for a specified ONU unique external ID.   \n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT wasn't able to process the command\n- ONU is saved for later authorization and doesn't have status info yet",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "running_config": "\n[MA5800V100R017: 5800]\n[gpon]\n  <gpon-0/1>\n interface gpon 0/1\n ont add 2 0 sn-auth \"485754439999999B\" omci ont-lineprofile-id 1 ont-srvprofile-id 34 desc \"ONU_Customer_Name_zone_Zone_1_descr__authd_20181219\" \n[bbs-config]\n  <bbs-config>\n service-port 4 vlan 20 gpon 0/1/2 ont 0 gemport 1 multi-service user-vlan 20 tag-transform translate inbound traffic-table index 12 outbound traffic-table index 34\n\nService-ports on this ONU:\n\n service-port 4 vlan 20 gpon 0/1/2 ont 0 gemport 1 multi-service user-vlan 20 tag-transform translate inbound traffic-table index 12 outbound traffic-table index 34\n\n"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_signal_graph/{onu_external_id}/{graph_type}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU signal graph by ONU unique external ID",
        "operationId": "get_onu_signal_graph_by_onu_unique_external_id",
        "x-postman-id": "be1e3c09-6412-4fb3-b9ae-59235ff38b0d",
        "x-postman-order": 37,
        "description": "Gets the ONU signal graph for a specified ONU unique external ID.   \n\nThe graph_type can be:\n\n- hourly\n- daily\n- weekly\n- monthly\n- yearly\n\nThe response consists of:\n\n- Graph png image\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- ONU doesn't have signal graph yet\n\nYou can feed the response directly to an img tag in the src attribute with a Content-type header of \"image/png\".\nExample:\n\nPHP\n\n```php\nheader(\"Content-type: image/png\");\necho $response_graph;\n```\n\nHTML\n\n```html\nimg src=\"link_to_your_method_where_you_call_the_api\" alt=\"hourly signal not yet generated\"\n```",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "graph_type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "text/plain": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": "Graph image"
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_traffic_graph/{onu_external_id}/{graph_type}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU traffic graph by ONU unique external ID",
        "operationId": "get_onu_traffic_graph_by_onu_unique_external_id",
        "x-postman-id": "8342f9ca-d6e2-4938-b5a0-8be0531d75a9",
        "x-postman-order": 38,
        "description": "Gets the ONU traffic graph for a specified ONU unique external ID.   \n\nThe graph_type can be:\n\n- hourly\n- daily\n- weekly\n- monthly\n- yearly\n\nThe response consists of:\n\n- Graph png image\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- ONU doesn't have traffic graph yet\n\nYou can feed the response directly to an img tag in the src attribute with a Content-type header of \"image/png\".\nExample:\n\nPHP\n\n```php\nheader(\"Content-type: image/png\");\necho $response_graph;\n```\n\nHTML\n\n```html\nimg src=\"link_to_your_method_where_you_call_the_api\" alt=\"hourly traffic not yet generated\"\n```",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "graph_type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "text/plain": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": "Graph image"
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_speed_profiles/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU speed profiles by ONU unique external ID",
        "operationId": "get_onu_speed_profiles_by_onu_unique_external_id",
        "x-postman-id": "a55774c1-5ad9-40c9-8078-a7a4710eb081",
        "x-postman-order": 39,
        "description": "Get ONU speed profiles for a specified ONU unique external ID.   \n\nThe response consists of:\n\n- ONU upload speed profile name\n- ONU download speed profile name\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "upload_speed_profile_name": "10M",
                      "download_speed_profile_name": "50M"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_router_hosts/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU router hosts by ONU unique external ID",
        "operationId": "get_onu_router_hosts_by_onu_unique_external_id",
        "x-postman-id": "542306a5-1a6f-4c64-b70a-fb2440a5a043",
        "x-postman-order": 40,
        "description": "Returns the list of LAN hosts (connected devices) currently seen by the ONU's router, read live from the CPE over TR-069.\n\n📡 Performs real-time data collection directly from the OLT  \n**🔧 Designed for LIVE debugging and troubleshooting only**\n\n**🚫 DO NOT call this endpoint every time your CRM loads a page**\n\n❗ **Restrictions**🚫 DO NOT use this endpoint in:\n\n- automated polling scripts\n- monitoring loops\n- bulk data collection jobs\n\n**🚫 DO NOT call this endpoint repeatedly for multiple ONUs**\n\nUse get_onu_router_hosts only when:\n\n- actively debugging a specific ONU\n- investigating a real-time issue reported by a user\n\n**Only one call at a time:** This endpoint allows a single in-flight request at once. If another call to it is already being processed, further calls return HTTP 429 with `error_code: already_a_request_in_progress` — wait for the running call to finish before retrying.\n\nThe ONU must be online and TR-069 must be enabled and integrated on it; otherwise the device is treated as offline and the call fails.\n\n**Success response** (`status: true`) contains `response.hostlist`, an object keyed by host index. Each host is the raw TR-069 `Hosts.Host` entry (fields such as `HostName`, `IPAddress`, `MACAddress`, `Active`, `AddressSource`, `Layer2Interface`, ...); available fields depend on the CPE.\n\n**Error codes** (`error_code` in the `{status:false, error, error_code}` body):\n\n- `specify_field` (400) — no `onu_external_id` supplied.\n- `specify_valid_field` (400) — no ONU matches the supplied id.\n- `already_a_request_in_progress` (429) — another call to this endpoint is already running; retry after it completes.\n- `tr069_unable_to_process_command` (400) — TR-069 not enabled/integrated on the ONU, or the device is offline / did not respond.\n- `forbidden` (403) — id is outside your restriction group, or the OLT subscription is not valid.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "hostlist": {
                          "1": {
                            "HostName": "android-a1b2c3d4",
                            "IPAddress": "192.168.1.20",
                            "MACAddress": "AA:BB:CC:DD:EE:01",
                            "Active": "true",
                            "AddressSource": "DHCP",
                            "Layer2Interface": "WiFi.SSID.1"
                          },
                          "2": {
                            "HostName": "desktop-pc",
                            "IPAddress": "192.168.1.21",
                            "MACAddress": "AA:BB:CC:DD:EE:02",
                            "Active": "true",
                            "AddressSource": "DHCP",
                            "Layer2Interface": "Ethernet.1"
                          }
                        }
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Device offline / TR-069 not available",
            "content": {
              "application/json": {
                "examples": {
                  "400_device_offline_tr_069_not_available": {
                    "summary": "400 - Device offline / TR-069 not available",
                    "value": {
                      "status": false,
                      "error": "The device is offline or could not process the command.",
                      "error_code": "tr069_unable_to_process_command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Please specify a valid ONU external ID",
                      "error_code": "specify_valid_field"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "429 - Another request already in progress",
            "content": {
              "application/json": {
                "examples": {
                  "429_another_request_already_in_progress": {
                    "summary": "429 - Another request already in progress",
                    "value": {
                      "status": false,
                      "error": "There's already a request in progress, please try again later",
                      "error_code": "already_a_request_in_progress"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_onu_macs/{onu_external_id}": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU MAC addresses by ONU unique external ID",
        "operationId": "get_onu_mac_addresses_by_onu_unique_external_id",
        "x-postman-id": "480be176-86e6-4d12-a0fb-9281f47bd27c",
        "x-postman-order": 41,
        "description": "Gets the MAC addresses that the OLT learned behind one ONU, for a specified ONU unique external ID.\n\n📡 This endpoint reads the data directly from the OLT. A call can take up to about 35 seconds. Use it for one ONU at a time.\n\nEach MAC address has 12 lowercase hexadecimal characters with no separators, for example `a4b1c2d3e4f5`.\n\nThe response has `verified: true` only when the OLT answered. An empty `mac_addresses` list then means that the ONU has no MAC addresses. If the OLT did not answer, you get an error, not an empty list.\n\nIt returns a 400 error code when:\n\n- no ONU was found for the provided ONU external ID\n- the OLT is unreachable (error code `olt_unreachable`)\n- the OLT model does not support this read (error code `olt_script_not_available`)\n- the OLT did not accept the command (error code `olt_unable_to_process_command`)",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "onu_external_id": "ext-1001",
                      "onu_id": 1001,
                      "olt_id": 1,
                      "verified": true,
                      "mac_addresses": [
                        "a4b1c2d3e4f5",
                        "001122aabbcc"
                      ],
                      "total": 2,
                      "status": true,
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT unreachable",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_unreachable": {
                    "summary": "400 - OLT unreachable",
                    "value": {
                      "status": false,
                      "error": "OLT unreachable",
                      "error_code": "olt_unreachable"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: 100"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/search_by_mac": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Search ONU by MAC address",
        "operationId": "search_onu_by_mac_address",
        "x-postman-id": "1b89a15f-5694-457d-8003-1bce41e15eea",
        "x-postman-order": 42,
        "description": "Finds the ONU behind which the OLT learned a MAC address. This endpoint reads the data directly from the OLTs.\n\n**Limits** (for your SmartOLT account, not for each API key):\n\n- With `olt_id`: one search every 10 seconds, and up to 100 searches per hour.\n- Without `olt_id` (all OLTs): one search every 60 seconds, and up to 10 searches per hour. The search can take up to about 4 minutes.\n- Only one search of each type can run at a time.\n- When you are over a limit, you get HTTP 429 with a `Retry-After` header.\n\n**How to read the result**\n\n- `verified` is `true` only when all searched OLTs answered. If it is `false` and `matches` is empty, the MAC address can still be on an OLT that did not answer.\n- `olts` shows the result for each OLT: `answered`, `skipped_unreachable`, `deadline`, `vendor_not_supported`, `subscription_expired` or another failure.\n- `matched_in_smartolt` is `false` when the OLT has the MAC address on an ONU that is not in SmartOLT.\n- `restricted` is `true` when your API key cannot see that ONU. The ONU position is then `null`.\n\nOnly Huawei, ZTE and FiberHome OLTs are supported.\n\nIt returns a 400 error code when:\n\n- no MAC address was provided (error code `specify_mac_address`)\n- the MAC address is not valid (error code `specify_valid_mac_address`)\n- the OLT vendor is not supported (error code `olt_vendor_not_supported`)\n- the OLT with the provided `olt_id` did not answer (error code `olt_unreachable`)",
        "parameters": [
          {
            "name": "mac_address",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "a4:b1:c2:d3:e4:f5"
            },
            "description": "(String) The MAC address to find. You can use `:`, `-` or `.` as separators, or no separators."
          },
          {
            "name": "olt_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": "1"
            },
            "description": "(Int) The ID of the OLT to search. Leave it empty to search all OLTs. A search of all OLTs is slower and has a lower limit."
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK (one OLT)",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok_one_olt": {
                    "summary": "200 - OK (one OLT)",
                    "value": {
                      "mac_address": "a4b1c2d3e4f5",
                      "verified": true,
                      "olts_queried": 1,
                      "olts_answered": 1,
                      "olts": [
                        {
                          "olt_id": 1,
                          "olt_name": "OLT-A",
                          "status": "answered"
                        }
                      ],
                      "matches": [
                        {
                          "olt_id": 1,
                          "olt_name": "OLT-A",
                          "mac_address": "a4b1c2d3e4f5",
                          "pon_type": "gpon",
                          "frame": 0,
                          "board": 0,
                          "port": 5,
                          "onu": 15,
                          "vlan": 100,
                          "restricted": false,
                          "matched_in_smartolt": true,
                          "onu_id": 1001,
                          "onu_external_id": "ext-1001",
                          "sn": "HWTC00000015"
                        }
                      ],
                      "total": 1,
                      "status": true,
                      "response_code": "success"
                    }
                  },
                  "200_ok_all_olts_one_did_not_answer": {
                    "summary": "200 - OK (all OLTs, one did not answer)",
                    "value": {
                      "mac_address": "a4b1c2d3e4f5",
                      "verified": false,
                      "olts_queried": 2,
                      "olts_answered": 1,
                      "olts": [
                        {
                          "olt_id": 1,
                          "olt_name": "OLT-A",
                          "status": "answered"
                        },
                        {
                          "olt_id": 2,
                          "olt_name": "OLT-B",
                          "status": "skipped_unreachable"
                        }
                      ],
                      "matches": [],
                      "total": 0,
                      "status": true,
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid MAC address",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_mac_address": {
                    "summary": "400 - Invalid MAC address",
                    "value": {
                      "status": false,
                      "error": "Please specify a valid MAC",
                      "error_code": "specify_valid_mac_address"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "429 - Too many searches",
            "content": {
              "application/json": {
                "examples": {
                  "429_too_many_searches": {
                    "summary": "429 - Too many searches",
                    "value": {
                      "status": false,
                      "error": "MAC search can run at most once every 60s. Retry in 42s.",
                      "error_code": "mac_search_fanout_min_interval"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/system/save_config": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Save OLTs config",
        "operationId": "save_olts_config",
        "x-postman-id": "376dc9b4-e36a-418e-8fe4-4eae708ac8b1",
        "x-postman-order": 43,
        "description": "The request returns succesfully if the OLTs config was saved successfully.\n\nIt returns a 400 error code when:\n\n- OLT was unable to process the command",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "OLTs config saved"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_authorization_presets": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get all ONU authorization presets by OLT unique ID",
        "operationId": "get_all_onu_authorization_presets_by_olt_unique_id",
        "x-postman-id": "dd71acb8-4ee3-4b33-8fc8-030025e2d257",
        "x-postman-order": 44,
        "description": "Returns all ONU authorization presets for a specified OLT unique ID.\n\n## What the response tells you\n\n`criteria` is what the preset matches on. `applies` is what it will configure:\n\n- Names, not ids, for zone / splitter / ONU type / speed profiles / template.\n- `odb_port_mode` — `null` if the preset sets no splitter, `\"none\"` if it attaches the ONU to the  \n  splitter **without** a port, `\"auto\"` if a free port is picked at authorization time. A preset in  \n  `auto` mode rejects a caller-supplied `odb_port`; one in `none` mode accepts it.\n- `sets_tr069`, `sets_wifi`, `sets_wan`, `sets_web_credentials`, `sets_mgmt_ip` — booleans  \n  only. The underlying credentials, WiFi config and PPPoE password are **never** selected by  \n  this query, so they cannot leak through this endpoint. Each flag mirrors the condition the  \n  matching apply step actually uses, so a `true` means the step will really run.\n\nPresets are filtered by the API key's zone and VLAN restrictions: one pointing at a zone or  \nVLAN outside your scope is dropped rather than disclosing its name or id.",
        "parameters": [
          {
            "name": "olt_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "{{olt_id}}"
            },
            "description": "OLT ID"
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "authorization_presets": [
                          {
                            "id": 31,
                            "name": "Residential FTTH",
                            "description": "Standard residential profile",
                            "olt_id": 90,
                            "is_default": false,
                            "criteria": {
                              "sn_pattern": "HWTC",
                              "board": "1",
                              "port": "0",
                              "pon_type": "gpon",
                              "channel_type": "gpon",
                              "onu_type_name": null
                            },
                            "applies": {
                              "vlan": 10,
                              "zone_name": "Downtown",
                              "odb_name": "ODB-Central-01",
                              "odb_port_mode": "auto",
                              "onu_type_name": null,
                              "fallback_onu_type_name": "110",
                              "upload_speed_name": "1G",
                              "download_speed_name": "100M",
                              "custom_template_name": null,
                              "mode": "Routing",
                              "name_pattern": "FTTH {sn}",
                              "comment_pattern": "{olt} b{board}/p{port}",
                              "sets_tr069": true,
                              "sets_wifi": true,
                              "sets_wan": true,
                              "sets_web_credentials": true,
                              "sets_mgmt_ip": true
                            }
                          },
                          {
                            "id": 32,
                            "name": "Bridged business",
                            "description": "",
                            "olt_id": 90,
                            "is_default": true,
                            "criteria": {
                              "sn_pattern": null,
                              "board": null,
                              "port": null,
                              "pon_type": "gpon",
                              "channel_type": "gpon",
                              "onu_type_name": null
                            },
                            "applies": {
                              "vlan": 25,
                              "zone_name": "Downtown",
                              "odb_name": null,
                              "odb_port_mode": null,
                              "onu_type_name": null,
                              "fallback_onu_type_name": "F670LV9.0",
                              "upload_speed_name": null,
                              "download_speed_name": null,
                              "custom_template_name": null,
                              "mode": "Bridging",
                              "name_pattern": null,
                              "comment_pattern": null,
                              "sets_tr069": false,
                              "sets_wifi": false,
                              "sets_wan": false,
                              "sets_web_credentials": false,
                              "sets_mgmt_ip": false
                            }
                          }
                        ]
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Feature flag off",
            "content": {
              "application/json": {
                "examples": {
                  "400_feature_flag_off": {
                    "summary": "400 - Feature flag off",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: ONU authorization presets are not enabled for this instance.",
                      "error_code": "authorization_presets_not_enabled"
                    }
                  }
                }
              }
            }
          }
        },
        "x-alternatives": [
          {
            "tags": [
              "API endpoints"
            ],
            "summary": "Get all ONU authorization presets applicable to a specific ONU SN",
            "operationId": "get_all_onu_authorization_presets_applicable_to_a_specific_onu_sn",
            "x-postman-id": "0360ab71-0651-44ae-885d-475d22f42076",
            "x-postman-order": 45,
            "description": "Returns all ONU authorization presets for a specified OLT unique ID applicable to a specified ONU SN.\n\n## Applicability\n\nSend **any** of `sn`, `board`, `port` and the response also scores each preset against that  \nONU. Each preset then gains:\n\n- `matches` — the same accept/reject verdict `authorize_onu` will apply\n- `match_score` — how specific the match is (`null` when `matches` is false)\n\nand the response gains `best_match_preset_id` — the preset that would win.\n\nOmit all three and those three fields are **absent entirely**, rather than guessed. Test for  \ntheir presence rather than for a falsy value.\n\nScoring: SN pattern `+200`; board **and** port `+100`; board or port alone `+50`; neither `+1`;  \npon_type `+10`; ONU type `+5`. Ties break on the default preset, then the lowest id.\n\n`board` and `port` must be non-negative integers; anything else is rejected with  \n`incorrect_field_value` rather than silently scoring against a different subject.\n\n## What the response tells you\n\n`criteria` is what the preset matches on. `applies` is what it will configure:\n\n- Names, not ids, for zone / splitter / ONU type / speed profiles / template.\n- `odb_port_mode` — `null` if the preset sets no splitter, `\"none\"` if it attaches the ONU to the  \n  splitter **without** a port, `\"auto\"` if a free port is picked at authorization time. A preset in  \n  `auto` mode rejects a caller-supplied `odb_port`; one in `none` mode accepts it.\n- `sets_tr069`, `sets_wifi`, `sets_wan`, `sets_web_credentials`, `sets_mgmt_ip` — booleans  \n  only. The underlying credentials, WiFi config and PPPoE password are **never** selected by  \n  this query, so they cannot leak through this endpoint. Each flag mirrors the condition the  \n  matching apply step actually uses, so a `true` means the step will really run.\n\nPresets are filtered by the API key's zone and VLAN restrictions: one pointing at a zone or  \nVLAN outside your scope is dropped rather than disclosing its name or id.\n\n## **Typical flow**\n\nCall this with the SN, board and port from the unconfigured list, take  \n`best_match_preset_id`, and pass it to `authorize_onu`.\n\nCheck `applies` on the chosen preset before building the authorize request — every field  \nlisted there must be **omitted** from your call, or it comes back as  \n`authorization_preset_conflicting_parameter`.",
            "parameters": [
              {
                "name": "olt_id",
                "in": "query",
                "required": true,
                "schema": {
                  "type": "string",
                  "example": "{{olt_id}}"
                },
                "description": "OLT ID"
              },
              {
                "name": "sn",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string",
                  "example": "{{sn}}"
                },
                "description": "(String) SN of the ONU you intend to authorize."
              },
              {
                "name": "board",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "integer",
                  "example": "{{board}}"
                },
                "description": "(Int) OLT board where the ONU is placed."
              },
              {
                "name": "port",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "integer",
                  "example": "{{port}}"
                },
                "description": "(Int) OLT PON port where ONU is placed."
              },
              {
                "name": "pon_type",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string",
                  "example": "gpon"
                },
                "description": "(Optional, String) gpon | epon"
              },
              {
                "name": "onu_type",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string",
                  "example": "110"
                },
                "description": "(Optional, String) ONU type name"
              }
            ],
            "responses": {
              "200": {
                "description": "200 - OK",
                "content": {
                  "application/json": {
                    "examples": {
                      "200_ok": {
                        "summary": "200 - OK",
                        "value": {
                          "response": {
                            "authorization_presets": [
                              {
                                "id": 31,
                                "name": "Residential FTTH",
                                "description": "Standard residential profile",
                                "olt_id": 90,
                                "is_default": false,
                                "criteria": {
                                  "sn_pattern": "HWTC",
                                  "board": "1",
                                  "port": "0",
                                  "pon_type": "gpon",
                                  "channel_type": "gpon",
                                  "onu_type_name": null
                                },
                                "applies": {
                                  "vlan": 10,
                                  "zone_name": "Downtown",
                                  "odb_name": "ODB-Central-01",
                                  "odb_port_mode": "auto",
                                  "onu_type_name": null,
                                  "fallback_onu_type_name": "110",
                                  "upload_speed_name": "1G",
                                  "download_speed_name": "100M",
                                  "custom_template_name": null,
                                  "mode": "Routing",
                                  "name_pattern": "FTTH {sn}",
                                  "comment_pattern": "{olt} b{board}/p{port}",
                                  "sets_tr069": true,
                                  "sets_wifi": true,
                                  "sets_wan": true,
                                  "sets_web_credentials": true,
                                  "sets_mgmt_ip": true
                                },
                                "matches": true,
                                "match_score": 310
                              },
                              {
                                "id": 32,
                                "name": "Bridged business",
                                "description": "",
                                "olt_id": 90,
                                "is_default": true,
                                "criteria": {
                                  "sn_pattern": null,
                                  "board": null,
                                  "port": null,
                                  "pon_type": "gpon",
                                  "channel_type": "gpon",
                                  "onu_type_name": null
                                },
                                "applies": {
                                  "vlan": 25,
                                  "zone_name": "Downtown",
                                  "odb_name": null,
                                  "odb_port_mode": null,
                                  "onu_type_name": null,
                                  "fallback_onu_type_name": "F670LV9.0",
                                  "upload_speed_name": null,
                                  "download_speed_name": null,
                                  "custom_template_name": null,
                                  "mode": "Bridging",
                                  "name_pattern": null,
                                  "comment_pattern": null,
                                  "sets_tr069": false,
                                  "sets_wifi": false,
                                  "sets_wan": false,
                                  "sets_web_credentials": false,
                                  "sets_mgmt_ip": false
                                },
                                "matches": true,
                                "match_score": 11
                              }
                            ],
                            "best_match_preset_id": 31
                          },
                          "response_code": "success",
                          "status": true
                        }
                      }
                    }
                  }
                }
              },
              "400": {
                "description": "400 - Board is not an integer",
                "content": {
                  "application/json": {
                    "examples": {
                      "400_board_is_not_an_integer": {
                        "summary": "400 - Board is not an integer",
                        "value": {
                          "status": false,
                          "error": "Invalid parameters: Invalid value for board",
                          "error_code": "incorrect_field_value"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        ]
      }
    },
    "/api/onu/authorize_onu": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Authorize ONU using an authorization preset",
        "operationId": "authorize_onu_using_an_authorization_preset",
        "x-postman-id": "be5eac9b-b6ec-4c99-9563-f6228b144b60",
        "x-postman-order": 46,
        "description": "Authorizes an ONU using an authorization preset.\n\nIdentify the preset by `authorization_preset_id` (preferred) or `authorization_preset_name`.  \nSend both and they must agree — names are compared case-insensitively, and a duplicated name  \nreturns `ambiguous_authorization_preset_name`.\n\n`olt_id`, `pon_type` and `sn` are always required. `pon_type` is validated **before** the  \npreset is resolved, so an invalid one reports `incorrect_pon_type` even if the preset id is  \nalso wrong.\n\n## Online vs offline\n\nSend `board` and `port` and the ONU is configured on the OLT immediately (**online**) — expect  \nthis call to take tens of seconds. Omit them and the ONU is recorded for configuration when it  \nappears (**offline**).\n\n> A preset carrying TR-069, management-IP or web-credential settings only applies those fully  \n> on the **online** path — they need a provisioned ONU. An offline call still returns success  \n> while applying just the parts that do not require one. WiFi and WAN settings are stored  \n> either way.\n\n## Fields the preset leaves open\n\nAnything the preset does not set may be supplied and is validated normally — typically  \n`name`, `address_or_comment`, `contact`, `onu_external_id`, `latitude`, `longitude`, and any of  \n`vlan` / `cvlan` / `svlan` / `zone` / `odb` / `odb_port` / speed profiles / `custom_profile` /  \n`onu_type` the preset happens to leave open.\n\nIf the preset auto-detects the ONU type, supply `onu_type` — your value wins over the preset's  \nfallback type. With neither, the call fails with `specify_onu_type`.\n\n## Preset zones are access-checked\n\nA preset that would place the ONU into a zone (or onto an splitter in a zone) outside a restricted  \nkey's scope is refused with `403` / `forbidden`, exactly as a caller-supplied `zone` would be.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "olt_id": {
                    "type": "integer",
                    "example": "90",
                    "description": "(Int) The ID of the OLT on which the ONU should be authorized"
                  },
                  "pon_type": {
                    "type": "string",
                    "example": "gpon",
                    "description": "(String) ONU PON type. Allowed values: gpon, epon"
                  },
                  "sn": {
                    "type": "string",
                    "example": "HWTC12345678",
                    "description": "(String) ONU SN"
                  },
                  "authorization_preset_id": {
                    "type": "integer",
                    "example": "31",
                    "description": "(Int) The ID of the authorization preset to apply"
                  },
                  "authorization_preset_name": {
                    "type": "string",
                    "example": "Residential FTTH",
                    "description": "Optional alongside the preset ID - if sent, the two must refer to the same authorization preset"
                  },
                  "board": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) OLT board where the ONU is placed. Leave it empty if you don't know yet"
                  },
                  "port": {
                    "type": "integer",
                    "example": "0",
                    "description": "(Int) OLT PON port where ONU is placed. Leave it empty if you don't know yet"
                  },
                  "onu_external_id": {
                    "type": "string",
                    "example": "SUB-00042",
                    "description": "(String) ONU unique external ID. The ONU external ID can contain only alphanumeric characters"
                  }
                },
                "required": [
                  "olt_id",
                  "pon_type",
                  "sn",
                  "authorization_preset_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": "ONU configuration saved",
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - A parameter was sent that this preset already sets",
            "content": {
              "application/json": {
                "examples": {
                  "400_a_parameter_was_sent_that_this_preset_already_sets": {
                    "summary": "400 - A parameter was sent that this preset already sets",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: The authorization preset already sets vlan. Remove it from the request or use a preset that does not set it.",
                      "error_code": "authorization_preset_conflicting_parameter"
                    }
                  },
                  "400_onu_doesn_t_match_the_preset_s_criteria": {
                    "summary": "400 - ONU doesn't match the preset's criteria",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: This ONU does not match the authorization preset criteria.",
                      "error_code": "onu_does_not_match_authorization_preset"
                    }
                  }
                }
              }
            }
          }
        },
        "x-alternatives": [
          {
            "tags": [
              "API endpoints"
            ],
            "summary": "Authorize ONU",
            "operationId": "authorize_onu",
            "x-postman-id": "28dc6cf8-7a91-4729-aebb-8757f87e2fd3",
            "x-postman-order": 47,
            "description": "Authorizes an ONU on the provided OLT. If board or port are left empty then the ONU is saved for later authorization. The ONU type name must be one defined in SmartOLT ONU Types section.  \nThe request returns succesfully if the ONU was authorized successfully.\n\nIt returns a 400 error code when:\n\n- no OLT ID was provided\n- no OLT was found for the provided OLT ID\n- no ONU PON type or a wrong ONU PON type was provided\n- no ONU SN/MAC was provided\n- the SN/MAC is in the wrong format\n- no VLAN-ID was provided\n- no ONU type was provided\n- no ONU type was found for the provided ONU type name\n- no Zone was provided\n- the Zone is in the wrong format\n- the ODB (Splitter) is in the wrong format\n- no Name was provided\n- the Name is in the wrong format\n- the Address or Comment is in the wrong format\n- no ONU mode or a wrong ONU mode was provided\n- the Custom profile is in the wrong format\n- the ONU external ID is in the wrong format\n- the ONU external ID is already existing\n- OLT was unable to process the command\n\nThe following messages are 400 error code messages examples and **may vary** in future versions:\n\n- ONU authorization in progress by other user\n- The selected VLAN was removed or you have a restriction on using it\n- PON port is full or the board/port is incorrect.  \n  Please delete unused ONUs from this PON port in order to add new ones or enter the correct board/port.\n- PON port is full or the board/port or GPON channel (G/XG/XGS) is incorrect.  \n  Please delete unused ONUs from this PON port in order to add new ones or enter the correct board/port.\n- The OLT is not responding to SNMP queries",
            "requestBody": {
              "required": true,
              "content": {
                "application/x-www-form-urlencoded": {
                  "schema": {
                    "type": "object",
                    "properties": {
                      "olt_id": {
                        "type": "integer",
                        "example": "1",
                        "description": "(Int) The ID of the OLT on which the ONU should be authorized"
                      },
                      "pon_type": {
                        "type": "string",
                        "example": "gpon",
                        "description": "(String) ONU PON type. Allowed values: gpon, epon"
                      },
                      "gpon_channel": {
                        "type": "string",
                        "example": "gpon",
                        "description": "(String) GPON channel. Allowed values: gpon, xgpon, xgspon"
                      },
                      "epon_channel": {
                        "type": "string",
                        "example": "epon",
                        "description": "(String) EPON channel. Allowed values: epon, 10gepon"
                      },
                      "board": {
                        "type": "integer",
                        "example": "2",
                        "description": "(Int) OLT board where the ONU is placed. Leave it empty if you don't know yet"
                      },
                      "port": {
                        "type": "integer",
                        "example": "3",
                        "description": "(Int) OLT PON port where ONU is placed. Leave it empty if you don't know yet"
                      },
                      "sn": {
                        "type": "string",
                        "example": "ZTEGC7E230E4",
                        "description": "(String) ONU SN"
                      },
                      "onu_type": {
                        "type": "string",
                        "example": "ZTE-F660V6.0",
                        "description": "(String) ONU type"
                      },
                      "custom_profile": {
                        "type": "string",
                        "example": "",
                        "description": "(String) Custom profile - THIS IS NOT THE SPEED PROFILE (the default speed profiles will be used, if you wish to change them you will need to make a separate API call after authorization). The custom profile name should not contain whitespaces"
                      },
                      "onu_mode": {
                        "type": "string",
                        "example": "Routing",
                        "description": "(String) ONU mode. Allowed values: Routing, Bridging"
                      },
                      "cvlan": {
                        "type": "integer",
                        "example": "101",
                        "description": "(Int) ONU CVLAN-ID"
                      },
                      "svlan": {
                        "type": "integer",
                        "example": "102",
                        "description": "(Int) ONU SVLAN-ID"
                      },
                      "tag_transform_mode": {
                        "type": "string",
                        "example": "translate",
                        "description": "(String) Tag-transform mode. Allowed values: default, translate, translate-and-add"
                      },
                      "use_other_all_tls_vlan": {
                        "type": "integer",
                        "example": "1",
                        "description": "(Int) Use \"other-all\" TLS VLAN. Allowed values: 0, 1"
                      },
                      "vlan": {
                        "type": "integer",
                        "example": "100",
                        "description": "(Int) ONU VLAN-ID. If not specified, the default VLAN-ID for this PON port is used. If there is no default VLAN-ID defined, this parameter is required"
                      },
                      "zone": {
                        "type": "string",
                        "example": "City Centre",
                        "description": "(String) The zone where the ONU is located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character"
                      },
                      "odb": {
                        "type": "string",
                        "example": "Splitter325",
                        "description": "(String) Splitter. The Splitter can contain only alphanumeric characters, spaces, underscore and the dash (-) character"
                      },
                      "name": {
                        "type": "string",
                        "example": "John Doe",
                        "description": "(String) Name. The Name can contain only alphanumeric characters, spaces and the following characters: @#$&()-\\`.+,/_"
                      },
                      "address_or_comment": {
                        "type": "string",
                        "example": "Avenue 9",
                        "description": "(String) Address or comment. The Address or Comment can contain only alphanumeric characters, spaces and the following characters: @#$&()-\\`.+,/_"
                      },
                      "onu_external_id": {
                        "type": "string",
                        "example": "test",
                        "description": "(String) ONU unique external ID. The ONU external ID can contain only alphanumeric characters"
                      },
                      "upload_speed_profile_name": {
                        "type": "string",
                        "example": "50M",
                        "description": "(String) Upload speed profile name"
                      },
                      "download_speed_profile_name": {
                        "type": "string",
                        "example": "100M",
                        "description": "(String) Download speed profile name"
                      },
                      "sector": {
                        "type": "string",
                        "example": "North Branch",
                        "description": "(String) Sector name, optional. Create sectors in the SmartOLT interface first, under Settings → Sectors."
                      }
                    },
                    "required": [
                      "olt_id",
                      "pon_type",
                      "sn",
                      "onu_type",
                      "onu_mode",
                      "zone",
                      "name"
                    ]
                  }
                }
              }
            },
            "responses": {
              "200": {
                "description": "200 - OK",
                "content": {
                  "application/json": {
                    "examples": {
                      "200_ok": {
                        "summary": "200 - OK",
                        "value": {
                          "status": true,
                          "response": "ONU configuration saved"
                        }
                      }
                    }
                  }
                }
              },
              "403": {
                "description": "403 - Forbidden",
                "content": {
                  "application/json": {
                    "examples": {
                      "403_forbidden": {
                        "summary": "403 - Forbidden",
                        "value": {
                          "status": false,
                          "error": "Invalid API Key."
                        }
                      }
                    }
                  }
                }
              },
              "400": {
                "description": "400 - Invalid parameters",
                "content": {
                  "application/json": {
                    "examples": {
                      "400_invalid_parameters": {
                        "summary": "400 - Invalid parameters",
                        "value": {
                          "status": false,
                          "error": "Invalid parameters: Please specify the ONU SN"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        ]
      }
    },
    "/api/onu/move/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Move ONU by ONU unique external ID",
        "operationId": "move_onu_by_onu_unique_external_id",
        "x-postman-id": "30d39415-dc9b-44c8-bf86-f46652c8ad86",
        "x-postman-order": 48,
        "description": "## Move ONU for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU was moved successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no OLT ID was provided\n- no OLT was found for the provided OLT ID\n- no board was provided\n- the provided board does not exist on the provided OLT\n- no port was provided\n- the provided port does not exist on the provided OLT board\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "olt_id": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) The OLT ID to which the ONU will be moved"
                  },
                  "board": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) The board to which the ONU will be moved. It must be an existing board from the provided OLT"
                  },
                  "port": {
                    "type": "integer",
                    "example": "2",
                    "description": "(Int) The port to which the ONU will be moved. It must be an existing port from the provided OLT board"
                  }
                },
                "required": [
                  "olt_id",
                  "board",
                  "port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU was moved"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_specify_the_olt_id": {
                    "summary": "400 - Specify the OLT ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the OLT ID"
                    }
                  },
                  "400_the_provided_board_does_not_exist_on_the_provided_olt": {
                    "summary": "400 - The provided board does not exist on the provided OLT",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify a valid board from the OLT"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_pon_channel/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU PON channel by ONU unique external ID",
        "operationId": "update_onu_pon_channel_by_onu_unique_external_id",
        "x-postman-id": "b373a456-52a1-4ce8-a0ff-8a90c9212744",
        "x-postman-order": 49,
        "description": "## Update ONU PON channel for a specified ONU unique external ID\n\nThe request returns succesfully if the new ONU PON channel was saved successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "pon_channel": {
                    "type": "string",
                    "example": "xgpon",
                    "description": "(String) PON channel. Allowed values: gpon, xgpon, xgspon, epon, 10gepon"
                  }
                },
                "required": [
                  "pon_channel"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": "GPON channel changed to XG-PON for ONU with ONU external ID test",
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_sn/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU SN/MAC by ONU unique external ID",
        "operationId": "update_onu_sn_mac_by_onu_unique_external_id",
        "x-postman-id": "e07cc4db-f4c9-4059-8954-f6cde6a7d422",
        "x-postman-order": 50,
        "description": "## Update ONU SN/MAC for a specified ONU unique external ID\n\nThe request returns succesfully if the new ONU SN/MAC was saved successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no new SN/MAC was provided\n- the SN/MAC is in the wrong format\n- the SN/MAC is already assigned to another ONU\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_sn": {
                    "type": "string",
                    "example": "ZTEGC7E230E7",
                    "description": "(String) New SN or MAC"
                  }
                },
                "required": [
                  "new_sn"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "MAC/SN updated for ONU with ONU external ID test"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Incorrect format for SN/MAC",
            "content": {
              "application/json": {
                "examples": {
                  "400_incorrect_format_for_sn_mac": {
                    "summary": "400 - Incorrect format for SN/MAC",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: The SN field must contain 12 uppercase alphanumeric characters"
                    }
                  },
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  },
                  "400_specify_the_new_sn_or_mac": {
                    "summary": "400 - Specify the new SN or MAC",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the new SN/MAC"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/change_onu_type/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU type by ONU unique external ID",
        "operationId": "update_onu_type_by_onu_unique_external_id",
        "x-postman-id": "d1a7d726-2ac1-4eb9-a07d-ef12ebcfba4e",
        "x-postman-order": 51,
        "description": "## Update ONU type for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU type was changed successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no new ONU type was provided\n- no ONU type was found with the given ONU type name\n- the ONU type PON type is not compatible with the ONU\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onu_type": {
                    "type": "string",
                    "example": "ZTE-F660V6.0",
                    "description": "(String) ONU type"
                  }
                },
                "required": [
                  "onu_type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU type changed for ONU with ONU external ID test"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Specify the new ONU type",
            "content": {
              "application/json": {
                "examples": {
                  "400_specify_the_new_onu_type": {
                    "summary": "400 - Specify the new ONU type",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU type"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  },
                  "400_no_onu_type_was_found_with_the_given_name": {
                    "summary": "400 - No ONU type was found with the given name",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU type was found with the name ZTE-G"
                    }
                  },
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/change_custom_profile/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU custom profile by ONU unique external ID",
        "operationId": "update_onu_custom_profile_by_onu_unique_external_id",
        "x-postman-id": "18e8233b-831d-43a1-a5a1-f792b436236e",
        "x-postman-order": 52,
        "description": "## Update ONU custom profile for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU custom profile was changed successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no new ONU custom profile was provided\n- no ONU custom profile was found with the given custom profile name\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "custom_profile": {
                    "type": "string",
                    "example": "Generic_1",
                    "description": "(String) Custom profile name"
                  }
                },
                "required": [
                  "custom_profile"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU custom profile changed for ONU with ONU external ID test"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/get_configuration_presets": {
      "get": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Get ONU configuration presets",
        "operationId": "get_onu_configuration_presets",
        "x-postman-id": "0715d93d-dd08-466f-ba69-1caaaa2835e1",
        "x-postman-order": 53,
        "description": "List **every** configuration preset the API key can see.\n\nPresets are returned in OLT-then-name order. Only presets belonging to OLTs the key has access to are included. Deleted presets, and presets whose OLT has been deleted, are never returned.\n\nA configuration preset is a reusable set of ONU settings defined per OLT (optionally narrowed to a board/port). Applying a preset writes those settings to the ONU and pushes them to the OLT. A preset marked as *reversible* records what it changed, so it can later be removed and the previous values restored. A non-reversible (one-time) preset is applied once and previous values cannot be restored.\n\n**Optional query parameter**\n\n- `olt_id` — return only the presets belonging to that OLT.\n\n**Fields**\n\n- `board` / `port` — `null` when the preset applies to the whole OLT, otherwise the board/port it is narrowed to.\n- `is_reversible` — reversible presets can be removed later (`remove_configuration_preset`) and are reported in `applied_configuration_preset`. One-time presets apply their settings and keep no record.\n- `enforced_settings` — the setting groups this preset governs, each as `{key, rows}` in a canonical order (e.g. `main_vlan`, `catv`, `tr069`). `rows` are RESOLVED display lines — `{label, value}` with IDs turned into names (VLAN, speed profile, TR-069 profile). A group can expand to several rows (e.g. `tr069` → mode, profile, interface). Secrets (WiFi/PPPoE/web passwords) are never read or returned.",
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "configuration_presets": [
                          {
                            "id": 2,
                            "name": "Residential",
                            "description": "",
                            "olt_id": 10,
                            "olt_name": "Huawei",
                            "board": null,
                            "port": null,
                            "is_reversible": false,
                            "enforced_settings": [
                              {
                                "key": "catv",
                                "rows": [
                                  {
                                    "label": "CATV",
                                    "value": "Disabled"
                                  }
                                ]
                              },
                              {
                                "key": "tr069",
                                "rows": [
                                  {
                                    "label": "TR-069 mode and profile",
                                    "value": "Enabled"
                                  },
                                  {
                                    "label": "TR069 Profile",
                                    "value": "SmartOLT"
                                  },
                                  {
                                    "label": "Interface",
                                    "value": "Mgmt IP interface"
                                  }
                                ]
                              }
                            ]
                          },
                          {
                            "id": 3,
                            "name": "test",
                            "description": "",
                            "olt_id": 10,
                            "olt_name": "Huawei",
                            "board": null,
                            "port": null,
                            "is_reversible": false,
                            "enforced_settings": [
                              {
                                "key": "main_vlan",
                                "rows": [
                                  {
                                    "label": "Main VLAN",
                                    "value": "VLAN 10"
                                  }
                                ]
                              }
                            ]
                          },
                          {
                            "id": 4,
                            "name": "test 2",
                            "description": "",
                            "olt_id": 10,
                            "olt_name": "Huawei",
                            "board": null,
                            "port": null,
                            "is_reversible": true,
                            "enforced_settings": [
                              {
                                "key": "onu_mode",
                                "rows": [
                                  {
                                    "label": "ONU mode",
                                    "value": "Routing"
                                  }
                                ]
                              }
                            ]
                          },
                          {
                            "id": 7,
                            "name": "test one time",
                            "description": "",
                            "olt_id": 90,
                            "olt_name": "ZTE",
                            "board": null,
                            "port": null,
                            "is_reversible": false,
                            "enforced_settings": [
                              {
                                "key": "main_vlan",
                                "rows": [
                                  {
                                    "label": "Main VLAN",
                                    "value": "VLAN 25"
                                  }
                                ]
                              }
                            ]
                          },
                          {
                            "id": 5,
                            "name": "test preset",
                            "description": "",
                            "olt_id": 90,
                            "olt_name": "ZTE",
                            "board": null,
                            "port": null,
                            "is_reversible": true,
                            "enforced_settings": [
                              {
                                "key": "main_vlan",
                                "rows": [
                                  {
                                    "label": "Main VLAN",
                                    "value": "VLAN 20"
                                  }
                                ]
                              },
                              {
                                "key": "catv",
                                "rows": [
                                  {
                                    "label": "CATV",
                                    "value": "Disabled"
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      },
                      "status": true,
                      "response_code": "success"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/apply_configuration_preset/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Apply configuration preset to an ONU by ONU unique external ID",
        "operationId": "apply_configuration_preset_to_an_onu_by_onu_unique_external_id",
        "x-postman-id": "64c77421-82f7-433d-b7b3-adbbf481b98f",
        "x-postman-order": 54,
        "description": "Applies a configuration preset to the ONU and pushes the resulting configuration to the OLT.\n\nRuns **synchronously** and returns the final outcome. If the OLT push fails, the preset application is rolled back automatically and the error is returned.\n\nIdentify the preset by `configuration_preset_id` **or** `configuration_preset_name` (at least one required). If you send both and they point at different presets the request is rejected with `configuration_preset_id_name_mismatch`.\n\nThe preset is always resolved against the presets applicable to this ONU, so a preset belonging to a different OLT/board/port is rejected with `configuration_preset_not_applicable`.\n\n### Path parameters\n\n| Parameter | Required | Description |\n| --- | --- | --- |\n| `onu_external_id` | yes | The ONU external ID |\n\n### Body parameters (`application/x-www-form-urlencoded`)\n\n| Parameter | Required | Description |\n| --- | --- | --- |\n| `configuration_preset_id` | one of the two | ID of an applicable preset |\n| `configuration_preset_name` | one of the two | Name of an applicable preset |\n\n### Errors\n\n`configuration_preset_id_or_name_required`, `configuration_preset_not_applicable`, `configuration_preset_id_name_mismatch, onu_busy` (409), plus any OLT error returned while pushing the configuration.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "configuration_preset_name": {
                    "type": "string",
                    "example": "Residential",
                    "description": "Required if configuration_preset_id is not sent. Name of an applicable preset."
                  },
                  "configuration_preset_id": {
                    "type": "string",
                    "example": "5",
                    "description": "Required if configuration_preset_name is not sent. ID of an applicable preset."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": "ONU configuration preset applied",
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Preset not applicable to this ONU",
            "content": {
              "application/json": {
                "examples": {
                  "400_preset_not_applicable_to_this_onu": {
                    "summary": "400 - Preset not applicable to this ONU",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: The specified configuration preset does not exist or is not applicable to this ONU.",
                      "error_code": "configuration_preset_not_applicable"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "409 - ONU busy",
            "content": {
              "application/json": {
                "examples": {
                  "409_onu_busy": {
                    "summary": "409 - ONU busy",
                    "value": {
                      "status": false,
                      "error": "This ONU has another operation in progress; please try again shortly.",
                      "error_code": "onu_busy"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/remove_configuration_preset/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Remove configuration preset from an ONU by ONU unique external ID",
        "operationId": "remove_configuration_preset_from_an_onu_by_onu_unique_external_id",
        "x-postman-id": "34abcfbe-2452-4760-a4af-83a1bb1227af",
        "x-postman-order": 55,
        "description": "Removes the configuration preset currently applied to the ONU, restoring the settings that were in place before it was applied, and pushes the result to the OLT.\n\nRuns **synchronously** and returns the final outcome.\n\nThere is no preset parameter: the endpoint operates on whichever preset is currently applied on the ONU. If the ONU has no applied preset — or the applied preset was a **one-time (non-reversible)** preset, which by definition cannot be undone — the call returns `preset_application_not_found`.\n\n### Path parameters\n\n| Parameter | Required | Description |\n| --- | --- | --- |\n| `onu_external_id` | yes | The ONU external ID |\n\n### Errors\n\n`preset_application_not_found`, `onu_busy` (409), plus any OLT error returned while pushing the configuration.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": "ONU configuration preset reversed",
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400- Nothing to remove",
            "content": {
              "application/json": {
                "examples": {
                  "400_nothing_to_remove": {
                    "summary": "400- Nothing to remove",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: This ONU has no configuration preset applied that can be removed.",
                      "error_code": "preset_application_not_found"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_apply_configuration_preset": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Apply configuration preset on multiple ONUs by ONU unique external IDs",
        "operationId": "apply_configuration_preset_on_multiple_onus_by_onu_unique_external_ids",
        "x-postman-id": "54eb4b99-51a4-4374-bc04-594f7490462c",
        "x-postman-order": 56,
        "description": "Applies a configuration preset to several ONUs in one call.\n\n**This endpoint is asynchronous.** It validates each ONU, queues the work as a batch action and returns immediately — the response tells you what was *accepted*, not what the OLT did.\n\nThe response is a list keyed by ONU external id. Accepted ONUs report that the action is being processed; every other ONU carries the reason it was skipped. Duplicate ids in one call are collapsed, and an ONU that already has this action queued is not queued twice.\n\nPer-ONU skip reasons include: preset not applicable to that ONU, the ONU already has a preset applied, and an action already queued for it.\n\n### Body parameters (`application/x-www-form-urlencoded`)\n\n| Parameter | Required | Description |\n| --- | --- | --- |\n| `onus_external_ids` | yes | Comma separated ONU external IDs, maximum 10 000 |\n| `configuration_preset_id` | one of the two | ID of the preset to apply |\n| `configuration_preset_name` | one of the two | Name of the preset to apply — resolved per ONU |",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "ONU001,ONU002,ONU003",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 10 000 ONU unique external IDs are allowed"
                  },
                  "configuration_preset_name": {
                    "type": "string",
                    "example": "Residential",
                    "description": "Required if configuration_preset_id is not sent. Only matches ONUs on the preset's own OLT/board/port."
                  },
                  "configuration_preset_id": {
                    "type": "string",
                    "example": "5",
                    "description": "Required if configuration_preset_name is not sent. Only matches ONUs on the preset's own OLT/board/port."
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "ONU001": "The configuration preset action was queued and is being processed.",
                        "ONU002": "A configuration preset action is already queued for this ONU.",
                        "ONU003": "The specified configuration preset does not exist or is not applicable to this ONU.",
                        "ONU004": "This ONU already has an active configuration preset. Remove it before applying another."
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_remove_configuration_preset": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Remove configuration preset from multiple ONUs by ONU unique external IDs",
        "operationId": "remove_configuration_preset_from_multiple_onus_by_onu_unique_external_ids",
        "x-postman-id": "e367973e-13ce-4d0c-a1f8-a7d121d90adc",
        "x-postman-order": 57,
        "description": "Removes the currently applied configuration preset from several ONUs in one call, restoring each ONU's previous settings.\n\n**This endpoint is asynchronous.** It validates each ONU, queues the work as a batch action and returns immediately — the response tells you what was *accepted*, not what the OLT did.\n\nThe response is a list keyed by ONU external id. Accepted ONUs report that the action is being processed; every other ONU carries the reason it was skipped. Duplicate ids in one call are collapsed, and an ONU that already has this action queued is not queued twice.\n\nPer-ONU skip reasons include: no preset applied to reverse, an action already queued, and an application still mid-apply/mid-reverse.\n\n### Body parameters (`application/x-www-form-urlencoded`)\n\n| Parameter | Required | Description |\n| --- | --- | --- |\n| `onus_external_ids` | yes | Comma separated ONU external IDs, maximum 10 000 |",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "ONU001,ONU002",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 10 000 ONU unique external IDs are allowed"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "ONU001": "The configuration preset action was queued and is being processed.",
                        "ONU002": "This ONU has no configuration preset applied that can be removed."
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/check_configuration_preset_task_status": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Check configuration preset task status",
        "operationId": "check_configuration_preset_task_status",
        "x-postman-id": "41e5375c-21a2-4fe1-851b-ee82b3af753a",
        "x-postman-order": 58,
        "description": "Check how the queued configuration-preset work is going, detailed per ONU.\n\nReports the **most recent** preset task row for each ONU — apply or remove, whichever happened last — so it answers both \"is my bulk request still running\" and \"what happened to it\".\n\n**`status`** **values**\n\n| value | meaning |\n| --- | --- |\n| `queued` | accepted, not picked up by a worker yet |\n| `in_progress` | a worker is running it now |\n| `retrying` | an attempt failed; more attempts remain (up to 4) |\n| `failed` | out of attempts, or the batch action was stopped, or its task is no longer running |\n| `succeeded` | completed successfully |\n| `no_task` | the ONU exists but has no preset task on record |\n| `onu_not_found` | no ONU with that external id is visible to this API key |\n\n**Other fields** (absent for `no_task` / `onu_not_found`)\n\n- `action` — `apply` or `remove`.\n- `attempts` — attempts made so far.\n- `date_start` / `date_end` — `null` until the worker starts / finishes an attempt.\n- `error_message` — the error from the last failed attempt, passed through from the OLT where there was one. Always `null` for `succeeded`.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "ONU001,ONU002",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 10 000 ONU unique external IDs are allowed"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "NOSUCHONU": {
                          "status": "onu_not_found"
                        },
                        "ONU001": {
                          "status": "succeeded",
                          "action": "apply",
                          "attempts": 1,
                          "date_start": "2026-07-22 16:59:41",
                          "date_end": "2026-07-22 17:00:12",
                          "error_message": null
                        },
                        "ONU002": {
                          "status": "failed",
                          "action": "apply",
                          "attempts": 4,
                          "date_start": "2026-07-19 09:19:46",
                          "date_end": "2026-07-19 09:19:53",
                          "error_message": "OLT unreachable. Please check that the Telnet port TCP on OLT IP is open for connections."
                        }
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_location_details/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU location details by ONU unique external ID",
        "operationId": "update_onu_location_details_by_onu_unique_external_id",
        "x-postman-id": "d8b8dbf3-e5f3-4d34-bc51-523912fa2de5",
        "x-postman-order": 59,
        "description": "## Update ONU location details for a specified ONU unique external ID\n\nAt least one parameter must be provided. Send only the parameters that you want to be updated. The zone names must be the ones defined in SmartOLT Zones section. The Splitter names must be the ones defined in SmartOLT Splitters section.  \nThe request returns succesfully if the ONU location details were updated successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no parameters were provided\n- the Zone is in the wrong format\n- the Splitter is in the wrong format\n- the Name is in the wrong format\n- the Address or Comment is in the wrong format\n- the Contact is in the wrong format\n- the Latitude is in the wrong format\n- the Longitude is in the wrong format\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "zone": {
                    "type": "string",
                    "example": "City Centre",
                    "description": "(String) The zone where the ONU is located. The Zone can contain only alphanumeric characters, spaces, underscore and the dash (-) character"
                  },
                  "odb": {
                    "type": "string",
                    "example": "Splitter325",
                    "description": "(String) Splitter. The Splitter can contain only alphanumeric characters, spaces, underscore and the dash (-) character"
                  },
                  "odb_port": {
                    "type": "integer",
                    "example": "5",
                    "description": "(Int) Splitter port"
                  },
                  "name": {
                    "type": "string",
                    "example": "John Doe",
                    "description": "(String) Name. The Name can contain only alphanumeric characters, spaces and the following characters: @#$&()-\\`.+,/_"
                  },
                  "address_or_comment": {
                    "type": "string",
                    "example": "Avenue 9",
                    "description": "(String) Address or comment. The Address or Comment can contain only alphanumeric characters, spaces and the following characters: @#$&()-\\`.+,/_"
                  },
                  "contact": {
                    "type": "string",
                    "example": "John Doe",
                    "description": "(String) Contact. The Contact can contain only alphanumeric characters, spaces and the following characters: @#$&()-\\`.+,/_"
                  },
                  "latitude": {
                    "type": "string",
                    "example": "52.5113340328893",
                    "description": "(String) Latitude"
                  },
                  "longitude": {
                    "type": "string",
                    "example": "13.401282438647513",
                    "description": "(String) Longitude"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Location details updated for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please provide at least one parameter to update the ONU location details"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_unique_external_id/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU unique external ID",
        "operationId": "update_onu_unique_external_id",
        "x-postman-id": "0718fc10-8b91-44ba-bd14-599c6615626c",
        "x-postman-order": 60,
        "description": "The request returns succesfully if the ONU unique external ID was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no new external ID was provided\n- the new external ID is in the wrong format\n- the new external ID is already assigned to another ONU\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onu_external_id": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) ONU unique external ID. The ONU external ID can contain only alphanumeric characters"
                  }
                },
                "required": [
                  "onu_external_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU unique external id updated"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the new ONU external ID"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_unique_external_id_by_board_port_onu": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU unique external ID by board, port, ONU number",
        "operationId": "update_onu_unique_external_id_by_board_port_onu_number",
        "x-postman-id": "4162cedd-40ab-42eb-b9dd-65244fa0084d",
        "x-postman-order": 61,
        "description": "The request returns succesfully if the ONU unique external ID was updated successfully.\n\nIt returns a 400 error code when:\n\n- no OLT ID, board, port or ONU number was provided\n- no ONU was found for the provided OLT ID, board, port or ONU number\n- no new external ID was provided\n- the new external ID is in the wrong format\n- the new external ID is already assigned to another ONU\n- OLT was unable to process the command",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "olt_id": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) The ID of the OLT where the ONU is placed"
                  },
                  "board": {
                    "type": "integer",
                    "example": "3",
                    "description": "(Int) OLT board where the ONU is placed"
                  },
                  "port": {
                    "type": "integer",
                    "example": "3",
                    "description": "(Int) OLT PON port where ONU is placed"
                  },
                  "onu_number": {
                    "type": "integer",
                    "example": "2",
                    "description": "(Int) OLT ONU number where ONU is placed"
                  },
                  "onu_external_id": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) ONU unique external ID. The ONU external ID can contain only alphanumeric characters"
                  }
                },
                "required": [
                  "olt_id",
                  "board",
                  "port",
                  "onu_number",
                  "onu_external_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU unique external id updated"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the new ONU external ID"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_unique_external_id_by_sn": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU unique external ID by SN",
        "operationId": "update_onu_unique_external_id_by_sn",
        "x-postman-id": "0e15bc66-088f-4f68-9d7d-364817bda172",
        "x-postman-order": 62,
        "description": "The request returns succesfully if the ONU unique external ID was updated successfully.\n\nIt returns a 400 error code when:\n\n- no SN was provided\n- no ONU was found for the provided SN\n- no new external ID was provided\n- the new external ID is in the wrong format\n- the new external ID is already assigned to another ONU\n- OLT was unable to process the command",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "olt_id": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) The ID of the OLT where the ONU is placed"
                  },
                  "sn": {
                    "type": "string",
                    "example": "ZTEGC7E230E4",
                    "description": "(String) ONU SN"
                  },
                  "onu_external_id": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) ONU unique external ID. The ONU external ID can contain only alphanumeric characters"
                  }
                },
                "required": [
                  "olt_id",
                  "sn",
                  "onu_external_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU unique external id updated"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the new ONU external ID"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_attached_vlans/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU attached VLANs by ONU unique external ID",
        "operationId": "update_onu_attached_vlans_by_onu_unique_external_id",
        "x-postman-id": "1dde1368-059e-457f-b041-630dad15265d",
        "x-postman-order": 63,
        "description": "## Update ONU attached VLANs for a specified ONU unique external ID\n\nAt least one VLAN must be provided. The request returns succesfully if the ONU attached VLANs were updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no VLAN was provided\n- the VLAN lists are in the wrong format\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "add_vlans": {
                    "type": "string",
                    "example": "10,20",
                    "description": "(String) VLANs to be added, comma separated. The VLANs list can contain only digits and the comma (,) character"
                  },
                  "remove_vlans": {
                    "type": "string",
                    "example": "33",
                    "description": "(String) VLANs to be removed, comma separated. The VLANs list can contain only digits and the comma (,) character"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Attached VLANs updated for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please provide at least one VLAN to add/remove"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_main_vlan/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU main VLAN-ID by ONU unique external ID",
        "operationId": "update_onu_main_vlan_id_by_onu_unique_external_id",
        "x-postman-id": "845889dd-22bb-490a-b192-372fbb9dce4f",
        "x-postman-order": 64,
        "description": "## Update ONU main VLAN-ID for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU main VLAN-ID was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no VLAN-ID was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "vlan": {
                    "type": "integer",
                    "example": "10",
                    "description": "(Int) ONU new main VLAN-ID"
                  }
                },
                "required": [
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Main VLAN-ID updated for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify ONU VLAN-ID"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_onu_mode/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU mode by ONU unique external ID",
        "operationId": "update_onu_mode_by_onu_unique_external_id",
        "x-postman-id": "5671d229-23ac-4fa3-89bb-0203355d9a31",
        "x-postman-order": 65,
        "description": "## Update ONU mode for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ONU mode was provided\n- wrong ONU mode was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onu_mode": {
                    "type": "string",
                    "example": "Routing",
                    "description": "(String) ONU mode. Allowed values: Routing, Bridging"
                  }
                },
                "required": [
                  "onu_mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU mode updated for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Allowed values for ONU mode are 'Routing' or 'Bridging'"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_mgmt_ip_inactive/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU Mgmt IP mode to Inactive by ONU unique external ID",
        "operationId": "set_onu_mgmt_ip_mode_to_inactive_by_onu_unique_external_id",
        "x-postman-id": "20e1d52d-6c78-4a07-a810-6a44f1733d23",
        "x-postman-order": 66,
        "description": "## Set ONU Mgmt IP mode to Inactive for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU Mgmt IP mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Changed Mgmt IP mode to Inactive for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_mgmt_ip_static_ip/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU Mgmt IP mode to Static IP by ONU unique external ID",
        "operationId": "set_onu_mgmt_ip_mode_to_static_ip_by_onu_unique_external_id",
        "x-postman-id": "acf0e850-6e0d-4b7a-afd3-14392f06b4f9",
        "x-postman-order": 67,
        "description": "## Set ONU Mgmt IP mode to Static IP for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU Mgmt IP mode was updated successfully.\n\nPossible combinations for setting Mgmt IP mode to Static IP through API:\n\n- VLAN only (the system will autoassign an available IP address from the existing IP pools)\n- VLAN + IP subnet (ex: 10.100.0.0/24)\n- VLAN + IP address + subnet mask + gateway + dns1 + dns2\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no VLAN-ID, IPv4 address, subnet mask, gateway, DNS1 was provided\n- wrong VLAN-ID, IPv4 address, subnet mask, gateway, DNS1, DNS2 was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "vlan": {
                    "type": "integer",
                    "example": "100",
                    "description": "(Int) ONU Mgmt VLAN-ID"
                  },
                  "cvlan": {
                    "type": "integer",
                    "example": "101",
                    "description": "(Int) ONU Mgmt CVLAN-ID"
                  },
                  "svlan": {
                    "type": "integer",
                    "example": "102",
                    "description": "(Int) ONU Mgmt SVLAN-ID"
                  },
                  "tag_transform_mode": {
                    "type": "string",
                    "example": "translate",
                    "description": "(String) Tag-transform mode. Allowed values: default, translate, translate-and-add"
                  },
                  "ipv4_address": {
                    "type": "string",
                    "example": "10.100.0.11 or 10.100.0.0/24",
                    "description": "(String) IPv4 address or IP subnet (IP pool). The IPv4 address must be a valid IP address or a valid IP subnet (IP pool). The system will autoassign an available IP address from the existing IP pools, if this field is not specified."
                  },
                  "subnet_mask": {
                    "type": "string",
                    "example": "255.255.255.0",
                    "description": "(String) Subnet mask. The Subnet mask must be a valid IP address"
                  },
                  "gateway": {
                    "type": "string",
                    "example": "10.100.0.1",
                    "description": "(String) Gateway. The Gateway must be a valid IP address"
                  },
                  "dns1": {
                    "type": "string",
                    "example": "8.8.8.8",
                    "description": "(String) DNS1. The DNS1 must be a valid IP address"
                  },
                  "dns2": {
                    "type": "string",
                    "example": "8.8.4.4",
                    "description": "(String) DNS2. The DNS2 must be a valid IP address"
                  }
                },
                "required": [
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Changed Mgmt IP mode to Static IP for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_mgmt_ip_dhcp/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU Mgmt IP mode to DHCP by ONU unique external ID",
        "operationId": "set_onu_mgmt_ip_mode_to_dhcp_by_onu_unique_external_id",
        "x-postman-id": "1a24a4f8-64cf-4da6-af66-112d0e4c3a8e",
        "x-postman-order": 68,
        "description": "## Set ONU Mgmt IP mode to DHCP for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU Mgmt IP mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no VLAN-ID was provided\n- wrong VLAN-ID was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "vlan": {
                    "type": "integer",
                    "example": "100",
                    "description": "(Int) ONU Mgmt VLAN-ID"
                  },
                  "cvlan": {
                    "type": "integer",
                    "example": "101",
                    "description": "(Int) ONU Mgmt CVLAN-ID"
                  },
                  "svlan": {
                    "type": "integer",
                    "example": "102",
                    "description": "(Int) ONU Mgmt SVLAN-ID"
                  },
                  "tag_transform_mode": {
                    "type": "string",
                    "example": "translate",
                    "description": "(String) Tag-transform mode. Allowed values: default, translate, translate-and-add"
                  }
                },
                "required": [
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Changed Mgmt IP mode to DHCP for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_tr069/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU TR069 by ONU unique external ID",
        "operationId": "enable_onu_tr069_by_onu_unique_external_id",
        "x-postman-id": "d4dcce06-fff4-4d0e-a9f3-b38fb6ee6bbd",
        "x-postman-order": 69,
        "description": "## Enable ONU TR069 for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU TR069 was enabled successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- TR069 feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "tr069_profile": {
                    "type": "string",
                    "example": "tr069_profile_name",
                    "description": "(String) TR069 profile name"
                  },
                  "tr069_interface": {
                    "type": "string",
                    "example": "mgmt",
                    "description": "(String) The interface that carries the TR-069 session. Allowed values are 'wan', 'mgmt'."
                  }
                },
                "required": [
                  "tr069_profile"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "TR069 profile enabled"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_tr069/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU TR069 by ONU unique external ID",
        "operationId": "disable_onu_tr069_by_onu_unique_external_id",
        "x-postman-id": "0cc7767e-9d3b-4926-b22e-9d3799a1a28e",
        "x-postman-order": 70,
        "description": "## Disable ONU TR069 for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU TR069 was disabled successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- TR069 feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "TR069 profile disabled"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_voip_disabled/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU VoIP mode to Disabled by ONU unique external ID",
        "operationId": "set_onu_voip_mode_to_disabled_by_onu_unique_external_id",
        "x-postman-id": "88d8ed1a-224f-4df2-91b1-343b22c05996",
        "x-postman-order": 71,
        "description": "## Set ONU VoIP mode to Disabled for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU VoIP mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Disabled VoIP connection for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_voip_enabled/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU VoIP mode to Enabled by ONU unique external ID",
        "operationId": "set_onu_voip_mode_to_enabled_by_onu_unique_external_id",
        "x-postman-id": "2131a2e6-8961-4a43-b15b-1c5e61571f26",
        "x-postman-order": 72,
        "description": "## Set ONU VoIP mode to Enabled for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU VoIP mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "voip_attach_to": {
                    "type": "string",
                    "example": "WAN",
                    "description": "(String)  Attach VoIP to WAN or Mgmt"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Enabled VoIP connection for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_onu_voip_port/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU VoIP port by ONU unique external ID",
        "operationId": "enable_onu_voip_port_by_onu_unique_external_id",
        "x-postman-id": "91a93ac6-9f5f-4069-842f-f492f76e9422",
        "x-postman-order": 73,
        "description": "## Enable ONU VoIP port for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU VoIP port was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no VoIP port, phone number, password was provided\n- wrong VoIP port, phone number, password was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "voip_port": {
                    "type": "string",
                    "example": "pots_0/1",
                    "description": "(String) VoIP port"
                  },
                  "voip_profile_name": {
                    "type": "string",
                    "example": "sip_profile",
                    "description": "(String) VoIP profile name"
                  },
                  "phone_number": {
                    "type": "string",
                    "example": "123654789",
                    "description": "(String) Phone number. The phone number can contain only digits and the + character. A maximum of 25 characters is allowed"
                  },
                  "sip_userid": {
                    "type": "string",
                    "example": "123654789",
                    "description": "(String) SIP userid. The SIP userid can contain only digits and the + character. A maximum of 25 characters is allowed"
                  },
                  "password": {
                    "type": "string",
                    "example": "pass",
                    "description": "(String) Password. The password can contain only alphanumeric characters. A maximum of 25 characters is allowed"
                  }
                },
                "required": [
                  "voip_port",
                  "phone_number",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "VoIP port pots_0/1 enabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_onu_voip_port/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU VoIP port by ONU unique external ID",
        "operationId": "disable_onu_voip_port_by_onu_unique_external_id",
        "x-postman-id": "c0a7ec36-9a60-4401-b242-086396a4cd47",
        "x-postman-order": 74,
        "description": "## Disable ONU VoIP port for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU VoIP port was disabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no VoIP port was provided\n- wrong VoIP port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "voip_port": {
                    "type": "string",
                    "example": "pots_0/1",
                    "description": "(String) VoIP port"
                  }
                },
                "required": [
                  "voip_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "VoIP port pots_0/1 disabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_wan_mode_setup_via_onu_webpage/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WAN mode to Setup via ONU webpage by ONU unique external ID",
        "operationId": "set_onu_wan_mode_to_setup_via_onu_webpage_by_onu_unique_external_id",
        "x-postman-id": "0646458c-b83d-4b86-b248-7b2d830da36c",
        "x-postman-order": 75,
        "description": "## Set ONU WAN mode to Setup via ONU webpage for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WAN mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU WAN mode updated to Setup via ONU webpage for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_wan_mode_dhcp/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WAN mode to DHCP by ONU unique external ID",
        "operationId": "set_onu_wan_mode_to_dhcp_by_onu_unique_external_id",
        "x-postman-id": "11682489-4b03-4d4f-9773-1d04a51845ff",
        "x-postman-order": 76,
        "description": "## Set ONU WAN mode to DHCP for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WAN mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "configuration_method": {
                    "type": "string",
                    "example": "OMCI",
                    "description": "(String) Configuration method. Allowed values are \"OMCI\", \"TR069\"."
                  },
                  "ip_protocol": {
                    "type": "string",
                    "example": "ipv4ipv6",
                    "description": "(String) IP protocol. Allowed values are \"ipv4\", ipv4ipv6\"."
                  },
                  "ipv6_address_mode": {
                    "type": "string",
                    "example": "None",
                    "description": "(String) IPv6 address mode. Allowed values are \"DHCPv6\", \"Auto\", \"Static\", \"None\""
                  },
                  "ipv6_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 address"
                  },
                  "ipv6_gateway": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 gateway"
                  },
                  "ipv6_prefix_delegation_mode": {
                    "type": "string",
                    "example": "DHCPv6-PD",
                    "description": "(String) IPv6 prefix. Allowed values are \"DHCPv6\", \"Static\", \"None\""
                  },
                  "ipv6_prefix_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 prefix address"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU WAN mode updated to DHCP for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_wan_mode_static_ip/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WAN mode to Static IP by ONU unique external ID",
        "operationId": "set_onu_wan_mode_to_static_ip_by_onu_unique_external_id",
        "x-postman-id": "f2bcff5c-6c6d-4723-862f-0072c3e56345",
        "x-postman-order": 77,
        "description": "## Set ONU WAN mode to Static IP for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WAN mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no IPv4 address, subnet mask, gateway, DNS1 was provided\n- wrong IPv4 address, subnet mask, gateway, DNS1, DNS2 was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ipv4_address": {
                    "type": "string",
                    "example": "10.100.0.11",
                    "description": "(String) IPv4 address. The IPv4 address must be a valid IP address"
                  },
                  "subnet_mask": {
                    "type": "string",
                    "example": "255.255.255.0",
                    "description": "(String) Subnet mask. The Subnet mask must be a valid IP address"
                  },
                  "gateway": {
                    "type": "string",
                    "example": "10.100.0.1",
                    "description": "(String) Gateway. The Gateway must be a valid IP address"
                  },
                  "dns1": {
                    "type": "string",
                    "example": "8.8.8.8",
                    "description": "(String) DNS1. The DNS1 must be a valid IP address"
                  },
                  "dns2": {
                    "type": "string",
                    "example": "8.8.4.4",
                    "description": "(String) DNS2. The DNS2 must be a valid IP address"
                  },
                  "configuration_method": {
                    "type": "string",
                    "example": "OMCI",
                    "description": "(String) WAN configuration method. Allowed values are \"OMCI\", \"TR069\"."
                  },
                  "ip_protocol": {
                    "type": "string",
                    "example": "ipv4ipv6",
                    "description": "(String) IP protocol. Allowed values are \"ipv4\", ipv4ipv6\"."
                  },
                  "ipv6_address_mode": {
                    "type": "string",
                    "example": "None",
                    "description": "(String) IPv6 address mode. Allowed values are \"DHCPv6\", \"Auto\", \"Static\", \"None\""
                  },
                  "ipv6_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 address"
                  },
                  "ipv6_gateway": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 gateway"
                  },
                  "ipv6_prefix_delegation_mode": {
                    "type": "string",
                    "example": "DHCPv6-PD",
                    "description": "(String) IPv6 prefix. Allowed values are \"DHCPv6\", \"Static\", \"None\""
                  },
                  "ipv6_prefix_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 prefix address"
                  }
                },
                "required": [
                  "ipv4_address",
                  "subnet_mask",
                  "gateway",
                  "dns1"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU WAN mode updated to Static IP for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_wan_mode_pppoe/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WAN mode to PPPoE by ONU unique external ID",
        "operationId": "set_onu_wan_mode_to_pppoe_by_onu_unique_external_id",
        "x-postman-id": "95a4bdb5-9ecc-4a25-816a-acbd483616e2",
        "x-postman-order": 78,
        "description": "## Set ONU WAN mode to PPPoE for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WAN mode was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no username, password was provided\n- wrong username, password was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "example": "user",
                    "description": "(String) PPPoE username. The username can contain only alphanumeric characters. A maximum of 64 characters is allowed"
                  },
                  "password": {
                    "type": "string",
                    "example": "pass",
                    "description": "(String) PPPoE password. The password can contain only alphanumeric characters. A maximum of 64 characters is allowed"
                  },
                  "configuration_method": {
                    "type": "string",
                    "example": "OMCI",
                    "description": "(String) WAN configuration method. Allowed values are \"OMCI\", \"TR069\"."
                  },
                  "ip_protocol": {
                    "type": "string",
                    "example": "ipv4ipv6",
                    "description": "(String) IP protocol. Allowed values are \"ipv4\", ipv4ipv6\"."
                  },
                  "ipv6_address_mode": {
                    "type": "string",
                    "example": "None",
                    "description": "(String) IPv6 address mode. Allowed values are \"DHCPv6\", \"Auto\", \"Static\", \"None\""
                  },
                  "ipv6_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 address"
                  },
                  "ipv6_gateway": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 gateway"
                  },
                  "ipv6_prefix_delegation_mode": {
                    "type": "string",
                    "example": "DHCPv6-PD",
                    "description": "(String) IPv6 prefix. Allowed values are \"DHCPv6\", \"Static\", \"None\""
                  },
                  "ipv6_prefix_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 prefix address"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU WAN mode updated to PPPoE for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_wan_configuration_method/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WAN configuration method by ONU unique external ID",
        "operationId": "set_onu_wan_configuration_method_by_onu_unique_external_id",
        "x-postman-id": "8f510e57-8c26-4b6b-a1d8-e5b84cc1e766",
        "x-postman-order": 79,
        "description": "## Set ONU WAN configuration method for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WAN configuration method was updated successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command\n- TR069 and Management IP are not enabled on the ONU",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "configuration_method": {
                    "type": "string",
                    "example": "OMCI",
                    "description": "(String) Configuration method. Allowed values are \"OMCI\", \"TR069\"."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU WAN configuration method set to OMCI for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_onu_wan_ip_version/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WAN IP version by ONU unique external ID",
        "operationId": "set_onu_wan_ip_version_by_onu_unique_external_id",
        "x-postman-id": "6cd624f0-f904-426b-a64c-29ac527d0f3c",
        "x-postman-order": 80,
        "description": "## Set ONU WAN IP version for a specified ONU unique external ID\n\nThis method can be used to toggle between IPv4 and dual-stack IPv4/IPv6.\n\nThe request returns succesfully if the ONU WAN IP version was updated successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command\n- TR069 and Management IP are not enabled on the ONU",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "configuration_method": {
                    "type": "string",
                    "example": "TR069",
                    "description": "(String) Configuration method. Allowed values are \"OMCI\", \"TR069\"."
                  },
                  "ip_protocol": {
                    "type": "string",
                    "example": "ipv4ipv6",
                    "description": "(String) IP protocol. Allowed values are \"ipv4\", ipv4ipv6\"."
                  },
                  "ipv6_address_mode": {
                    "type": "string",
                    "example": "None",
                    "description": "(String) IPv6 address mode. Allowed values are \"DHCPv6\", \"Auto\", \"Static\", \"None\""
                  },
                  "ipv6_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 address"
                  },
                  "ipv6_gateway": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 gateway"
                  },
                  "ipv6_prefix_delegation_mode": {
                    "type": "string",
                    "example": "DHCPv6-PD",
                    "description": "(String) IPv6 prefix. Allowed values are \"DHCPv6\", \"Static\", \"None\""
                  },
                  "ipv6_prefix_address": {
                    "type": "string",
                    "example": "",
                    "description": "(String) IPv6 prefix address"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU WAN IP version updated for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_max_mac_learn/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU max-mac-learn by ONU unique external ID",
        "operationId": "update_onu_max_mac_learn_by_onu_unique_external_id",
        "x-postman-id": "cc75eea2-216d-4b40-b6be-febb0a0a059b",
        "x-postman-order": 81,
        "description": "## Update ONU max-mac-learn for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU max-mac-learn was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- Max-mac-learn feature was not enabled for this OLT\n- no ONU max-mac-learn was provided\n- wrong ONU max-mac-learn was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "enable_max_mac_learn": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) Enable max-mac-learn. Allowed values: 1 for enabling max-mac-learn, 0 for disabling max-mac-learn"
                  },
                  "max_mac_learn": {
                    "type": "integer",
                    "example": "5",
                    "description": "(Int) Max MACs allowed"
                  }
                },
                "required": [
                  "enable_max_mac_learn"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Max-mac-learn updated for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Max MACs allowed must be a number"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_ip_dhcp_snooping/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU IP DHCP-Snooping by ONU unique external ID",
        "operationId": "enable_onu_ip_dhcp_snooping_by_onu_unique_external_id",
        "x-postman-id": "c7c2cc12-2ce1-4774-a4e8-de0a88287891",
        "x-postman-order": 82,
        "description": "## Enable ONU IP DHCP-Snooping for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU IP DHCP-Snooping was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- IP DHCP-Snooping feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "IP DHCP-Snooping enabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_ip_dhcp_snooping/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU IP DHCP-Snooping by ONU unique external ID",
        "operationId": "disable_onu_ip_dhcp_snooping_by_onu_unique_external_id",
        "x-postman-id": "6809d89b-2400-4bb2-bf17-8d3dce0ab3e9",
        "x-postman-order": 83,
        "description": "## Disable ONU IP DHCP-Snooping for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU IP DHCP-Snooping was disabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- IP DHCP-Snooping feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "IP DHCP-Snooping disabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_dhcp_option82/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU DHCP Option82 by ONU unique external ID",
        "operationId": "enable_onu_dhcp_option82_by_onu_unique_external_id",
        "x-postman-id": "7d77f62b-b621-4e13-a459-b1a29232f4c6",
        "x-postman-order": 84,
        "description": "## Enable ONU DHCP Option82 for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU DHCP Option82 was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- DHCP Option82 feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "DHCP Option82 enabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_dhcp_option82/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU DHCP Option82 by ONU unique external ID",
        "operationId": "disable_onu_dhcp_option82_by_onu_unique_external_id",
        "x-postman-id": "87e2133a-58d9-43a5-aa99-d70f3bfe7d39",
        "x-postman-order": 85,
        "description": "## Disable ONU DHCP Option82 for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU DHCP Option82 was disabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- DHCP Option82 feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "DHCP option82 disabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_ip_source_guard/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU IP source-guard by ONU unique external ID",
        "operationId": "enable_onu_ip_source_guard_by_onu_unique_external_id",
        "x-postman-id": "381e59a7-47d1-42e2-a8c6-b9c19c1686c3",
        "x-postman-order": 86,
        "description": "## Enable ONU IP source-guard for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU IP source-guard was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- IP source-guard feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "IP source-guard enabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_ip_source_guard/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU IP source-guard by ONU unique external ID",
        "operationId": "disable_onu_ip_source_guard_by_onu_unique_external_id",
        "x-postman-id": "c4dd3fd3-04fe-4c7e-8c5e-870fa2375113",
        "x-postman-order": 87,
        "description": "## Disable ONU IP source-guard for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU IP source-guard was disabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- IP source-guard feature was not enabled for this OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "IP source-guard disabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_allow_remote_access_to_wan_ip/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU allow remote access to WAN IP by ONU unique external ID",
        "operationId": "enable_onu_allow_remote_access_to_wan_ip_by_onu_unique_external_id",
        "x-postman-id": "52b33c92-db78-4088-a344-250fd15513bd",
        "x-postman-order": 88,
        "description": "## Enable ONU allow remote access to WAN IP for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU allow remote access to WAN IP was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- Allow remote access to WAN IP feature is not supported for this ONU/OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "allow_access_from": {
                    "type": "string",
                    "example": "everywhere",
                    "description": "(String) Allowed values are 'everywhere' and 'acl'. Default value is 'everywhere'."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Allow remote access to WAN IP enabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_allow_remote_access_to_wan_ip/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU allow remote access to WAN IP by ONU unique external ID",
        "operationId": "disable_onu_allow_remote_access_to_wan_ip_by_onu_unique_external_id",
        "x-postman-id": "5d8b5782-e942-4f8c-b6d5-bbfe19f10a73",
        "x-postman-order": 89,
        "description": "## Disable ONU allow remote access to WAN IP for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU allow remote access to WAN IP was disabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- Allow remote access to WAN IP feature is not supported for this ONU/OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Allow remote access to WAN IP disabled for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_onu_speed_profiles/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU speed profiles by ONU unique external ID",
        "operationId": "update_onu_speed_profiles_by_onu_unique_external_id",
        "x-postman-id": "6b753440-3567-8644-bfed-045dbfe3f248",
        "x-postman-order": 90,
        "description": "## Update ONU upload and download speed profiles for a specified ONU unique external ID\n\nAt least one speed profile name must be provided. The profile names must be the ones defined in SmartOLT Speed Profiles section.\n\nThe request returns succesfully if the profile names on the ONU were updated or the profiles names provided are the same as the ones already saved on the ONU.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no speed profile names were provided\n- no upload speed profile was found with the name provided\n- no download speed profile was found with the name provided\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work and return immediately. SmartOLT first does the same checks as in the normal mode. If a check fails, the request returns the same 400 error.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- the response tells you that the action was *accepted*, not what the OLT did\n- the response contains `\"queued\": true`\n- if the newest queued action for this ONU is the same action, the ONU is not queued again\n- the action is queued also when the speed profiles are the same as the ones saved on the ONU\n- SmartOLT runs all actions for one ONU in the order it received them\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result\n- the call counts in the hourly budget for asynchronous calls, not in the normal hourly budget\n\n### ONU with queued actions\n\nIf the ONU already has queued actions, a request without `async` is also queued. This keeps the actions in the order SmartOLT received them. The response then contains `\"queued\": true`. Do not mark the action as done when you see this field. Use [check_bulk_task_status](#check_bulk_task_status) to see the result.\n\nIf another request changes this ONU at the same time, the request returns error 409 with `error_code` `onu_busy`. Send the request again later.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "upload_speed_profile_name": {
                    "type": "string",
                    "example": "50M",
                    "description": "(String) Upload speed profile name"
                  },
                  "download_speed_profile_name": {
                    "type": "string",
                    "example": "100M",
                    "description": "(String) Download speed profile name"
                  },
                  "async": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Speed profiles updated for ONU with ONU external ID test"
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": "The action was queued and is being processed.",
                      "response_code": "success",
                      "status": true,
                      "queued": true
                    }
                  },
                  "200_speed_profiles_are_the_same_as_saved_on_onu": {
                    "summary": "200 - Speed profiles are the same as saved on ONU",
                    "value": {
                      "status": true,
                      "response": "Provided speed profiles are the same with existing ones for ONU with ONU external ID test"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_specify_at_least_one_speed_profile": {
                    "summary": "400 - Specify at least one speed profile",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify at least one speed profile name"
                    }
                  },
                  "400_no_download_speed_profile_found": {
                    "summary": "400 - No download speed profile found",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No download speed profile with the name 100G was found"
                    }
                  },
                  "400_no_upload_speed_profile_found": {
                    "summary": "400 - No upload speed profile found",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No upload speed profile with the name 50G was found"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_update_speed_profiles": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update multiple ONUs speed profiles by ONU unique external IDs",
        "operationId": "update_multiple_onus_speed_profiles_by_onu_unique_external_ids",
        "x-postman-id": "536e8e0e-82bb-4ce8-a1bf-ee8a845045ee",
        "x-postman-order": 91,
        "description": "## Update multiple ONUs upload and download speed profiles for a specified list of ONU unique external IDs\n\nAt least one speed profile name must be provided. The profile names must be the ones defined in SmartOLT Speed Profiles section.  \nThe request returns succesfully if the profile names on the ONUs were updated or the profiles names provided are the same as the ones already saved on the ONUs.  \nIt returns a 400 error code when:\n\n- another API call to the same method is already in progress\n- no ONU external IDs were provided\n- more than the maximum allowed number of ONUs were provided (A maximum of 50 ONU unique external IDs are allowed, or 10 000 when `async` is `1`)\n- no speed profile names were provided\n- no upload speed profile was found with the name provided\n- no download speed profile was found with the name provided\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work as a batch action. The request returns immediately. The response tells you which ONUs were *accepted*, not what the OLT did.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- a maximum of 10 000 ONU unique external IDs are allowed\n- accepted ONUs report that the action was queued and is being processed\n- an ONU that already has the same action queued is not queued twice\n- duplicate IDs in one call are collapsed\n- every other ONU carries the reason it was skipped: ONU not found, or subscription expired\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result for each ONU",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "test,test1",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 50 ONU unique external IDs are allowed, or 10 000 when async is 1"
                  },
                  "upload_speed_profile_name": {
                    "type": "string",
                    "example": "50M",
                    "description": "(String) Upload speed profile name"
                  },
                  "download_speed_profile_name": {
                    "type": "string",
                    "example": "100M",
                    "description": "(String) Download speed profile name"
                  },
                  "async": {
                    "type": "string",
                    "example": "1",
                    "description": "(Optional, Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "test": "Speed profiles updated for ONU with ONU external ID test",
                        "test1": "Speed profiles updated for ONU with ONU external ID test1"
                      }
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": {
                        "ONU001": "The action was queued and is being processed.",
                        "ONU002": "The same action is already queued for this ONU.",
                        "NOSUCHONU": "ONU not found"
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Specify at least one speed profile",
            "content": {
              "application/json": {
                "examples": {
                  "400_specify_at_least_one_speed_profile": {
                    "summary": "400 - Specify at least one speed profile",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify at least one speed profile name"
                    }
                  },
                  "400_no_download_speed_profile_found": {
                    "summary": "400 - No download speed profile found",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No download speed profile with the name 100G was found"
                    }
                  },
                  "400_no_upload_speed_profile_found": {
                    "summary": "400 - No upload speed profile found",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No upload speed profile with the name 50G was found"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/update_service_port/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Update ONU service port by ONU unique external ID",
        "operationId": "update_onu_service_port_by_onu_unique_external_id",
        "x-postman-id": "b9325fdc-75b7-4c47-a631-ce9e06a3cc9a",
        "x-postman-order": 92,
        "description": "## Update ONU service port for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU service port was updated successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no service port was provided\n- wrong service port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "service_port": {
                    "type": "string",
                    "example": "3",
                    "description": "(String) ONU service port"
                  },
                  "cvlan": {
                    "type": "integer",
                    "example": "101",
                    "description": "(Int) ONU CVLAN-ID"
                  },
                  "svlan": {
                    "type": "integer",
                    "example": "102",
                    "description": "(Int) ONU SVLAN-ID"
                  },
                  "tag_transform_mode": {
                    "type": "string",
                    "example": "translate",
                    "description": "(String) Tag-transform mode. Allowed values: default, translate, translate-and-add"
                  },
                  "use_other_all_tls_vlan": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Int) Use \"other-all\" TLS VLAN. Allowed values: 0, 1"
                  },
                  "vlan": {
                    "type": "integer",
                    "example": "100",
                    "description": "(Int) ONU VLAN-ID"
                  },
                  "upload_speed_profile_name": {
                    "type": "string",
                    "example": "50M",
                    "description": "(String) Upload speed profile name"
                  },
                  "download_speed_profile_name": {
                    "type": "string",
                    "example": "100M",
                    "description": "(String) Download speed profile name"
                  }
                },
                "required": [
                  "service_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Service-port ID 3 updated for ONU with ONU external ID test"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU Service-port ID"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_ethernet_port_lan/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU ethernet port mode to LAN by ONU unique external ID",
        "operationId": "set_onu_ethernet_port_mode_to_lan_by_onu_unique_external_id",
        "x-postman-id": "1d8dfed1-1919-436a-9bd4-83965129f8c5",
        "x-postman-order": 93,
        "description": "## Set ONU ethernet port mode to LAN for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port mode was set to LAN successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  Ethernet port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  }
                },
                "required": [
                  "ethernet_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 mode set to LAN for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_ethernet_port_iptv/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU ethernet port mode to IPTV by ONU unique external ID",
        "operationId": "set_onu_ethernet_port_mode_to_iptv_by_onu_unique_external_id",
        "x-postman-id": "ec14b5c4-d390-48af-9f60-22709b86dd4d",
        "x-postman-order": 94,
        "description": "## Set ONU ethernet port mode to IPTV for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port mode was set to IPTV successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- IPTV is not enabled on the ONU\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  Ethernet port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  }
                },
                "required": [
                  "ethernet_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 mode set to IPTV for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_ethernet_port_access/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU ethernet port mode to Access by ONU unique external ID",
        "operationId": "set_onu_ethernet_port_mode_to_access_by_onu_unique_external_id",
        "x-postman-id": "cc39f5b2-29c6-471f-a649-1ea4a684ce07",
        "x-postman-order": 95,
        "description": "## Set ONU ethernet port mode to Access for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port mode was set to Access successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- no VLAN-ID was provided\n- the VLAN-ID is not in the ONU attached VLANs list\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  },
                  "vlan": {
                    "type": "integer",
                    "example": "10",
                    "description": "(Int) Ethernet port VLAN-ID"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  Ethernet port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  }
                },
                "required": [
                  "ethernet_port",
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 mode set to Access for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_ethernet_port_hybrid/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU ethernet port mode to Hybrid by ONU unique external ID",
        "operationId": "set_onu_ethernet_port_mode_to_hybrid_by_onu_unique_external_id",
        "x-postman-id": "ab1c9d33-d85d-4308-9431-de2d20e69ac4",
        "x-postman-order": 96,
        "description": "## Set ONU ethernet port mode to Hybrid for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port mode was set to Hybrid successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- no VLAN-ID was provided\n- the VLAN-ID is not in the ONU attached VLANs list\n- no Allowed VLANs were provided\n- the Allowed VLANs list is in the wrong format\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  },
                  "vlan": {
                    "type": "integer",
                    "example": "10",
                    "description": "(Int) Ethernet port VLAN-ID"
                  },
                  "allowed_vlans": {
                    "type": "string",
                    "example": "20,33",
                    "description": "(String) Ethernet port allowed VLANs, comma separated. The VLANs list can contain only digits and the comma (,) character"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  Ethernet port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  }
                },
                "required": [
                  "ethernet_port",
                  "vlan",
                  "allowed_vlans"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 mode set to Hybrid for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_ethernet_port_trunk/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU ethernet port mode to Trunk by ONU unique external ID",
        "operationId": "set_onu_ethernet_port_mode_to_trunk_by_onu_unique_external_id",
        "x-postman-id": "8008085e-84d1-4d3f-bfb8-dd1d003c142e",
        "x-postman-order": 97,
        "description": "## Set ONU ethernet port mode to Trunk for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port mode was set to Trunk successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- no Allowed VLANs were provided\n- the Allowed VLANs list is in the wrong format\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  },
                  "allowed_vlans": {
                    "type": "string",
                    "example": "20,33",
                    "description": "(String) Ethernet port allowed VLANs, comma separated. The VLANs list can contain only digits and the comma (,) character"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  Ethernet port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  }
                },
                "required": [
                  "ethernet_port",
                  "allowed_vlans"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 mode set to Trunk for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_ethernet_port_transparent/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU ethernet port mode to Transparent by ONU unique external ID",
        "operationId": "set_onu_ethernet_port_mode_to_transparent_by_onu_unique_external_id",
        "x-postman-id": "be835312-92e4-4a89-b751-0fab05f542d4",
        "x-postman-order": 98,
        "description": "## Set ONU ethernet port mode to Transparent for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port mode was set to Transparent successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  Ethernet port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  }
                },
                "required": [
                  "ethernet_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 mode set to Transparent for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/shutdown_ethernet_port/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Shutdown ONU ethernet port by ONU unique external ID",
        "operationId": "shutdown_onu_ethernet_port_by_onu_unique_external_id",
        "x-postman-id": "a30246b6-7236-474a-8889-3af85f9f36d3",
        "x-postman-order": 99,
        "description": "## Shutdown ONU ethernet port for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU ethernet port was shutdown successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no ethernet port was provided\n- wrong ethernet port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ethernet_port": {
                    "type": "string",
                    "example": "eth_0/1",
                    "description": "(String) ONU ethernet port"
                  }
                },
                "required": [
                  "ethernet_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "eth_0/1 port shutdown for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU ethernet port"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_wifi_port_lan/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WiFi port mode to LAN by ONU unique external ID",
        "operationId": "set_onu_wifi_port_mode_to_lan_by_onu_unique_external_id",
        "x-postman-id": "a41dbe8e-fc8c-478d-ad1b-adbe5ff6a34a",
        "x-postman-order": 100,
        "description": "## Set ONU WiFi port mode to LAN for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port mode was set to LAN successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  WiFi port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  },
                  "ssid": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) WiFi port SSID"
                  },
                  "password": {
                    "type": "string",
                    "example": "testpass",
                    "description": "(String) WiFi port password"
                  },
                  "authentication_mode": {
                    "type": "string",
                    "example": "WPA2",
                    "description": "(String) WiFi port authentication mode. Allowed values: WPA2, Open-system"
                  }
                },
                "required": [
                  "wifi_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 mode set to LAN for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_wifi_port_iptv/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WiFi port mode to IPTV by ONU unique external ID",
        "operationId": "set_onu_wifi_port_mode_to_iptv_by_onu_unique_external_id",
        "x-postman-id": "5261402b-cf31-4d70-bb86-f9aac3d76282",
        "x-postman-order": 101,
        "description": "## Set ONU WiFi port mode to IPTV for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port mode was set to IPTV successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- IPTV is not enabled on the ONU\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  WiFi port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  },
                  "ssid": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) WiFi port SSID"
                  },
                  "password": {
                    "type": "string",
                    "example": "testpass",
                    "description": "(String) WiFi port password"
                  },
                  "authentication_mode": {
                    "type": "string",
                    "example": "WPA2",
                    "description": "(String) WiFi port authentication mode. Allowed values: WPA2, Open-system"
                  }
                },
                "required": [
                  "wifi_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 mode set to IPTV for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_wifi_port_access/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WiFi port mode to Access by ONU unique external ID",
        "operationId": "set_onu_wifi_port_mode_to_access_by_onu_unique_external_id",
        "x-postman-id": "9f00d7b7-f403-4f78-93de-85f0e051a45e",
        "x-postman-order": 102,
        "description": "## Set ONU WiFi port mode to Access for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port mode was set to Access successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- no VLAN-ID was provided\n- the VLAN-ID is not in the ONU attached VLANs list\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  },
                  "vlan": {
                    "type": "integer",
                    "example": "10",
                    "description": "(Int) WiFi port VLAN-ID"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  WiFi port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  },
                  "ssid": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) WiFi port SSID"
                  },
                  "password": {
                    "type": "string",
                    "example": "testpass",
                    "description": "(String) WiFi port password"
                  },
                  "authentication_mode": {
                    "type": "string",
                    "example": "WPA2",
                    "description": "(String) WiFi port authentication mode. Allowed values: WPA2, Open-system"
                  }
                },
                "required": [
                  "wifi_port",
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 mode set to Access for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_wifi_port_hybrid/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WiFi port mode to Hybrid by ONU unique external ID",
        "operationId": "set_onu_wifi_port_mode_to_hybrid_by_onu_unique_external_id",
        "x-postman-id": "a01fba7a-e77b-406e-bdf8-b52b53fe6e1a",
        "x-postman-order": 103,
        "description": "## Set ONU WiFi port mode to Hybrid for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port mode was set to Hybrid successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- no VLAN-ID was provided\n- the VLAN-ID is not in the ONU attached VLANs list\n- no Allowed VLANs were provided\n- the Allowed VLANs list is in the wrong format\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  },
                  "vlan": {
                    "type": "integer",
                    "example": "10",
                    "description": "(Int) WiFi port VLAN-ID"
                  },
                  "allowed_vlans": {
                    "type": "string",
                    "example": "20,33",
                    "description": "(String) WiFi port allowed VLANs, comma separated. The VLANs list can contain only digits and the comma (,) character"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  WiFi port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  },
                  "ssid": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) WiFi port SSID"
                  },
                  "password": {
                    "type": "string",
                    "example": "testpass",
                    "description": "(String) WiFi port password"
                  },
                  "authentication_mode": {
                    "type": "string",
                    "example": "WPA2",
                    "description": "(String) WiFi port authentication mode. Allowed values: WPA2, Open-system"
                  }
                },
                "required": [
                  "wifi_port",
                  "vlan",
                  "allowed_vlans"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 mode set to Hybrid for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_wifi_port_trunk/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WiFi port mode to Trunk by ONU unique external ID",
        "operationId": "set_onu_wifi_port_mode_to_trunk_by_onu_unique_external_id",
        "x-postman-id": "511c3b96-db84-4b63-86bc-bc215d7879e8",
        "x-postman-order": 104,
        "description": "## Set ONU WiFi port mode to Trunk for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port mode was set to Trunk successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- no Allowed VLANs were provided\n- the Allowed VLANs list is in the wrong format\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  },
                  "allowed_vlans": {
                    "type": "string",
                    "example": "20,33",
                    "description": "(String) WiFi port allowed VLANs, comma separated. The VLANs list can contain only digits and the comma (,) character"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  WiFi port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  },
                  "ssid": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) WiFi port SSID"
                  },
                  "password": {
                    "type": "string",
                    "example": "testpass",
                    "description": "(String) WiFi port password"
                  },
                  "authentication_mode": {
                    "type": "string",
                    "example": "WPA2",
                    "description": "(String) WiFi port authentication mode. Allowed values: WPA2, Open-system"
                  }
                },
                "required": [
                  "wifi_port",
                  "allowed_vlans"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 mode set to Trunk for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/set_wifi_port_transparent/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Set ONU WiFi port mode to Transparent by ONU unique external ID",
        "operationId": "set_onu_wifi_port_mode_to_transparent_by_onu_unique_external_id",
        "x-postman-id": "5aba1f46-016f-4732-b569-243636d795ce",
        "x-postman-order": 105,
        "description": "## Set ONU WiFi port mode to Transparent for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port mode was set to Transparent successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  },
                  "dhcp": {
                    "type": "string",
                    "example": "No control",
                    "description": "(String)  WiFi port DHCP. Allowed values: No control, From ISP, From ONU, Forbidden"
                  },
                  "ssid": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) WiFi port SSID"
                  },
                  "password": {
                    "type": "string",
                    "example": "testpass",
                    "description": "(String) WiFi port password"
                  },
                  "authentication_mode": {
                    "type": "string",
                    "example": "WPA2",
                    "description": "(String) WiFi port authentication mode. Allowed values: WPA2, Open-system"
                  }
                },
                "required": [
                  "wifi_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 mode set to Transparent for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/shutdown_wifi_port/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Shutdown ONU WiFi port by ONU unique external ID",
        "operationId": "shutdown_onu_wifi_port_by_onu_unique_external_id",
        "x-postman-id": "6eb0837b-29a4-4d14-bf73-aa22390f0bda",
        "x-postman-order": 106,
        "description": "## Shutdown ONU WiFi port for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU WiFi port was shutdown successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- no WiFi port was provided\n- wrong WiFi port was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "wifi_port": {
                    "type": "string",
                    "example": "wifi_0/1",
                    "description": "(String) ONU WiFi port"
                  }
                },
                "required": [
                  "wifi_port"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "wifi_0/1 WiFi port shutdown for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU WiFi port"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/change_web_user_pass/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Change ONU web user and password by ONU unique external ID",
        "operationId": "change_onu_web_user_and_password_by_onu_unique_external_id",
        "x-postman-id": "4788ebe8-ab04-4408-8df7-12602fdcfaf1",
        "x-postman-order": 107,
        "description": "## Change ONU web user and password for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU web user and password were changed successfully.\n\n**Important: The SmartOLT TR069 profile must be enabled for the ONU**\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- TR069 feature is not enabled",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "web_user": {
                    "type": "string",
                    "example": "test",
                    "description": "(String) Web user. Can contain only alphanumeric characters. A minimum of 5 is required, a maximum of 16 characters is allowed."
                  },
                  "web_pass": {
                    "type": "string",
                    "example": "testPass",
                    "description": "(String) Web password. Can contain only alphanumeric characters. A minimum of 8 is required, a maximum of 16 characters is allowed."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Web user pass changed for ONU with ONU external ID onu_unique_external_id"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_iptv/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU IPTV by ONU unique external ID",
        "operationId": "enable_onu_iptv_by_onu_unique_external_id",
        "x-postman-id": "b0933d72-422f-4c70-b75b-935adae22560",
        "x-postman-order": 108,
        "description": "## Enable ONU IPTV for a specified ONU unique external ID\n\nThe request returns succesfully if ONU IPTV was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- IPTV module not enabled on OLT\n- no IPTV VLAN-ID was provided\n- no IPTV upload speed profile was provided\n- no IPTV download speed profile was provided\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "vlan": {
                    "type": "integer",
                    "example": "100",
                    "description": "(Int) IPTV VLAN-ID"
                  },
                  "cvlan": {
                    "type": "integer",
                    "example": "101",
                    "description": "(Int) IPTV CVLAN-ID"
                  },
                  "svlan": {
                    "type": "integer",
                    "example": "102",
                    "description": "(Int) IPTV SVLAN-ID"
                  },
                  "tag_transform_mode": {
                    "type": "string",
                    "example": "translate",
                    "description": "(String) Tag-transform mode. Allowed values: default, translate, translate-and-add"
                  },
                  "upload_speed_profile_name": {
                    "type": "string",
                    "example": "50M",
                    "description": "(String) IPTV upload speed profile name"
                  },
                  "download_speed_profile_name": {
                    "type": "string",
                    "example": "100M",
                    "description": "(String) IPTV upload speed profile name"
                  },
                  "allowed_macs": {
                    "type": "string",
                    "example": "",
                    "description": "(String) Allowed MACs, separated by comma"
                  },
                  "filtered_macs": {
                    "type": "string",
                    "example": "",
                    "description": "(String) Filtered MACs, separated by comma"
                  }
                },
                "required": [
                  "vlan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "IPTV enabled"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - Invalid parameters",
            "content": {
              "application/json": {
                "examples": {
                  "400_invalid_parameters": {
                    "summary": "400 - Invalid parameters",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: Please specify the ONU IPTV VLAN-ID"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_iptv/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU IPTV by ONU unique external ID",
        "operationId": "disable_onu_iptv_by_onu_unique_external_id",
        "x-postman-id": "c2f0e3a4-f62a-4269-bb6d-79c40afea929",
        "x-postman-order": 109,
        "description": "## Disable ONU IPTV for a specified ONU unique external ID\n\nThe request returns succesfully if ONU IPTV was disabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- IPTV module not enabled on OLT\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "IPTV disabled"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  },
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable_catv/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU CATV by ONU unique external ID",
        "operationId": "enable_onu_catv_by_onu_unique_external_id",
        "x-postman-id": "b7a4be0a-daf3-4d7d-b819-99cb1515a1e7",
        "x-postman-order": 110,
        "description": "## Enable ONU CATV for a specified ONU unique external ID\n\nThe request returns succesfully if ONU CATV was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- CATV not supported by ONU-Type\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work and return immediately. SmartOLT first does the same checks as in the normal mode. If a check fails, the request returns the same 400 error.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- the response tells you that the action was *accepted*, not what the OLT did\n- the response contains `\"queued\": true`\n- if the newest queued action for this ONU is the same action, the ONU is not queued again\n- SmartOLT runs all actions for one ONU in the order it received them\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result\n- the call counts in the hourly budget for asynchronous calls, not in the normal hourly budget\n\n### ONU with queued actions\n\nIf the ONU already has queued actions, a request without `async` is also queued. This keeps the actions in the order SmartOLT received them. The response then contains `\"queued\": true`. Do not mark the action as done when you see this field. Use [check_bulk_task_status](#check_bulk_task_status) to see the result.\n\nIf another request changes this ONU at the same time, the request returns error 409 with `error_code` `onu_busy`. Send the request again later.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "async": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "CATV enabled"
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": "The action was queued and is being processed.",
                      "response_code": "success",
                      "status": true,
                      "queued": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_enable_catv": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable multiple ONUs CATV by ONU unique external IDs",
        "operationId": "enable_multiple_onus_catv_by_onu_unique_external_ids",
        "x-postman-id": "3a5bd9ce-a30c-49ab-9012-98d763b58c9e",
        "x-postman-order": 111,
        "description": "The request returns succesfully if ONUs CATV were enabled successfully.\n\nIt returns a 400 error code when:\n\n- another API call to the same method is already in progress\n- no ONU external IDs were provided\n- more than the maximum allowed number of ONUs were provided (A maximum of 50 ONU unique external IDs are allowed, or 10 000 when `async` is `1`)\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work as a batch action. The request returns immediately. The response tells you which ONUs were *accepted*, not what the OLT did.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- a maximum of 10 000 ONU unique external IDs are allowed\n- accepted ONUs report that the action was queued and is being processed\n- an ONU that already has the same action queued is not queued twice\n- duplicate IDs in one call are collapsed\n- every other ONU carries the reason it was skipped: ONU not found, or subscription expired, the ONU type does not support CATV, or the ONU has no ONU type. An ONU that already has CATV enabled is not queued and reports `ONU CATV enabled`\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result for each ONU",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "test,test1",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 50 ONU unique external IDs are allowed, or 10 000 when async is 1"
                  },
                  "async": {
                    "type": "string",
                    "example": "1",
                    "description": "(Optional, Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "test": "ONU test CATV enabled",
                        "test1": "ONU test1 CATV enabled"
                      }
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": {
                        "ONU001": "The action was queued and is being processed.",
                        "ONU002": "The same action is already queued for this ONU.",
                        "ONU003": "ONU ONU003: CATV not supported by ONU-Type",
                        "ONU004": "ONU ONU004 CATV enabled"
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable_catv/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU CATV by ONU unique external ID",
        "operationId": "disable_onu_catv_by_onu_unique_external_id",
        "x-postman-id": "21201bf3-37a6-455e-8703-96af40b0ee9e",
        "x-postman-order": 112,
        "description": "## Disable ONU CATV for a specified ONU unique external ID\n\nTo maintain platform stability and fair resource usage for all users, heavy usage may be subject to rate limiting or even revocation of all access to the SmartOLT API.\n\n❗ **Restrictions\\*\\*\\*\\*🚫 DO NOT use this endpoint for:**\n\n- repeteadly disabling the same ONTs multiple times per week.\n\nThe request returns succesfully if ONU CATV was disabled successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- CATV not supported by ONU-Type\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work and return immediately. SmartOLT first does the same checks as in the normal mode. If a check fails, the request returns the same 400 error.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- the response tells you that the action was *accepted*, not what the OLT did\n- the response contains `\"queued\": true`\n- if the newest queued action for this ONU is the same action, the ONU is not queued again\n- SmartOLT runs all actions for one ONU in the order it received them\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result\n- the call counts in the hourly budget for asynchronous calls, not in the normal hourly budget\n\n### ONU with queued actions\n\nIf the ONU already has queued actions, a request without `async` is also queued. This keeps the actions in the order SmartOLT received them. The response then contains `\"queued\": true`. Do not mark the action as done when you see this field. Use [check_bulk_status](#check_bulk_task_status) to see the result.\n\nIf another request changes this ONU at the same time, the request returns error 409 with `error_code` `onu_busy`. Send the request again later.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "async": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "CATV disabled"
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": "The action was queued and is being processed.",
                      "response_code": "success",
                      "status": true,
                      "queued": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  },
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_disable_catv": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable multiple ONUs CATV by ONU unique external IDs",
        "operationId": "disable_multiple_onus_catv_by_onu_unique_external_ids",
        "x-postman-id": "4f3b2fab-ad08-4735-b64b-5dfbd06ba9b7",
        "x-postman-order": 113,
        "description": "To maintain platform stability and fair resource usage for all users, heavy usage may be subject to rate limiting or even revocation of all access to the SmartOLT API.\n\n❗ **Restrictions\\*\\*\\*\\*🚫 DO NOT use this endpoint for:**\n\nrepeteadly disabling the same ONTs multiple times per week.\n\nThe request returns succesfully if ONUs CATV were disabled successfully.\n\nIt returns a 400 error code when:\n\n- another API call to the same method is already in progress\n- no ONU external IDs were provided\n- more than the maximum allowed number of ONUs were provided (A maximum of 50 ONU unique external IDs are allowed, or 10 000 when `async` is `1`)\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work as a batch action. The request returns immediately. The response tells you which ONUs were *accepted*, not what the OLT did.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- a maximum of 10 000 ONU unique external IDs are allowed\n- accepted ONUs report that the action was queued and is being processed\n- an ONU that already has the same action queued is not queued twice\n- duplicate IDs in one call are collapsed\n- every other ONU carries the reason it was skipped: ONU not found, or subscription expired, the ONU type does not support CATV, or the ONU has no ONU type\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result for each ONU",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "test,test1",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 50 ONU unique external IDs are allowed, or 10 000 when async is 1"
                  },
                  "async": {
                    "type": "string",
                    "example": "1",
                    "description": "(Optional, Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "test": "ONU test CATV disabled",
                        "test1": "ONU test1 CATV disabled"
                      }
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": {
                        "ONU001": "The action was queued and is being processed.",
                        "ONU002": "The same action is already queued for this ONU.",
                        "ONU003": "ONU ONU003: CATV not supported by ONU-Type"
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/reboot/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Reboot ONU by ONU unique external ID",
        "operationId": "reboot_onu_by_onu_unique_external_id",
        "x-postman-id": "4f35a16a-59a1-43a8-b7be-987bf616a988",
        "x-postman-order": 114,
        "description": "## Reboot ONU for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU reboot command was sent successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Device reboot command sent"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/resync_config/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Resync ONU config by ONU unique external ID",
        "operationId": "resync_onu_config_by_onu_unique_external_id",
        "x-postman-id": "49ed152e-7ff3-41d7-9304-bc5369b46074",
        "x-postman-order": 115,
        "description": "## Resync ONU config for a specified ONU unique external ID\n\nThe request returns succesfully if the ONU config was resynced successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Resync config successfully"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/restore_factory_defaults/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Restore ONU factory defaults by ONU unique external ID",
        "operationId": "restore_onu_factory_defaults_by_onu_unique_external_id",
        "x-postman-id": "428ab628-12d3-4f5b-a99e-bad7b838ba09",
        "x-postman-order": 116,
        "description": "## Restore ONU factory defaults for a specified ONU unique external ID\n\nThe request returns succesfully if the restore ONU factory defaults command was sent successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "Device restore defaults command sent"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  },
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/disable/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable ONU by ONU unique external ID",
        "operationId": "disable_onu_by_onu_unique_external_id",
        "x-postman-id": "22e14a03-1c8c-4335-8439-41ef87b0bc41",
        "x-postman-order": 117,
        "description": "## Disable ONU for a specified ONU unique external ID\n\nTo maintain platform stability and fair resource usage for all users, heavy usage may be subject to rate limiting or even revocation of all access to the SmartOLT API.\n\nThe request returns succesfully if ONU was disabled successfully.  \nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work and return immediately. SmartOLT first does the same checks as in the normal mode. If a check fails, the request returns the same 400 error.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- the response tells you that the action was *accepted*, not what the OLT did\n- the response contains `\"queued\": true`\n- if the newest queued action for this ONU is the same action, the ONU is not queued again\n- SmartOLT runs all actions for one ONU in the order it received them\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result\n- the call counts in the hourly budget for asynchronous calls, not in the normal hourly budget\n\n### ONU with queued actions\n\nIf the ONU already has queued actions, a request without `async` is also queued. This keeps the actions in the order SmartOLT received them. The response then contains `\"queued\": true`. Do not mark the action as done when you see this field. Use [check_bulk_task_status](#check_bulk_task_status) to see the result.\n\nIf another request changes this ONU at the same time, the request returns error 409 with `error_code` `onu_busy`. Send the request again later.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "async": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU disabled"
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": "The action was queued and is being processed.",
                      "response_code": "success",
                      "status": true,
                      "queued": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_disable": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Disable multiple ONUs by ONU unique external IDs",
        "operationId": "disable_multiple_onus_by_onu_unique_external_ids",
        "x-postman-id": "05f55ab8-6dbe-42b0-9f75-bcbeb170f0fd",
        "x-postman-order": 118,
        "description": "To maintain platform stability and fair resource usage for all users, heavy usage may be subject to rate limiting or even revocation of all access to the SmartOLT API.\n\nThe request returns succesfully if ONUs were disabled successfully.\n\nIt returns a 400 error code when:\n\n- another API call to the same method is already in progress\n- no ONU external IDs were provided\n- more than the maximum allowed number of ONUs were provided (A maximum of 50 ONU unique external IDs are allowed, or 10 000 when `async` is `1`)\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work as a batch action. The request returns immediately. The response tells you which ONUs were *accepted*, not what the OLT did.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- a maximum of 10 000 ONU unique external IDs are allowed\n- accepted ONUs report that the action was queued and is being processed\n- an ONU that already has the same action queued is not queued twice\n- duplicate IDs in one call are collapsed\n- every other ONU carries the reason it was skipped: ONU not found, or subscription expired\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result for each ONU",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "test,test1",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 50 ONU unique external IDs are allowed, or 10 000 when async is 1"
                  },
                  "async": {
                    "type": "string",
                    "example": "1",
                    "description": "(Optional, Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "test": "ONU test disabled",
                        "test1": "ONU test1 disabled"
                      }
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": {
                        "ONU001": "The action was queued and is being processed.",
                        "ONU002": "The same action is already queued for this ONU.",
                        "NOSUCHONU": "ONU not found"
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/enable/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable ONU by ONU unique external ID",
        "operationId": "enable_onu_by_onu_unique_external_id",
        "x-postman-id": "393d530b-5d69-4d25-9a2b-130282097b23",
        "x-postman-order": 119,
        "description": "## Enable ONU for a specified ONU unique external ID\n\nThe request returns succesfully if ONU was enabled successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work and return immediately. SmartOLT first does the same checks as in the normal mode. If a check fails, the request returns the same 400 error.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- the response tells you that the action was *accepted*, not what the OLT did\n- the response contains `\"queued\": true`\n- if the newest queued action for this ONU is the same action, the ONU is not queued again\n- SmartOLT runs all actions for one ONU in the order it received them\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result\n- the call counts in the hourly budget for asynchronous calls, not in the normal hourly budget\n\n### ONU with queued actions\n\nIf the ONU already has queued actions, a request without `async` is also queued. This keeps the actions in the order SmartOLT received them. The response then contains `\"queued\": true`. Do not mark the action as done when you see this field. Use [check_bulk_task_status](#check_bulk_task_status) to see the result.\n\nIf another request changes this ONU at the same time, the request returns error 409 with `error_code` `onu_busy`. Send the request again later.",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "async": {
                    "type": "integer",
                    "example": "1",
                    "description": "(Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU enabled"
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": "The action was queued and is being processed.",
                      "response_code": "success",
                      "status": true,
                      "queued": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - No ONU for external ID",
            "content": {
              "application/json": {
                "examples": {
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  },
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/bulk_enable": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Enable multiple ONUs by ONU unique external IDs",
        "operationId": "enable_multiple_onus_by_onu_unique_external_ids",
        "x-postman-id": "c8208da1-5f58-40b7-a86b-838babbddff6",
        "x-postman-order": 120,
        "description": "The request returns succesfully if ONUs were enabled successfully.\n\nIt returns a 400 error code when:\n\n- another API call to the same method is already in progress\n- no ONU external IDs were provided\n- more than the maximum allowed number of ONUs were provided (A maximum of 50 ONU unique external IDs are allowed, or 10 000 when `async` is `1`)\n- OLT was unable to process the command\n\n### Asynchronous mode (`async=1`)\n\nSend `async` = `1` to queue the work as a batch action. The request returns immediately. The response tells you which ONUs were *accepted*, not what the OLT did.\n\nIf you do not send `async`, or you send `0`, the request works as described above.\n\nIn asynchronous mode:\n\n- a maximum of 10 000 ONU unique external IDs are allowed\n- accepted ONUs report that the action was queued and is being processed\n- an ONU that already has the same action queued is not queued twice\n- duplicate IDs in one call are collapsed\n- every other ONU carries the reason it was skipped: ONU not found, or subscription expired\n- OLT errors are not returned in this response. Use [check_bulk_task_status](#check_bulk_task_status) to see the result for each ONU",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "test,test1",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 50 ONU unique external IDs are allowed, or 10 000 when async is 1"
                  },
                  "async": {
                    "type": "string",
                    "example": "1",
                    "description": "(Optional, Integer) Send 1 to queue the work and return immediately. Send 0 or leave it out to run the work in the request. Default: 0"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": {
                        "test": "ONU test enabled",
                        "test1": "ONU test1 enabled"
                      }
                    }
                  },
                  "200_ok_async_1": {
                    "summary": "200 - OK (async=1)",
                    "value": {
                      "response": {
                        "ONU001": "The action was queued and is being processed.",
                        "ONU002": "The same action is already queued for this ONU.",
                        "NOSUCHONU": "ONU not found"
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/delete/{onu_external_id}": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Delete ONU by ONU unique external ID",
        "operationId": "delete_onu_by_onu_unique_external_id",
        "x-postman-id": "9f87942e-caa7-4711-85af-420be2bebaff",
        "x-postman-order": 121,
        "description": "## Delete ONU for a specified ONU unique external ID\n\nThe request returns succesfully if ONU was deleted successfully.\n\nIt returns a 400 error code when:\n\n- no ONU external ID was provided\n- no ONU was found for the provided ONU external ID\n- OLT was unable to process the command",
        "parameters": [
          {
            "name": "onu_external_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "status": true,
                      "response": "ONU was deleted"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403 - Forbidden",
            "content": {
              "application/json": {
                "examples": {
                  "403_forbidden": {
                    "summary": "403 - Forbidden",
                    "value": {
                      "status": false,
                      "error": "Invalid API Key."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400 - OLT wasn't able to process command",
            "content": {
              "application/json": {
                "examples": {
                  "400_olt_wasn_t_able_to_process_command": {
                    "summary": "400 - OLT wasn't able to process command",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: OLT wasn't able to process the command"
                    }
                  },
                  "400_no_onu_for_external_id": {
                    "summary": "400 - No ONU for external ID",
                    "value": {
                      "status": false,
                      "error": "Invalid parameters: No ONU was found for this ONU external ID: test7"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/onu/check_bulk_task_status": {
      "post": {
        "tags": [
          "API endpoints"
        ],
        "summary": "Check bulk task status",
        "operationId": "check_bulk_task_status",
        "x-postman-id": "6088e6c4-89ba-4c44-989b-d894fe6f13c9",
        "x-postman-order": 122,
        "description": "Check how the work queued by the bulk endpoints with `async=1` is going, detailed per ONU.\n\nReports the **most recent** enable, disable, speed profile or CATV task row for each ONU, whichever happened last, so it answers both \"is my bulk request still running\" and \"what happened to it\".\n\n`status` **values**\n\n| value | meaning |\n| --- | --- |\n| `queued` | accepted, not picked up by a worker yet |\n| `in_progress` | a worker is running it now |\n| `retrying` | an attempt failed; more attempts remain (up to 4) |\n| `failed` | out of attempts, or the batch action was stopped, or its task is no longer running |\n| `succeeded` | completed successfully |\n| `no_task` | the ONU exists but has no enable, disable, speed profile or CATV task on record |\n| `onu_not_found` | no ONU with that external id is visible to this API key |\n\n**Other fields** (absent for `no_task` / `onu_not_found`)\n\n- `action` — `enable`, `disable`, `update_speed_profiles`, `enable_catv` or `disable_catv`. `catv_sync` means a CATV sync started from the SmartOLT web interface.\n- `attempts` — attempts made so far.\n- `date_start` / `date_end` — `null` until the worker starts / finishes an attempt.\n- `error_message` — the error from the last failed attempt, passed through from the OLT where there was one. Always `null` for `succeeded`.\n\nThe row can also come from an action that was not started by the API, for example a batch action in the SmartOLT web interface or the automatic sync.\n\nConfiguration preset tasks are not included. Use `check_configuration_preset_task_status` for them.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "onus_external_ids": {
                    "type": "string",
                    "example": "ONU001,ONU002",
                    "description": "(String) Comma separated list of ONU unique external IDs. A maximum of 10 000 ONU unique external IDs are allowed"
                  }
                },
                "required": [
                  "onus_external_ids"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200 - OK",
            "content": {
              "application/json": {
                "examples": {
                  "200_ok": {
                    "summary": "200 - OK",
                    "value": {
                      "response": {
                        "NOSUCHONU": {
                          "status": "onu_not_found"
                        },
                        "ONU001": {
                          "status": "succeeded",
                          "action": "enable",
                          "attempts": 1,
                          "date_start": "2026-09-24 16:59:41",
                          "date_end": "2026-09-24 17:00:12",
                          "error_message": null
                        },
                        "ONU002": {
                          "status": "failed",
                          "action": "disable_catv",
                          "attempts": 4,
                          "date_start": "2026-09-24 09:19:46",
                          "date_end": "2026-09-24 09:19:53",
                          "error_message": "OLT unreachable. Please check that the Telnet port TCP on OLT IP is open for connections."
                        },
                        "ONU003": {
                          "status": "queued",
                          "action": "update_speed_profiles",
                          "attempts": 0,
                          "date_start": null,
                          "date_end": null,
                          "error_message": null
                        }
                      },
                      "response_code": "success",
                      "status": true
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Token"
      }
    }
  },
  "x-webhooks": {
    "webhook_delivery_sent_by_smartolt_to_your_server": {
      "path": "/smartolt-webhook",
      "method": "post",
      "tags": [
        "Real-time events"
      ],
      "summary": "Webhook delivery (sent by SmartOLT to your server)",
      "operationId": "webhook_delivery_sent_by_smartolt_to_your_server",
      "x-postman-id": "21907f3b-23e5-4337-8762-731525f16f9b",
      "x-postman-order": 1,
      "description": "This item is documentation only. You do not send this request. SmartOLT sends it to your server.\n\n**How to set up a webhook**\n\n1. Go to **General > API key**. Click **Edit** on your API key.\n2. In the **Webhook** panel, enter your HTTPS URL and select the events.\n3. Copy the **Signing secret**.\n4. Click **Send test event**. Your server gets a `webhook.test` event.\n\n**Your server must**\n\n- Use HTTPS on port 443 or 8443, with a valid certificate and a public IP address.\n- Return an HTTP 2xx status within 15 seconds. Redirects count as failures.\n- Ignore a `webhook-id` that it already processed. A retry sends the same `webhook-id` and body.\n\n**Retries**: after a failure, SmartOLT sends the batch again after 5 seconds, 5 minutes, 30 minutes, 2 hours, 5 hours, and then every 10 hours. After 5 days of failures, SmartOLT disables the webhook and sends you an email. You can enable it again on the API key page.\n\n**Headers**\n\n- `webhook-id`: the ID of the batch, for example `msg_3f2a...`.\n- `webhook-timestamp`: the time of the send, in Unix seconds.\n- `webhook-signature`: `v1,` followed by the signature.\n\n**How to check the signature**\n\n1. Remove the `whsec_` prefix from your signing secret. Decode the rest from base64. This is the key.\n2. Make the text `{webhook-id}.{webhook-timestamp}.{raw body}`.\n3. Calculate HMAC-SHA256 of the text with the key. Encode the result in base64.\n4. Compare it with the value after `v1,`. If they are not equal, reject the request.\n\nThis follows the [Standard Webhooks](https://www.standardwebhooks.com/) format, so you can also use their libraries.\n\n```\n// PHP example\n$key = base64_decode(substr($secret, 6));\n$signed = $_SERVER['HTTP_WEBHOOK_ID'] . '.' . $_SERVER['HTTP_WEBHOOK_TIMESTAMP'] . '.' . file_get_contents('php://input');\n$expected = 'v1,' . base64_encode(hash_hmac('sha256', $signed, $key, true));\n$valid = hash_equals($expected, $_SERVER['HTTP_WEBHOOK_SIGNATURE']);\n```\n\nExample bodies for each event type are in the saved examples of this item.",
      "parameters": [
        {
          "name": "webhook-id",
          "in": "header",
          "required": false,
          "schema": {
            "type": "string",
            "example": "msg_3f2a9c0e7b1d4a6f8e2c5b9d0a1f3e7c6b8d2a4f9e0c1b3d5a7f9e2c4b6d8a0f"
          },
          "description": "The ID of the batch. A retry sends the same ID."
        },
        {
          "name": "webhook-timestamp",
          "in": "header",
          "required": false,
          "schema": {
            "type": "string",
            "example": "1791453600"
          },
          "description": "The time of the send, in Unix seconds."
        },
        {
          "name": "webhook-signature",
          "in": "header",
          "required": false,
          "schema": {
            "type": "string",
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4="
          },
          "description": "`v1,` followed by the base64 HMAC-SHA256 signature."
        }
      ],
      "requestBody": {
        "content": {
          "application/json": {
            "example": {
              "type": "onu.status_changed",
              "timestamp": "2026-10-08T10:00:01Z",
              "data": {
                "onus": [
                  {
                    "unique_external_id": "ext-1001",
                    "sn": "HWTC00000015",
                    "olt_id": "1",
                    "board": "0",
                    "port": "5",
                    "onu": "15",
                    "zone_id": "5",
                    "name": "John Doe",
                    "address": "Main St 1",
                    "contact": "+1555",
                    "odb_id": null,
                    "status": "LOS",
                    "last_status_change": "2026-10-08 10:00:00.123456",
                    "status_observed_at": "2026-10-08 10:01:00"
                  }
                ]
              }
            }
          }
        }
      },
      "responses": {
        "200": {
          "description": "webhook.test",
          "content": {
            "application/json": {
              "examples": {
                "webhook_test": {
                  "summary": "webhook.test",
                  "value": {
                    "type": "webhook.test",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {}
                  }
                },
                "onu_status_changed": {
                  "summary": "onu.status_changed",
                  "value": {
                    "type": "onu.status_changed",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "onus": [
                        {
                          "unique_external_id": "ext-1001",
                          "sn": "HWTC00000015",
                          "olt_id": "1",
                          "board": "0",
                          "port": "5",
                          "onu": "15",
                          "zone_id": "5",
                          "name": "John Doe",
                          "address": "Main St 1",
                          "contact": "+1555",
                          "odb_id": null,
                          "status": "LOS",
                          "last_status_change": "2026-10-08 10:00:00.123456",
                          "status_observed_at": "2026-10-08 10:01:00"
                        }
                      ]
                    }
                  }
                },
                "onu_unconfigured_detected": {
                  "summary": "onu.unconfigured_detected",
                  "value": {
                    "type": "onu.unconfigured_detected",
                    "timestamp": "2026-10-10T08:15:02Z",
                    "data": {
                      "onus": [
                        {
                          "id": 0,
                          "pon_type": "gpon",
                          "board": "2",
                          "port": "3",
                          "pon_description": "",
                          "onu": "1",
                          "sn": "ZTEGC7E230E4",
                          "onu_type_name": "ZTE-F660V6.0",
                          "onu_type_id": "75",
                          "olt_id": "1",
                          "is_disabled": 0,
                          "old_location": null,
                          "new_location": null,
                          "external_id": null,
                          "first_seen_at": "2026-10-10 11:14:40",
                          "last_seen_at": "2026-10-10 11:14:40",
                          "actions": [
                            "authorize"
                          ]
                        }
                      ]
                    }
                  }
                },
                "onu_authorized": {
                  "summary": "onu.authorized",
                  "value": {
                    "type": "onu.authorized",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "onus": [
                        {
                          "unique_external_id": "ext-1001",
                          "pon_type": "gpon",
                          "sn": "HWTC00000015",
                          "olt_id": "1",
                          "olt_name": "OLT-A",
                          "board": "0",
                          "port": "5",
                          "onu": "15",
                          "onu_type_id": "3",
                          "onu_type_name": "HG8546M",
                          "zone_id": "5",
                          "zone_name": "Zone 5",
                          "name": "John Doe",
                          "address": "Main St 1",
                          "odb_name": "",
                          "mode": "Routing",
                          "wan_mode": "DHCP",
                          "ip_address": null,
                          "catv": "Disabled",
                          "administrative_status": "Enabled",
                          "authorization_date": "2026-10-08 09:00:00",
                          "contact": "+1555"
                        }
                      ]
                    }
                  }
                },
                "onu_updated": {
                  "summary": "onu.updated",
                  "value": {
                    "type": "onu.updated",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "onus": [
                        {
                          "unique_external_id": "ext-1001",
                          "pon_type": "gpon",
                          "sn": "HWTC00000015",
                          "olt_id": "1",
                          "olt_name": "OLT-A",
                          "board": "0",
                          "port": "5",
                          "onu": "15",
                          "onu_type_id": "3",
                          "onu_type_name": "HG8546M",
                          "zone_id": "5",
                          "zone_name": "Zone 7",
                          "name": "John Doe",
                          "address": "Main St 1",
                          "odb_name": "",
                          "mode": "Routing",
                          "wan_mode": "DHCP",
                          "ip_address": null,
                          "catv": "Disabled",
                          "administrative_status": "Enabled",
                          "authorization_date": "2026-10-08 09:00:00",
                          "contact": "+1555"
                        }
                      ]
                    }
                  }
                },
                "onu_deleted": {
                  "summary": "onu.deleted",
                  "value": {
                    "type": "onu.deleted",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "onus": [
                        {
                          "unique_external_id": "ext-1001",
                          "sn": "HWTC00000015",
                          "olt_id": "1",
                          "board": "0",
                          "port": "5",
                          "onu": "15",
                          "deleted_at": "2026-10-08 10:05:00"
                        }
                      ]
                    }
                  }
                },
                "onu_signal_changed": {
                  "summary": "onu.signal_changed",
                  "value": {
                    "type": "onu.signal_changed",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "onus": [
                        {
                          "unique_external_id": "ext-1001",
                          "sn": "HWTC00000015",
                          "olt_id": "1",
                          "board": "0",
                          "port": "5",
                          "onu": "15",
                          "name": "John Doe",
                          "rx1310": -25.1,
                          "prev_rx1310": -22.9,
                          "band": "Warning",
                          "prev_band": "Very good",
                          "delta": -2.2,
                          "reading_at": "2026-10-08 10:00:00"
                        }
                      ]
                    }
                  }
                },
                "onu_signal_reading": {
                  "summary": "onu.signal_reading",
                  "value": {
                    "type": "onu.signal_reading",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "onus": [
                        {
                          "unique_external_id": "ext-1001",
                          "sn": "HWTC00000015",
                          "olt_id": "1",
                          "board": "0",
                          "port": "5",
                          "onu": "15",
                          "name": "John Doe",
                          "rx1310": -21,
                          "band": "Very good",
                          "reading_at": "2026-10-08 10:00:00"
                        }
                      ]
                    }
                  }
                },
                "pon_outage_started": {
                  "summary": "pon.outage_started",
                  "value": {
                    "type": "pon.outage_started",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "pons": [
                        {
                          "alert_kind": "full_outage",
                          "partial_started_at": null,
                          "partial_last_seen_at": null,
                          "olt_id": "11",
                          "olt_name": "OLT 11",
                          "olt_version": "2.0",
                          "board": "2",
                          "port": "3",
                          "total_onus": "8",
                          "has_gps": "0",
                          "los_count": "8",
                          "power_count": "0",
                          "offline_count": "0",
                          "location_id": "3",
                          "zone_name": "Zone 3",
                          "odb_id": null,
                          "odb_name": null,
                          "pon_description": "Feeder 3",
                          "is_active": "1",
                          "latest_status_change": "2026-10-08 10:00:00",
                          "affected_onus": null,
                          "affected_percent": null,
                          "odb_names": "",
                          "odb_count": 0,
                          "cause": "los"
                        }
                      ]
                    }
                  }
                },
                "pon_outage_ended": {
                  "summary": "pon.outage_ended",
                  "value": {
                    "type": "pon.outage_ended",
                    "timestamp": "2026-10-08T10:00:01Z",
                    "data": {
                      "pons": [
                        {
                          "alert_kind": "full_outage",
                          "partial_started_at": null,
                          "partial_last_seen_at": null,
                          "olt_id": "11",
                          "olt_name": "OLT 11",
                          "olt_version": "2.0",
                          "board": "2",
                          "port": "3",
                          "total_onus": "8",
                          "has_gps": "0",
                          "los_count": "8",
                          "power_count": "0",
                          "offline_count": "0",
                          "location_id": "3",
                          "zone_name": "Zone 3",
                          "odb_id": null,
                          "odb_name": null,
                          "pon_description": "Feeder 3",
                          "is_active": "1",
                          "latest_status_change": "2026-10-08 10:00:00",
                          "affected_onus": null,
                          "affected_percent": null,
                          "odb_names": "",
                          "odb_count": 0,
                          "cause": "los",
                          "started_at": "2026-10-08 10:00:00",
                          "ended_at": "2026-10-08 10:20:00"
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
