{
  "openapi": "3.0.3",
  "info": {
    "title": "Migrations API",
    "version": "1.0.0",
    "description": "Platform migration plans \u2014 firewall, ADC (AVI/F5/A10), GSLB, ASM/WAF, vCMP, and consolidation."
  },
  "servers": [
    {
      "url": "https://versus-demo.com"
    }
  ],
  "paths": {
    "/api/a10-avi-plans/": {
      "get": {
        "operationId": "a10_avi_plans_list",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedA10ToAviMigrationPlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List a10 avi plans"
      },
      "post": {
        "operationId": "a10_avi_plans_create",
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/": {
      "get": {
        "operationId": "a10_avi_plans_retrieve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve a10 avi plan"
      },
      "put": {
        "operationId": "a10_avi_plans_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update a10 avi plan"
      },
      "patch": {
        "operationId": "a10_avi_plans_partial_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedA10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedA10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedA10ToAviMigrationPlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update a10 avi plan"
      },
      "delete": {
        "operationId": "a10_avi_plans_destroy",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/assign_vips/": {
      "post": {
        "operationId": "a10_avi_plans_assign_vips_create",
        "description": "Store user-entered VIP assignments and advance plan to vips_set.\n\nPOST body: {\n  assignments: {\n    \"<vs_name>:<port>\": {staging_vip: \"10.x.x.x\", production_vip: \"10.x.x.x\"},\n    ...\n  },\n  se_group: \"Default-Group\"\n}",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Assign vips: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/check_objects/": {
      "post": {
        "operationId": "a10_avi_plans_check_objects_create",
        "description": "Check all translated target objects against the Avi controller and\nflag existing objects (will be skipped during deploy) and missing\ncertificates (must be manually uploaded before deploy).\n\nStores results in plan.decisions['avi_object_checks'] and returns them.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Check objects: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/deploy/": {
      "post": {
        "operationId": "a10_avi_plans_deploy_create",
        "description": "Provision all translated VSes on the Avi controller.\nOrder per VS: health monitor \u00e2\u2020\u2019 pool \u00e2\u2020\u2019 DataScript placeholders \u00e2\u2020\u2019 virtual service.\nDataScript placeholders (requires_datascript=True) are created and attached to the VS\nvia vsdatascriptset_refs so the engineer can convert the TCL inline after deploy.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Deploy: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/discover/": {
      "post": {
        "operationId": "a10_avi_plans_discover_create",
        "description": "Pull all Virtual Servers from the source device and store as candidates.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Discover: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/list_se_groups/": {
      "get": {
        "operationId": "a10_avi_plans_list_se_groups_retrieve",
        "description": "Return available Service Engine groups from the target Avi.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List se groups: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/select_vs/": {
      "post": {
        "operationId": "a10_avi_plans_select_vs_create",
        "description": "Store which VS:port pairs the user has chosen to migrate.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Select vs: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/translate/": {
      "post": {
        "operationId": "a10_avi_plans_translate_create",
        "description": "Run the source\u00e2\u2020\u2019Avi converter for all selected virtual servers.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Translate: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/validate_vip/": {
      "post": {
        "operationId": "a10_avi_plans_validate_vip_create",
        "description": "Validate a proposed target VIP against the Avi controller.\n\nPOST body: {ip: \"10.1.2.3\", se_group: \"Default-Group\"}\nReturns: {valid_format, in_range, matched_networks, already_in_use,\n          pingable, errors, ok}",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/A10ToAviMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Validate vip: a10 avi plan"
      }
    },
    "/api/a10-avi-plans/{id}/vs-status/": {
      "get": {
        "operationId": "a10_avi_plans_vs_status_retrieve",
        "description": "Live A10 operational status (up/down) for this plan's virtual\nservers. The migration planner polls this so the user can see, at\nevery step, whether each source A10 VS is currently up as they work\nthrough discover \u2192 assign VIPs \u2192 translate \u2192 review \u2192 cutover. Only\nmeaningful for an A10 source device; returns supported=False otherwise.\nBest-effort \u2014 a per-VS query error becomes an 'Unknown' entry, never a\n500.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this a10 to avi migration plan.",
            "required": true
          }
        ],
        "tags": [
          "a10-avi-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A10ToAviMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Vs status: a10 avi plan"
      }
    },
    "/api/asm-cf-plans/": {
      "get": {
        "operationId": "asm_cf_plans_list",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedASMToCloudflarePlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List asm cf plans"
      },
      "post": {
        "operationId": "asm_cf_plans_create",
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/": {
      "get": {
        "operationId": "asm_cf_plans_retrieve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve asm cf plan"
      },
      "put": {
        "operationId": "asm_cf_plans_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update asm cf plan"
      },
      "patch": {
        "operationId": "asm_cf_plans_partial_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedASMToCloudflarePlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update asm cf plan"
      },
      "delete": {
        "operationId": "asm_cf_plans_destroy",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/build/": {
      "post": {
        "operationId": "asm_cf_plans_build_create",
        "description": "Phase 4 \u00e2\u20ac\u201d Create Cloudflare configuration objects.\nGATE: Blocked if any high-risk entity is still pending.\nAll rules start in Log mode.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Build: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/bulk_decide/": {
      "post": {
        "operationId": "asm_cf_plans_bulk_decide_create",
        "description": "Accept all pending low-risk entities in bulk to speed up review.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Bulk decide: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/complete/": {
      "post": {
        "operationId": "asm_cf_plans_complete_create",
        "description": "Mark the migration as complete after successful soak period.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Complete: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/cutover/": {
      "post": {
        "operationId": "asm_cf_plans_cutover_create",
        "description": "Phase 6 \u00e2\u20ac\u201d Execute cutover.\nMANDATORY GATE: origin_lockdown must be confirmed before proceeding.\nBody: {origin_lockdown_confirmed: true, method, batching, rollback_plan}",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Cutover: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/decide_entity/": {
      "post": {
        "operationId": "asm_cf_plans_decide_entity_create",
        "description": "Phase 3 \u00e2\u20ac\u201d Record a risk decision on one entity.\nBody: {entity_id, decision, compensating_control}\ndecision: accepted | remediate_origin | abort",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Decide entity: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/entities/": {
      "get": {
        "operationId": "asm_cf_plans_entities_retrieve",
        "description": "Return all entities for this plan, with optional filters.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Entities: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/extract/": {
      "post": {
        "operationId": "asm_cf_plans_extract_create",
        "description": "Phase 1 \u00e2\u20ac\u201d Extract all ASM entities from the selected policy.\nRequires asm_policy_id (or asm_policy_name) to be set on the plan.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Extract: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/list_policies/": {
      "post": {
        "operationId": "asm_cf_plans_list_policies_create",
        "description": "Return all ASM policies available on the F5 source device.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List policies: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/map_entities/": {
      "post": {
        "operationId": "asm_cf_plans_map_entities_create",
        "description": "Phase 2 \u00e2\u20ac\u201d Run the mapping engine on all extracted entities.\nAssigns fidelity, cf_target, risk_rating, compensating_control.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Map entities: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/risk_register/": {
      "get": {
        "operationId": "asm_cf_plans_risk_register_retrieve",
        "description": "Return only partial/none entities (the Residual Risk Register).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Risk register: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/rollback/": {
      "post": {
        "operationId": "asm_cf_plans_rollback_create",
        "description": "Rollback cutover \u00e2\u20ac\u201d revert DNS to F5-fronted path.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Rollback: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/sign_off_validation/": {
      "post": {
        "operationId": "asm_cf_plans_sign_off_validation_create",
        "description": "Phase 5 \u00e2\u20ac\u201d Record validation sign-off and advance to cutover-ready.\nBody: {false_positives, false_negatives, parity_notes}",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToCloudflarePlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Sign off validation: asm cf plan"
      }
    },
    "/api/asm-cf-plans/{id}/verify_cf_token/": {
      "get": {
        "operationId": "asm_cf_plans_verify_cf_token_retrieve",
        "description": "Verify the stored Cloudflare API token is valid.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to cloudflare plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-cf-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToCloudflarePlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Verify cf token: asm cf plan"
      }
    },
    "/api/asm-xc-plans/": {
      "get": {
        "operationId": "asm_xc_plans_list",
        "description": "F5 ASM -> F5 Distributed Cloud (XC) WAF migration plan. Same\nextract/map/risk/build/validate/cutover state machine as\nASMToCloudflarePlanViewSet \u2014 see that class for the pattern this\nmirrors. Only _get_xc_client and the build() artefact assembly differ,\nsince XC's security surface is spread across App Firewall, Service\nPolicy, Rate Limiter, and Bot Defense objects rather than one ruleset\nengine (see asm_xc_mapping.py's module docstring).",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedASMToXCPlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List asm xc plans"
      },
      "post": {
        "operationId": "asm_xc_plans_create",
        "description": "F5 ASM -> F5 Distributed Cloud (XC) WAF migration plan. Same\nextract/map/risk/build/validate/cutover state machine as\nASMToCloudflarePlanViewSet \u2014 see that class for the pattern this\nmirrors. Only _get_xc_client and the build() artefact assembly differ,\nsince XC's security surface is spread across App Firewall, Service\nPolicy, Rate Limiter, and Bot Defense objects rather than one ruleset\nengine (see asm_xc_mapping.py's module docstring).",
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/": {
      "get": {
        "operationId": "asm_xc_plans_retrieve",
        "description": "F5 ASM -> F5 Distributed Cloud (XC) WAF migration plan. Same\nextract/map/risk/build/validate/cutover state machine as\nASMToCloudflarePlanViewSet \u2014 see that class for the pattern this\nmirrors. Only _get_xc_client and the build() artefact assembly differ,\nsince XC's security surface is spread across App Firewall, Service\nPolicy, Rate Limiter, and Bot Defense objects rather than one ruleset\nengine (see asm_xc_mapping.py's module docstring).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve asm xc plan"
      },
      "put": {
        "operationId": "asm_xc_plans_update",
        "description": "F5 ASM -> F5 Distributed Cloud (XC) WAF migration plan. Same\nextract/map/risk/build/validate/cutover state machine as\nASMToCloudflarePlanViewSet \u2014 see that class for the pattern this\nmirrors. Only _get_xc_client and the build() artefact assembly differ,\nsince XC's security surface is spread across App Firewall, Service\nPolicy, Rate Limiter, and Bot Defense objects rather than one ruleset\nengine (see asm_xc_mapping.py's module docstring).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update asm xc plan"
      },
      "patch": {
        "operationId": "asm_xc_plans_partial_update",
        "description": "F5 ASM -> F5 Distributed Cloud (XC) WAF migration plan. Same\nextract/map/risk/build/validate/cutover state machine as\nASMToCloudflarePlanViewSet \u2014 see that class for the pattern this\nmirrors. Only _get_xc_client and the build() artefact assembly differ,\nsince XC's security surface is spread across App Firewall, Service\nPolicy, Rate Limiter, and Bot Defense objects rather than one ruleset\nengine (see asm_xc_mapping.py's module docstring).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedASMToXCPlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update asm xc plan"
      },
      "delete": {
        "operationId": "asm_xc_plans_destroy",
        "description": "F5 ASM -> F5 Distributed Cloud (XC) WAF migration plan. Same\nextract/map/risk/build/validate/cutover state machine as\nASMToCloudflarePlanViewSet \u2014 see that class for the pattern this\nmirrors. Only _get_xc_client and the build() artefact assembly differ,\nsince XC's security surface is spread across App Firewall, Service\nPolicy, Rate Limiter, and Bot Defense objects rather than one ruleset\nengine (see asm_xc_mapping.py's module docstring).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/build/": {
      "post": {
        "operationId": "asm_xc_plans_build_create",
        "description": "Phase 4 \u2014 Create F5 XC configuration objects.\nGATE: Blocked if any high-risk entity is still pending.\nThe target App Firewall policy always starts in Monitoring mode.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Build: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/bulk_decide/": {
      "post": {
        "operationId": "asm_xc_plans_bulk_decide_create",
        "description": "Accept all pending low-risk entities in bulk to speed up review.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Bulk decide: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/complete/": {
      "post": {
        "operationId": "asm_xc_plans_complete_create",
        "description": "Mark the migration as complete after successful soak period.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Complete: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/cutover/": {
      "post": {
        "operationId": "asm_xc_plans_cutover_create",
        "description": "Phase 6 \u2014 Execute cutover.\nMANDATORY GATE: origin_lockdown must be confirmed before proceeding.\nBody: {origin_lockdown_confirmed: true, method, batching, rollback_plan}",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Cutover: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/decide_entity/": {
      "post": {
        "operationId": "asm_xc_plans_decide_entity_create",
        "description": "Phase 3 \u2014 Record a risk decision on one entity.\nBody: {entity_id, decision, compensating_control}\ndecision: accepted | remediate_origin | abort",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Decide entity: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/entities/": {
      "get": {
        "operationId": "asm_xc_plans_entities_retrieve",
        "description": "Return all entities for this plan, with optional filters.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Entities: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/extract/": {
      "post": {
        "operationId": "asm_xc_plans_extract_create",
        "description": "Phase 1 \u2014 Extract all ASM entities from the selected policy.\nRequires asm_policy_id (or asm_policy_name) to be set on the plan.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Extract: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/list_policies/": {
      "post": {
        "operationId": "asm_xc_plans_list_policies_create",
        "description": "Return all ASM policies available on the F5 source device.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List policies: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/map_entities/": {
      "post": {
        "operationId": "asm_xc_plans_map_entities_create",
        "description": "Phase 2 \u2014 Run the mapping engine on all extracted entities.\nAssigns fidelity, xc_target, risk_rating, compensating_control.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Map entities: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/risk_register/": {
      "get": {
        "operationId": "asm_xc_plans_risk_register_retrieve",
        "description": "Return only partial/none entities (the Residual Risk Register).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Risk register: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/rollback/": {
      "post": {
        "operationId": "asm_xc_plans_rollback_create",
        "description": "Rollback cutover \u2014 revert DNS to F5-fronted path.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Rollback: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/sign_off_validation/": {
      "post": {
        "operationId": "asm_xc_plans_sign_off_validation_create",
        "description": "Phase 5 \u2014 Record validation sign-off and advance to cutover-ready.\nBody: {false_positives, false_negatives, parity_notes}",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ASMToXCPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Sign off validation: asm xc plan"
      }
    },
    "/api/asm-xc-plans/{id}/verify_xc_token/": {
      "get": {
        "operationId": "asm_xc_plans_verify_xc_token_retrieve",
        "description": "Verify the stored F5 XC API token is valid by listing namespaces.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this asm to xc plan.",
            "required": true
          }
        ],
        "tags": [
          "asm-xc-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ASMToXCPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Verify xc token: asm xc plan"
      }
    },
    "/api/consol-plans/": {
      "get": {
        "operationId": "consol_plans_list",
        "description": "Read-only list/retrieve (Phase 3) plus validate/waive (Phase 5),\ncompile (Phase 6), remediate (Phase 7), execute-standalone-move\n(Phase 9), and migrate-standby-peer (Phase 10) actions.",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedConsolPlanListList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List consol plans"
      }
    },
    "/api/consol-plans/{id}/": {
      "get": {
        "operationId": "consol_plans_retrieve",
        "description": "Read-only list/retrieve (Phase 3) plus validate/waive (Phase 5),\ncompile (Phase 6), remediate (Phase 7), execute-standalone-move\n(Phase 9), and migrate-standby-peer (Phase 10) actions.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve consol plan"
      }
    },
    "/api/consol-plans/{id}/compile/": {
      "post": {
        "operationId": "consol_plans_compile_create",
        "description": "Create and start one WorkflowRun per not-yet-compiled move \u2014\nrequires the plan to be 'validated' first. Opens a real ServiceNow\nchange per move; never touches a device (see compile.py).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Compile: consol plan"
      }
    },
    "/api/consol-plans/{id}/moves/{move_id}/execute/": {
      "post": {
        "operationId": "consol_plans_moves_execute_create",
        "description": "Run the backup -> provision -> restore sequence for one\nstandalone_window move (see standalone_move.py) \u2014 real,\nsignificant device writes: UCS backup of the source tenant,\ntenant provisioning on the target F5OS host (at temp_mgmt_ip, a\nthrowaway address \u2014 required in the request body), and a full\nconfig restore. Leapfrog moves are rejected here; that path is\nmigrate_standby below. Like remediate_gap, this never fires on\nits own \u2014 it requires this exact POST with confirm=true on top\nof the consol.execute permission gate.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          },
          {
            "in": "path",
            "name": "move_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Execute: move"
      }
    },
    "/api/consol-plans/{id}/moves/{move_id}/migrate-standby/": {
      "post": {
        "operationId": "consol_plans_moves_migrate_standby_create",
        "description": "Migrate the standby member of an HA-leapfrog move onto the\ntarget host (see leapfrog_move.py) \u2014 real device writes: UCS\nbackup with a vault-custodied passphrase, tenant provisioning at\ntemp_mgmt_ip (required in the request body \u2014 a throwaway address;\nthe UCS restore overwrites it with the tenant's real mgmt_ip,\nwhich is what lets device-trust/config-sync re-establish with its\nstill-active peer on their own), and config restore. Refuses\noutright if this move's tenant is not currently the standby\nmember of its pair. Once restored, polls for confirmed config-sync\nand \u2014 only then \u2014 fails the peer over to standby automatically;\nnever fails over blind. Like the other Tier-3 actions, requires\nthis exact POST with confirm=true on top of consol.execute.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          },
          {
            "in": "path",
            "name": "move_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Migrate standby: move"
      }
    },
    "/api/consol-plans/{id}/moves/{move_id}/retry-failover/": {
      "post": {
        "operationId": "consol_plans_moves_retry_failover_create",
        "description": "Re-attempt just the sync-wait + failover tail of migrate_standby\nfor a move already 'migrated' but not yet 'verified' (a prior\nattempt's sync-status poll timed out). Does not re-run\nbackup/provision/restore. Same confirm=true + consol.execute gate\nas the other Tier-3 actions \u2014 a peer failover is still a real,\ntraffic-affecting device write.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          },
          {
            "in": "path",
            "name": "move_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retry failover: move"
      }
    },
    "/api/consol-plans/{id}/validate/": {
      "post": {
        "operationId": "consol_plans_validate_create",
        "description": "Recompute capacity/HA/VLAN-gap checks against live (or seeded)\ninventory \u2014 read-only against every device it touches. See\napps/rseries_consolidation/validation.py for what each check does\nand how it degrades when a device is unreachable.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Validate: consol plan"
      }
    },
    "/api/consol-plans/{id}/vlan-gaps/{gap_id}/remediate/": {
      "post": {
        "operationId": "consol_plans_vlan_gaps_remediate_create",
        "description": "Push one auto-remediable VLAN gap onto the target F5OS trunk or\nupstream Cisco switch trunk \u2014 additive only, never a wholesale\nreplace (see remediation.py). This is a real device write, the\nfirst in the Consolidation Planner \u2014 it never fires on its own\n(nothing else in this app calls it); it requires this exact POST\nwith confirm=true, on top of the consol.execute permission gate,\nso a ServiceNow change approval or any other automated event can\nnever trigger it by itself.",
        "parameters": [
          {
            "in": "path",
            "name": "gap_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Remediate: vlan gap"
      }
    },
    "/api/consol-plans/{id}/vlan-gaps/{gap_id}/waive/": {
      "post": {
        "operationId": "consol_plans_vlan_gaps_waive_create",
        "description": "Accept the risk on one VLAN gap instead of remediating it. Never\ntouches a device \u2014 only records the decision on the gap row.",
        "parameters": [
          {
            "in": "path",
            "name": "gap_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this consol plan.",
            "required": true
          }
        ],
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Waive: vlan gap"
      }
    },
    "/api/consol-plans/create-plan/": {
      "post": {
        "operationId": "consol_plans_create_plan_create",
        "description": "Create a new draft plan from the interactive builder \u2014 a name,\ndatacenter, target host, source hosts, and an initial set of moves\n(one per dragged-in tenant). Defaults every move to\nha_mode='standalone_window' with no peer/sequence \u2014 HA pairing is\nan edit made afterward on the plan detail page, not part of this\nquick-create step. Read-only against every device (DB writes\nonly); does not validate or compile.",
        "tags": [
          "consol-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ConsolPlanDetailRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsolPlanDetail"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create create plan"
      }
    },
    "/api/eip-gslb-plans/": {
      "get": {
        "operationId": "eip_gslb_plans_list",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedF5ToEIPGSLBPlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List eip gslb plans"
      },
      "post": {
        "operationId": "eip_gslb_plans_create",
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/": {
      "get": {
        "operationId": "eip_gslb_plans_retrieve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve eip gslb plan"
      },
      "put": {
        "operationId": "eip_gslb_plans_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update eip gslb plan"
      },
      "patch": {
        "operationId": "eip_gslb_plans_partial_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedF5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedF5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedF5ToEIPGSLBPlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update eip gslb plan"
      },
      "delete": {
        "operationId": "eip_gslb_plans_destroy",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/confirm_done/": {
      "post": {
        "operationId": "eip_gslb_plans_confirm_done_create",
        "description": "Mark one or all cutover applications as confirmed done.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Confirm done: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/discover/": {
      "post": {
        "operationId": "eip_gslb_plans_discover_create",
        "description": "Enumerate GTM Wide IPs or LTM Virtual Servers from the F5 source.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Discover: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/execute_cutover/": {
      "post": {
        "operationId": "eip_gslb_plans_execute_cutover_create",
        "description": "Move DNS authority to EIP for the specified FQDNs (or all if not specified).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Execute cutover: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/load/": {
      "post": {
        "operationId": "eip_gslb_plans_load_create",
        "description": "Create EIP GSLB Application, Pool(s), Nodes, and Health Checks for each app.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Load: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/lower_ttl/": {
      "post": {
        "operationId": "eip_gslb_plans_lower_ttl_create",
        "description": "Lower DNS TTL on F5-served records to prepare for cutover.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Lower ttl: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/resolve_decision/": {
      "post": {
        "operationId": "eip_gslb_plans_resolve_decision_create",
        "description": "Record a user decision for an unmapped feature in one application.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Resolve decision: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/rollback/": {
      "post": {
        "operationId": "eip_gslb_plans_rollback_create",
        "description": "Rollback: revert cutover applications to pre-cutover state.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Rollback: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/set_selected/": {
      "post": {
        "operationId": "eip_gslb_plans_set_selected_create",
        "description": "Save user's selection of which objects to migrate.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Set selected: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/translate/": {
      "post": {
        "operationId": "eip_gslb_plans_translate_create",
        "description": "Build translatedApp for each selected object; detect unmapped features.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Translate: eip gslb plan"
      }
    },
    "/api/eip-gslb-plans/{id}/validate/": {
      "post": {
        "operationId": "eip_gslb_plans_validate_create",
        "description": "Run parity check: resolve each FQDN against EIP and compare answer set.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this f5 to eipgslb plan.",
            "required": true
          }
        ],
        "tags": [
          "eip-gslb-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/F5ToEIPGSLBPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Validate: eip gslb plan"
      }
    },
    "/api/firewall-migration-plans/": {
      "get": {
        "operationId": "firewall_migration_plans_list",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedFirewallMigrationPlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List firewall migration plans"
      },
      "post": {
        "operationId": "firewall_migration_plans_create",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/": {
      "get": {
        "operationId": "firewall_migration_plans_retrieve",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve firewall migration plan"
      },
      "put": {
        "operationId": "firewall_migration_plans_update",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update firewall migration plan"
      },
      "patch": {
        "operationId": "firewall_migration_plans_partial_update",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedFirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedFirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedFirewallMigrationPlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update firewall migration plan"
      },
      "delete": {
        "operationId": "firewall_migration_plans_destroy",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/check_objects/": {
      "post": {
        "operationId": "firewall_migration_plans_check_objects_create",
        "description": "Dedupe against the target: which rules/objects already exist there.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Check objects: firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/deploy/": {
      "post": {
        "operationId": "firewall_migration_plans_deploy_create",
        "description": "Write rules to the target. Attempts the live driver; falls back to a\ndry-run log if the target is unreachable so the plan still completes.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Deploy: firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/discover/": {
      "post": {
        "operationId": "firewall_migration_plans_discover_create",
        "description": "Read normalized firewall rules from each source device (device-by-device).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Discover: firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/rollback/": {
      "post": {
        "operationId": "firewall_migration_plans_rollback_create",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Rollback: firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/select_rules/": {
      "post": {
        "operationId": "firewall_migration_plans_select_rules_create",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Select rules: firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/translate/": {
      "post": {
        "operationId": "firewall_migration_plans_translate_create",
        "description": "Rule-by-rule translation to the target platform + object translation.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Translate: firewall migration plan"
      }
    },
    "/api/firewall-migration-plans/{id}/validate/": {
      "post": {
        "operationId": "firewall_migration_plans_validate_create",
        "description": "Firewall rule migration plans \u2192 Palo Alto / NSX.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this firewall migration plan.",
            "required": true
          }
        ],
        "tags": [
          "firewall-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FirewallMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirewallMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Validate: firewall migration plan"
      }
    },
    "/api/migration-items/": {
      "get": {
        "operationId": "migration_items_list",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "plan",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string",
              "enum": [
                "failed",
                "migrated",
                "pending",
                "ready",
                "skipped"
              ]
            },
            "description": "* `pending` - Pending\n* `ready` - Ready\n* `migrated` - Migrated\n* `failed` - Failed\n* `skipped` - Skipped"
          }
        ],
        "tags": [
          "migration-items"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedMigrationItemList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List migration items"
      },
      "post": {
        "operationId": "migration_items_create",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "tags": [
          "migration-items"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create migration item"
      }
    },
    "/api/migration-items/{id}/": {
      "get": {
        "operationId": "migration_items_retrieve",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve migration item"
      },
      "put": {
        "operationId": "migration_items_update",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update migration item"
      },
      "patch": {
        "operationId": "migration_items_partial_update",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMigrationItemRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMigrationItemRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMigrationItemRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update migration item"
      },
      "delete": {
        "operationId": "migration_items_destroy",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete migration item"
      }
    },
    "/api/migration-items/{id}/allocate_vip/": {
      "post": {
        "operationId": "migration_items_allocate_vip_create",
        "description": "Allocate next available IP from IPAM for this item and save target_vip.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Allocate vip: migration item"
      }
    },
    "/api/migration-items/{id}/generate_name/": {
      "post": {
        "operationId": "migration_items_generate_name_create",
        "description": "Apply the plan's naming convention to this item and save all generated names.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Generate name: migration item"
      }
    },
    "/api/migration-items/{id}/release_vip/": {
      "post": {
        "operationId": "migration_items_release_vip_create",
        "description": "Release an IPAM-allocated VIP. If ipam_allocated and vip_ref are set,\nalso deletes the record from Infoblox. Otherwise just clears the local DB entry.\n\nIf the plan's IPAM device/credential is no longer configured (e.g. the\nInfoblox device or its credential was removed after the allocation \u2014 the\nFK is SET_NULL), we can't delete the IPAM record, but we must not trap the\nuser: the local allocation is cleared and a warning is returned so they can\nremove the stale IPAM reservation by hand.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration item.",
            "required": true
          }
        ],
        "tags": [
          "migration-items"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationItemRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationItem"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Release vip: migration item"
      }
    },
    "/api/migration-plans/": {
      "get": {
        "operationId": "migration_plans_list",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "plan_type",
            "schema": {
              "type": "string",
              "enum": [
                "adc_to_avi",
                "gtm_to_eip"
              ]
            },
            "description": "* `adc_to_avi` - Legacy ADC\n* `gtm_to_eip` - GTM to EfficientIP GSLB"
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "source_device",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string",
              "enum": [
                "completed",
                "draft",
                "failed",
                "in_progress",
                "ready"
              ]
            },
            "description": "* `draft` - Draft\n* `ready` - Ready\n* `in_progress` - In Progress\n* `completed` - Completed\n* `failed` - Failed"
          },
          {
            "in": "query",
            "name": "target_device",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedMigrationPlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List migration plans"
      },
      "post": {
        "operationId": "migration_plans_create",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create migration plan"
      }
    },
    "/api/migration-plans/{id}/": {
      "get": {
        "operationId": "migration_plans_retrieve",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve migration plan"
      },
      "put": {
        "operationId": "migration_plans_update",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update migration plan"
      },
      "patch": {
        "operationId": "migration_plans_partial_update",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMigrationPlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update migration plan"
      },
      "delete": {
        "operationId": "migration_plans_destroy",
        "description": "Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated\n(VS-SPEC-TENANT-IDENTITY-001 \u00a714). Use as the FIRST base:\n\n    class DeviceViewSet(TenantScopedModelViewSet, viewsets.ModelViewSet):\n        queryset = Device.objects.select_related(...)\n        ...\n\nUnlike the strict TenantScopedViewSet pilot, this **degrades gracefully**:\nit is INERT unless the tenant_scoped alias is configured\n(TENANT_SCOPED_DATABASE_URL) AND the request carries a tenant_id claim.\nWhen inert it behaves exactly like a plain ModelViewSet \u2014 so the rollout\nlands additively and isolation switches on only once the non-superuser\nPostgres role exists (mirrors tenant_subdomain.py's \"inert unless\nconfigured\" contract). When active: reads route through the RLS-enforcing\nconnection and tenant_id is stamped server-side (never client input).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete migration plan"
      }
    },
    "/api/migration-plans/{id}/execute_eip_migration/": {
      "post": {
        "operationId": "migration_plans_execute_eip_migration_create",
        "description": "Execute GTM \u00e2\u2020\u2019 EfficientIP GSLB migration.\nCreates GSLB Smart DNS zones on EfficientIP for each pending item.\nPass item_ids (list) to migrate specific items, or omit to migrate all pending.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Execute eip migration: migration plan"
      }
    },
    "/api/migration-plans/{id}/ipam_network_views/": {
      "get": {
        "operationId": "migration_plans_ipam_network_views_retrieve",
        "description": "List network views available on the plan's Infoblox IPAM device.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Ipam network views: migration plan"
      }
    },
    "/api/migration-plans/{id}/ipam_subnet_info/": {
      "get": {
        "operationId": "migration_plans_ipam_subnet_info_retrieve",
        "description": "Return allocated IPs and next-available IP for a subnet from the plan's IPAM device.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Ipam subnet info: migration plan"
      }
    },
    "/api/migration-plans/{id}/populate_gtm_items/": {
      "post": {
        "operationId": "migration_plans_populate_gtm_items_create",
        "description": "Populate MigrationItems from the source device's GTM Wide IPs.\nUsed for gtm_to_eip plan type. Resolves pool members to IPs.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Populate gtm items: migration plan"
      }
    },
    "/api/migration-plans/{id}/populate_items/": {
      "post": {
        "operationId": "migration_plans_populate_items_create",
        "description": "Auto-populate MigrationItems from the source device's current VirtualServer list.\nExisting items are preserved; only new VS objects not yet in the plan are added.\nPass include_vs_names (list of str) to restrict which VSes are imported.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Populate items: migration plan"
      }
    },
    "/api/migration-plans/{id}/release-subnet-ip/": {
      "post": {
        "operationId": "migration_plans_release_subnet_ip_create",
        "description": "Release any IP from the plan's IPAM subnet \u00e2\u20ac\u201d no MigrationItem required.\nBody: { ip_address: str }",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Release subnet ip: migration plan"
      }
    },
    "/api/migration-plans/{id}/review_detail/": {
      "get": {
        "operationId": "migration_plans_review_detail_retrieve",
        "description": "Full migration review: per-VS A10 config + projected AVI objects.\nFor A10 source devices, also fetches SSL templates, health monitors,\nand persistence templates live from the device API.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Review detail: migration plan"
      }
    },
    "/api/migration-plans/{id}/run_migration/": {
      "post": {
        "operationId": "migration_plans_run_migration_create",
        "description": "Trigger the ADC Migration workflow for this plan.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Run migration: migration plan"
      }
    },
    "/api/migration-plans/{id}/se_groups/": {
      "get": {
        "operationId": "migration_plans_se_groups_retrieve",
        "description": "Return SE groups available on the target AVI controller.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Se groups: migration plan"
      }
    },
    "/api/migration-plans/{id}/sync_shared_ssl/": {
      "post": {
        "operationId": "migration_plans_sync_shared_ssl_create",
        "description": "For A10 source plans: detect SSL templates shared across multiple plan items\nand update all sharing items to use the A10 template name as the AVI profile\nname, so provisioning creates one shared AVI profile instead of duplicates.\nSafe to call on every Step-2 load \u00e2\u20ac\u201d only modifies items where the current\nSSL name differs from what the sharing logic requires.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Sync shared ssl: migration plan"
      }
    },
    "/api/migration-plans/{id}/update-ssl-profile-name/": {
      "post": {
        "operationId": "migration_plans_update_ssl_profile_name_create",
        "description": "Propagate an Avi SSL profile name override to all items that share\nthe same A10 SSL template.\nBody: { a10_template_name, side ('client'|'server'), new_name }",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update ssl profile name: migration plan"
      }
    },
    "/api/migration-plans/{id}/vs-status/": {
      "get": {
        "operationId": "migration_plans_vs_status_retrieve",
        "description": "Live A10 operational status (up/down) for this plan's source virtual\nservers, so the migration wizard can show it at every step (configure \u2192\nreview \u2192 workflow). Best-effort and cosmetic: a per-VS query error becomes\nan 'Unknown' entry and this never returns 500. supported=False for a\nnon-A10 source so the UI simply hides the pills.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this migration plan.",
            "required": true
          }
        ],
        "tags": [
          "migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Vs status: migration plan"
      }
    },
    "/api/vcmp-migration-plans/": {
      "get": {
        "operationId": "vcmp_migration_plans_list",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedVcmpMigrationPlanList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List vcmp migration plans"
      },
      "post": {
        "operationId": "vcmp_migration_plans_create",
        "tags": [
          "vcmp-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/": {
      "get": {
        "operationId": "vcmp_migration_plans_retrieve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve vcmp migration plan"
      },
      "put": {
        "operationId": "vcmp_migration_plans_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update vcmp migration plan"
      },
      "patch": {
        "operationId": "vcmp_migration_plans_partial_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedVcmpMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedVcmpMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedVcmpMigrationPlanRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update vcmp migration plan"
      },
      "delete": {
        "operationId": "vcmp_migration_plans_destroy",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/create_tenants/": {
      "post": {
        "operationId": "vcmp_migration_plans_create_tenants_create",
        "description": "Create F5OS tenants on target hosts for each selected guest.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create tenants: vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/deploy_tenants/": {
      "post": {
        "operationId": "vcmp_migration_plans_deploy_tenants_create",
        "description": "Set all tenants to 'deployed' running-state and assign VLANs.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Deploy tenants: vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/list_guests/": {
      "get": {
        "operationId": "vcmp_migration_plans_list_guests_retrieve",
        "description": "Fetch vCMP guests from legacy_host_1 (and optionally legacy_host_2).",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List guests: vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/list_tenant_images/": {
      "get": {
        "operationId": "vcmp_migration_plans_list_tenant_images_retrieve",
        "description": "Fetch available tenant images from target_host_1.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List tenant images: vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/list_trunks/": {
      "get": {
        "operationId": "vcmp_migration_plans_list_trunks_retrieve",
        "description": "Return legacy trunks (with VLANs) and target F5OS trunks for mapping.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List trunks: vcmp migration plan"
      }
    },
    "/api/vcmp-migration-plans/{id}/stage_vlans/": {
      "post": {
        "operationId": "vcmp_migration_plans_stage_vlans_create",
        "description": "Stage VLANs on target F5OS hosts and apply trunk mappings if configured.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration plan.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-plans"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationPlanRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationPlan"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Stage vlans: vcmp migration plan"
      }
    },
    "/api/vcmp-migration-units/": {
      "get": {
        "operationId": "vcmp_migration_units_list",
        "parameters": [
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "Which field to use when ordering the results.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "plan",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "description": "A search term.",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "state",
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "failed",
                "guest_down",
                "offline",
                "online",
                "pending",
                "ucs_loaded",
                "ucs_saved",
                "vlans_set"
              ]
            },
            "description": "* `pending` - Pending\n* `offline` - Forced Offline\n* `ucs_saved` - UCS Saved\n* `guest_down` - Guest Shut Down\n* `vlans_set` - VLANs Assigned\n* `ucs_loaded` - UCS Loaded\n* `online` - Online & Verified\n* `active` - Active (Failover Complete)\n* `failed` - Failed"
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedVcmpMigrationUnitList"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "List vcmp migration units"
      },
      "post": {
        "operationId": "vcmp_migration_units_create",
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Create vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/": {
      "get": {
        "operationId": "vcmp_migration_units_retrieve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Retrieve vcmp migration unit"
      },
      "put": {
        "operationId": "vcmp_migration_units_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update vcmp migration unit"
      },
      "patch": {
        "operationId": "vcmp_migration_units_partial_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedVcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PatchedVcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PatchedVcmpMigrationUnitRequest"
              }
            }
          }
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Update vcmp migration unit"
      },
      "delete": {
        "operationId": "vcmp_migration_units_destroy",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body"
          }
        },
        "summary": "Delete vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/assign_vlans/": {
      "post": {
        "operationId": "vcmp_migration_units_assign_vlans_create",
        "description": "Assign VLANs to the F5OS tenant on the target host.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Assign vlans: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/compare_pool_members/": {
      "post": {
        "operationId": "vcmp_migration_units_compare_pool_members_create",
        "description": "Compare current pool members on the tenant vs. the pre-migration snapshot.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Compare pool members: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/download_ucs/": {
      "post": {
        "operationId": "vcmp_migration_units_download_ucs_create",
        "description": "Save + download UCS from the source vCMP guest and store it temporarily.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Download ucs: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/force_offline/": {
      "post": {
        "operationId": "vcmp_migration_units_force_offline_create",
        "description": "Force all pool members on the guest offline to drain traffic.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Force offline: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/load_ucs/": {
      "post": {
        "operationId": "vcmp_migration_units_load_ucs_create",
        "description": "Upload and load the saved UCS into the F5OS tenant via its management IP.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Load ucs: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/run_failover/": {
      "post": {
        "operationId": "vcmp_migration_units_run_failover_create",
        "description": "Trigger failover on the source vCMP guest to promote the tenant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Run failover: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/shutdown_guest/": {
      "post": {
        "operationId": "vcmp_migration_units_shutdown_guest_create",
        "description": "Shut down (forcedOffline) the source vCMP guest on the legacy VIPRION.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Shutdown guest: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/snapshot_pool_members/": {
      "post": {
        "operationId": "vcmp_migration_units_snapshot_pool_members_create",
        "description": "Snapshot LTM pool member states from the source vCMP guest.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Snapshot pool members: vcmp migration unit"
      }
    },
    "/api/vcmp-migration-units/{id}/verify_online/": {
      "post": {
        "operationId": "vcmp_migration_units_verify_online_create",
        "description": "Verify the tenant BIG-IP is reachable and reports active status.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "schema": {
              "type": "integer"
            },
            "description": "A unique integer value identifying this vcmp migration unit.",
            "required": true
          }
        ],
        "tags": [
          "vcmp-migration-units"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/VcmpMigrationUnitRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "jwtAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VcmpMigrationUnit"
                }
              }
            },
            "description": ""
          }
        },
        "summary": "Verify online: vcmp migration unit"
      }
    }
  },
  "components": {
    "schemas": {
      "FirewallMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "description": {
            "type": "string"
          },
          "target_platform": {
            "$ref": "#/components/schemas/FirewallMigrationPlanTargetPlatformEnum"
          },
          "target_vsys": {
            "type": "string",
            "maxLength": 100
          },
          "target_device_group": {
            "type": "string",
            "maxLength": 200
          },
          "nsx_domain": {
            "type": "string",
            "maxLength": 100
          },
          "nsx_security_policy": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/FirewallMigrationPlanStatusEnum"
          },
          "candidates": {},
          "selected": {},
          "object_translation": {},
          "translation": {},
          "decisions": {},
          "deploy_log": {},
          "target_refs": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          },
          "source_devices": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "required": [
          "name"
        ]
      },
      "PaginatedConsolPlanListList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsolPlanList"
            }
          }
        }
      },
      "StatusE5bEnum": {
        "enum": [
          "draft",
          "validated",
          "pending_change",
          "executing",
          "paused",
          "complete",
          "abandoned"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `validated` - Validated\n* `pending_change` - Pending Change\n* `executing` - Executing\n* `paused` - Paused\n* `complete` - Complete\n* `abandoned` - Abandoned"
      },
      "VcmpMigrationPlanStatusEnum": {
        "enum": [
          "draft",
          "prepared",
          "migrating",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `prepared` - Prepared\n* `migrating` - Migrating\n* `completed` - Completed\n* `failed` - Failed"
      },
      "PaginatedASMToCloudflarePlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ASMToCloudflarePlan"
            }
          }
        }
      },
      "PaginatedASMToXCPlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ASMToXCPlan"
            }
          }
        }
      },
      "F5ToEIPGSLBPlanSourceTypeEnum": {
        "enum": [
          "gtm_wideip",
          "ltm_virtual_server"
        ],
        "type": "string",
        "description": "* `gtm_wideip` - F5 GTM / BIG-IP DNS Wide IPs\n* `ltm_virtual_server` - F5 LTM Virtual Servers"
      },
      "VcmpMigrationUnit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "source_host_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "target_host_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "sequence": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "source_guest_name": {
            "type": "string",
            "maxLength": 200
          },
          "role": {
            "type": "string",
            "maxLength": 20
          },
          "target_tenant_name": {
            "type": "string",
            "maxLength": 200
          },
          "temp_mgmt_ip": {
            "type": "string",
            "maxLength": 100
          },
          "state": {
            "$ref": "#/components/schemas/VcmpMigrationUnitStateEnum"
          },
          "pool_member_snapshot": {},
          "ucs_size_bytes": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "guest_specs": {},
          "log": {
            "type": "string"
          },
          "error": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "plan": {
            "type": "integer"
          },
          "source_host": {
            "type": "integer",
            "nullable": true
          },
          "target_host": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "created_at",
          "id",
          "plan",
          "source_host_name",
          "target_host_name",
          "updated_at"
        ]
      },
      "HaModeEnum": {
        "enum": [
          "leapfrog",
          "standalone_window"
        ],
        "type": "string",
        "description": "* `leapfrog` - HA Leapfrog\n* `standalone_window` - Standalone Outage Window"
      },
      "VcmpMigrationPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "units": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VcmpMigrationUnit"
            },
            "readOnly": true
          },
          "legacy_host_1_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "legacy_host_2_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "target_host_1_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "target_host_2_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/VcmpMigrationPlanStatusEnum"
          },
          "notes": {
            "type": "string"
          },
          "selected_guests": {},
          "temp_mgmt_ips": {},
          "temp_mgmt_prefix": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "temp_mgmt_gateway": {
            "type": "string",
            "maxLength": 100
          },
          "tenant_image": {
            "type": "string",
            "maxLength": 300
          },
          "trunk_mappings": {},
          "tenants_created": {
            "type": "boolean"
          },
          "vlans_staged": {
            "type": "boolean"
          },
          "tenants_deployed": {
            "type": "boolean"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "legacy_host_1": {
            "type": "integer",
            "nullable": true
          },
          "legacy_host_2": {
            "type": "integer",
            "nullable": true
          },
          "target_host_1": {
            "type": "integer",
            "nullable": true
          },
          "target_host_2": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "created_at",
          "id",
          "legacy_host_1_name",
          "legacy_host_2_name",
          "name",
          "target_host_1_name",
          "target_host_2_name",
          "units",
          "updated_at"
        ]
      },
      "PatchedMigrationItemRequest": {
        "type": "object",
        "properties": {
          "tenant_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "source_vs_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300
          },
          "source_vs_ip": {
            "type": "string",
            "maxLength": 100
          },
          "source_vs_port": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "source_vs_protocol": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20
          },
          "environment": {
            "type": "string",
            "maxLength": 50
          },
          "target_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_pool_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_hm_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_rule_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_client_ssl_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_server_ssl_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_persist_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_vip_address_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_app_profile_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_vip": {
            "type": "string",
            "maxLength": 100
          },
          "target_se_group": {
            "type": "string",
            "maxLength": 200
          },
          "target_cloud": {
            "type": "string",
            "maxLength": 200
          },
          "source_wideip_type": {
            "type": "string",
            "maxLength": 10
          },
          "target_gslb_zone": {
            "type": "string",
            "maxLength": 300
          },
          "target_gslb_members": {},
          "gslb_migrated": {
            "type": "boolean"
          },
          "vip_network": {
            "type": "string",
            "description": "CIDR to allocate VIP from",
            "maxLength": 100
          },
          "vip_ref": {
            "type": "string",
            "description": "IPAM object ref for cleanup",
            "maxLength": 500
          },
          "ipam_allocated": {
            "type": "boolean"
          },
          "source_members": {},
          "status": {
            "$ref": "#/components/schemas/MigrationItemStatusEnum"
          },
          "error": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "plan": {
            "type": "integer"
          }
        }
      },
      "ASMToXCPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "f5_source_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "xc_target_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "entity_counts": {
            "type": "object",
            "additionalProperties": {},
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/ASMToXCPlanStatusEnum"
          },
          "asm_policy_name": {
            "type": "string",
            "maxLength": 300
          },
          "asm_policy_id": {
            "type": "string",
            "maxLength": 100
          },
          "xc_tenant_name": {
            "type": "string",
            "maxLength": 200
          },
          "xc_api_token": {
            "type": "string",
            "maxLength": 300
          },
          "xc_namespace": {
            "type": "string",
            "maxLength": 200
          },
          "xc_app_firewall_name": {
            "type": "string",
            "maxLength": 200
          },
          "policy": {},
          "build": {},
          "validation": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          },
          "xc_target": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "created_at",
          "entity_counts",
          "f5_source_name",
          "id",
          "name",
          "updated_at",
          "xc_target_name"
        ]
      },
      "ConsolVlanGap": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "move": {
            "type": "integer",
            "nullable": true
          },
          "move_guest_name": {
            "type": "string",
            "readOnly": true
          },
          "vlan_id": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "vlan_name": {
            "type": "string",
            "maxLength": 100
          },
          "gap_kind": {
            "$ref": "#/components/schemas/GapKindEnum"
          },
          "f5os_target": {},
          "switch_target": {},
          "remediation": {
            "$ref": "#/components/schemas/RemediationEnum"
          },
          "status": {
            "$ref": "#/components/schemas/ConsolVlanGapStatusEnum"
          }
        },
        "required": [
          "gap_kind",
          "id",
          "move_guest_name",
          "vlan_id"
        ]
      },
      "FirewallMigrationPlanStatusEnum": {
        "enum": [
          "draft",
          "discovered",
          "selected",
          "translated",
          "checked",
          "deployed",
          "validated",
          "completed",
          "rolled_back",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `discovered` - Discovered\n* `selected` - Rules Selected\n* `translated` - Translated\n* `checked` - Objects Checked\n* `deployed` - Deployed\n* `validated` - Validated\n* `completed` - Completed\n* `rolled_back` - Rolled Back\n* `failed` - Failed"
      },
      "MigrationItemRequest": {
        "type": "object",
        "properties": {
          "tenant_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "source_vs_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300
          },
          "source_vs_ip": {
            "type": "string",
            "maxLength": 100
          },
          "source_vs_port": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "source_vs_protocol": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20
          },
          "environment": {
            "type": "string",
            "maxLength": 50
          },
          "target_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_pool_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_hm_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_rule_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_client_ssl_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_server_ssl_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_persist_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_vip_address_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_app_profile_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_vip": {
            "type": "string",
            "maxLength": 100
          },
          "target_se_group": {
            "type": "string",
            "maxLength": 200
          },
          "target_cloud": {
            "type": "string",
            "maxLength": 200
          },
          "source_wideip_type": {
            "type": "string",
            "maxLength": 10
          },
          "target_gslb_zone": {
            "type": "string",
            "maxLength": 300
          },
          "target_gslb_members": {},
          "gslb_migrated": {
            "type": "boolean"
          },
          "vip_network": {
            "type": "string",
            "description": "CIDR to allocate VIP from",
            "maxLength": 100
          },
          "vip_ref": {
            "type": "string",
            "description": "IPAM object ref for cleanup",
            "maxLength": 500
          },
          "ipam_allocated": {
            "type": "boolean"
          },
          "source_members": {},
          "status": {
            "$ref": "#/components/schemas/MigrationItemStatusEnum"
          },
          "error": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "plan": {
            "type": "integer"
          }
        },
        "required": [
          "plan",
          "source_vs_name"
        ]
      },
      "ConsolPlanSource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "host": {
            "type": "integer"
          },
          "host_name": {
            "type": "string",
            "readOnly": true
          },
          "decommission_after": {
            "type": "boolean"
          },
          "ready_to_decommission": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "host",
          "host_name",
          "id",
          "ready_to_decommission"
        ]
      },
      "MigrationItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "tenant_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "source_vs_name": {
            "type": "string",
            "maxLength": 300
          },
          "source_vs_ip": {
            "type": "string",
            "maxLength": 100
          },
          "source_vs_port": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "source_vs_protocol": {
            "type": "string",
            "maxLength": 20
          },
          "environment": {
            "type": "string",
            "maxLength": 50
          },
          "target_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_pool_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_hm_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_rule_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_client_ssl_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_server_ssl_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_persist_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_vip_address_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_app_profile_name": {
            "type": "string",
            "maxLength": 300
          },
          "target_vip": {
            "type": "string",
            "maxLength": 100
          },
          "target_se_group": {
            "type": "string",
            "maxLength": 200
          },
          "target_cloud": {
            "type": "string",
            "maxLength": 200
          },
          "source_wideip_type": {
            "type": "string",
            "maxLength": 10
          },
          "target_gslb_zone": {
            "type": "string",
            "maxLength": 300
          },
          "target_gslb_members": {},
          "gslb_migrated": {
            "type": "boolean"
          },
          "vip_network": {
            "type": "string",
            "description": "CIDR to allocate VIP from",
            "maxLength": 100
          },
          "vip_ref": {
            "type": "string",
            "description": "IPAM object ref for cleanup",
            "maxLength": 500
          },
          "ipam_allocated": {
            "type": "boolean"
          },
          "source_members": {},
          "status": {
            "$ref": "#/components/schemas/MigrationItemStatusEnum"
          },
          "error": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "plan": {
            "type": "integer"
          }
        },
        "required": [
          "created_at",
          "id",
          "plan",
          "source_vs_name",
          "updated_at"
        ]
      },
      "ConsolVlanGapStatusEnum": {
        "enum": [
          "open",
          "remediation_planned",
          "remediated",
          "verified",
          "waived"
        ],
        "type": "string",
        "description": "* `open` - Open\n* `remediation_planned` - Remediation Planned\n* `remediated` - Remediated\n* `verified` - Verified\n* `waived` - Waived"
      },
      "A10ToAviMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "description": {
            "type": "string"
          },
          "avi_tenant": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "avi_cloud": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "avi_se_group": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "a10_partition": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "status": {
            "$ref": "#/components/schemas/A10ToAviMigrationPlanStatusEnum"
          },
          "candidates": {},
          "selected": {},
          "vip_assignments": {},
          "translation": {},
          "decisions": {},
          "deploy_log": {},
          "avi_object_refs": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "source_device": {
            "type": "integer",
            "nullable": true
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "name"
        ]
      },
      "ASMToCloudflarePlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "f5_source_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "entity_counts": {
            "type": "object",
            "additionalProperties": {},
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/ASMToCloudflarePlanStatusEnum"
          },
          "asm_policy_name": {
            "type": "string",
            "maxLength": 300
          },
          "asm_policy_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_account_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_zone_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_api_token": {
            "type": "string",
            "maxLength": 300
          },
          "cf_zone_name": {
            "type": "string",
            "maxLength": 200
          },
          "policy": {},
          "build": {},
          "validation": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "created_at",
          "entity_counts",
          "f5_source_name",
          "id",
          "name",
          "updated_at"
        ]
      },
      "ConsolPlanList": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "datacenter_name": {
            "type": "string",
            "readOnly": true
          },
          "target_host": {
            "type": "integer"
          },
          "target_host_name": {
            "type": "string",
            "readOnly": true
          },
          "status": {
            "$ref": "#/components/schemas/StatusE5bEnum"
          },
          "change_ref": {
            "type": "string",
            "maxLength": 50
          },
          "created_by": {
            "type": "string",
            "maxLength": 150
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "source_count": {
            "type": "integer",
            "readOnly": true
          },
          "move_count": {
            "type": "integer",
            "readOnly": true
          }
        },
        "required": [
          "created_at",
          "datacenter_name",
          "id",
          "move_count",
          "name",
          "source_count",
          "target_host",
          "target_host_name"
        ]
      },
      "RemediationEnum": {
        "enum": [
          "auto",
          "manual",
          "accepted_risk"
        ],
        "type": "string",
        "description": "* `auto` - Auto\n* `manual` - Manual\n* `accepted_risk` - Accepted Risk"
      },
      "FirewallMigrationPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "source_device_names": {
            "type": "string",
            "readOnly": true
          },
          "target_device_name": {
            "type": "string",
            "readOnly": true
          },
          "summary": {
            "type": "string",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "description": {
            "type": "string"
          },
          "target_platform": {
            "$ref": "#/components/schemas/FirewallMigrationPlanTargetPlatformEnum"
          },
          "target_vsys": {
            "type": "string",
            "maxLength": 100
          },
          "target_device_group": {
            "type": "string",
            "maxLength": 200
          },
          "nsx_domain": {
            "type": "string",
            "maxLength": 100
          },
          "nsx_security_policy": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/FirewallMigrationPlanStatusEnum"
          },
          "candidates": {},
          "selected": {},
          "object_translation": {},
          "translation": {},
          "decisions": {},
          "deploy_log": {},
          "target_refs": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          },
          "source_devices": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "required": [
          "created_at",
          "id",
          "name",
          "source_device_names",
          "summary",
          "target_device_name",
          "updated_at"
        ]
      },
      "ConsolMoveStatusEnum": {
        "enum": [
          "planned",
          "blocked",
          "ready",
          "in_progress",
          "migrated",
          "verified",
          "failed",
          "rolled_back"
        ],
        "type": "string",
        "description": "* `planned` - Planned\n* `blocked` - Blocked\n* `ready` - Ready\n* `in_progress` - In Progress\n* `migrated` - Migrated\n* `verified` - Verified\n* `failed` - Failed\n* `rolled_back` - Rolled Back"
      },
      "A10ToAviMigrationPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "source_device_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "target_device_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "description": {
            "type": "string"
          },
          "avi_tenant": {
            "type": "string",
            "maxLength": 100
          },
          "avi_cloud": {
            "type": "string",
            "maxLength": 100
          },
          "avi_se_group": {
            "type": "string",
            "maxLength": 100
          },
          "a10_partition": {
            "type": "string",
            "maxLength": 100
          },
          "status": {
            "$ref": "#/components/schemas/A10ToAviMigrationPlanStatusEnum"
          },
          "candidates": {},
          "selected": {},
          "vip_assignments": {},
          "translation": {},
          "decisions": {},
          "deploy_log": {},
          "avi_object_refs": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "source_device": {
            "type": "integer",
            "nullable": true
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "created_at",
          "id",
          "name",
          "source_device_name",
          "target_device_name",
          "updated_at"
        ]
      },
      "GapKindEnum": {
        "enum": [
          "f5os_missing",
          "f5os_untagged_lag",
          "switch_trunk_missing",
          "unknown_switch"
        ],
        "type": "string",
        "description": "* `f5os_missing` - Missing on target F5OS\n* `f5os_untagged_lag` - Untagged on target LAG\n* `switch_trunk_missing` - Missing on upstream switch trunk\n* `unknown_switch` - Unmanaged/unknown switch"
      },
      "PaginatedF5ToEIPGSLBPlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/F5ToEIPGSLBPlan"
            }
          }
        }
      },
      "F5ToEIPGSLBPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "f5_source_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "eip_target_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/F5ToEIPGSLBPlanStatusEnum"
          },
          "source_type": {
            "$ref": "#/components/schemas/F5ToEIPGSLBPlanSourceTypeEnum"
          },
          "candidates": {},
          "selected": {},
          "eligibility": {},
          "applications": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          },
          "eip_target": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "created_at",
          "eip_target_name",
          "f5_source_name",
          "id",
          "name",
          "updated_at"
        ]
      },
      "F5ToEIPGSLBPlanStatusEnum": {
        "enum": [
          "draft",
          "discovered",
          "translated",
          "loaded",
          "validated",
          "cutover",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `discovered` - Discovered\n* `translated` - Translated\n* `loaded` - Loaded\n* `validated` - Validated\n* `cutover` - Cutover in Progress\n* `completed` - Completed\n* `failed` - Failed"
      },
      "FirewallMigrationPlanTargetPlatformEnum": {
        "enum": [
          "panos",
          "panorama",
          "nsx"
        ],
        "type": "string",
        "description": "* `panos` - Palo Alto (PAN-OS, direct)\n* `panorama` - Palo Alto Panorama\n* `nsx` - VMware NSX DFW"
      },
      "MigrationPlanTargetPlatformEnum": {
        "enum": [
          "avi",
          "f5"
        ],
        "type": "string",
        "description": "* `avi` - VMware NSX ALB (AVI)\n* `f5` - F5 BIG-IP"
      },
      "PlanTypeEnum": {
        "enum": [
          "adc_to_avi",
          "gtm_to_eip"
        ],
        "type": "string",
        "description": "* `adc_to_avi` - Legacy ADC\n* `gtm_to_eip` - GTM to EfficientIP GSLB"
      },
      "PatchedVcmpMigrationUnitRequest": {
        "type": "object",
        "properties": {
          "sequence": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "source_guest_name": {
            "type": "string",
            "maxLength": 200
          },
          "role": {
            "type": "string",
            "maxLength": 20
          },
          "target_tenant_name": {
            "type": "string",
            "maxLength": 200
          },
          "temp_mgmt_ip": {
            "type": "string",
            "maxLength": 100
          },
          "state": {
            "$ref": "#/components/schemas/VcmpMigrationUnitStateEnum"
          },
          "pool_member_snapshot": {},
          "ucs_size_bytes": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "guest_specs": {},
          "log": {
            "type": "string"
          },
          "error": {
            "type": "string"
          },
          "plan": {
            "type": "integer"
          },
          "source_host": {
            "type": "integer",
            "nullable": true
          },
          "target_host": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "PaginatedMigrationItemList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MigrationItem"
            }
          }
        }
      },
      "VcmpMigrationUnitRequest": {
        "type": "object",
        "properties": {
          "sequence": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "source_guest_name": {
            "type": "string",
            "maxLength": 200
          },
          "role": {
            "type": "string",
            "maxLength": 20
          },
          "target_tenant_name": {
            "type": "string",
            "maxLength": 200
          },
          "temp_mgmt_ip": {
            "type": "string",
            "maxLength": 100
          },
          "state": {
            "$ref": "#/components/schemas/VcmpMigrationUnitStateEnum"
          },
          "pool_member_snapshot": {},
          "ucs_size_bytes": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "guest_specs": {},
          "log": {
            "type": "string"
          },
          "error": {
            "type": "string"
          },
          "plan": {
            "type": "integer"
          },
          "source_host": {
            "type": "integer",
            "nullable": true
          },
          "target_host": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "plan"
        ]
      },
      "PaginatedA10ToAviMigrationPlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/A10ToAviMigrationPlan"
            }
          }
        }
      },
      "VcmpMigrationUnitStateEnum": {
        "enum": [
          "pending",
          "offline",
          "ucs_saved",
          "guest_down",
          "vlans_set",
          "ucs_loaded",
          "online",
          "active",
          "failed"
        ],
        "type": "string",
        "description": "* `pending` - Pending\n* `offline` - Forced Offline\n* `ucs_saved` - UCS Saved\n* `guest_down` - Guest Shut Down\n* `vlans_set` - VLANs Assigned\n* `ucs_loaded` - UCS Loaded\n* `online` - Online & Verified\n* `active` - Active (Failover Complete)\n* `failed` - Failed"
      },
      "PaginatedFirewallMigrationPlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FirewallMigrationPlan"
            }
          }
        }
      },
      "PatchedASMToXCPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/ASMToXCPlanStatusEnum"
          },
          "asm_policy_name": {
            "type": "string",
            "maxLength": 300
          },
          "asm_policy_id": {
            "type": "string",
            "maxLength": 100
          },
          "xc_tenant_name": {
            "type": "string",
            "maxLength": 200
          },
          "xc_api_token": {
            "type": "string",
            "maxLength": 300
          },
          "xc_namespace": {
            "type": "string",
            "maxLength": 200
          },
          "xc_app_firewall_name": {
            "type": "string",
            "maxLength": 200
          },
          "policy": {},
          "build": {},
          "validation": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          },
          "xc_target": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "PatchedFirewallMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "description": {
            "type": "string"
          },
          "target_platform": {
            "$ref": "#/components/schemas/FirewallMigrationPlanTargetPlatformEnum"
          },
          "target_vsys": {
            "type": "string",
            "maxLength": 100
          },
          "target_device_group": {
            "type": "string",
            "maxLength": 200
          },
          "nsx_domain": {
            "type": "string",
            "maxLength": 100
          },
          "nsx_security_policy": {
            "type": "string",
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/FirewallMigrationPlanStatusEnum"
          },
          "candidates": {},
          "selected": {},
          "object_translation": {},
          "translation": {},
          "decisions": {},
          "deploy_log": {},
          "target_refs": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          },
          "source_devices": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        }
      },
      "PatchedA10ToAviMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "description": {
            "type": "string"
          },
          "avi_tenant": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "avi_cloud": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "avi_se_group": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "a10_partition": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "status": {
            "$ref": "#/components/schemas/A10ToAviMigrationPlanStatusEnum"
          },
          "candidates": {},
          "selected": {},
          "vip_assignments": {},
          "translation": {},
          "decisions": {},
          "deploy_log": {},
          "avi_object_refs": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "source_device": {
            "type": "integer",
            "nullable": true
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "PatchedMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "tenant_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "plan_type": {
            "$ref": "#/components/schemas/PlanTypeEnum"
          },
          "target_platform": {
            "$ref": "#/components/schemas/MigrationPlanTargetPlatformEnum"
          },
          "f5_partition": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "f5_route_domain": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20
          },
          "status": {
            "$ref": "#/components/schemas/MigrationPlanStatusEnum"
          },
          "default_vip_network": {
            "type": "string",
            "maxLength": 100
          },
          "default_cloud": {
            "type": "string",
            "maxLength": 200
          },
          "default_tier1_lr": {
            "type": "string",
            "maxLength": 500
          },
          "default_vrf_context": {
            "type": "string",
            "maxLength": 500
          },
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "source_device": {
            "type": "integer"
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          },
          "avi_controller": {
            "type": "integer",
            "nullable": true
          },
          "naming_convention": {
            "type": "integer",
            "nullable": true
          },
          "ipam_device": {
            "type": "integer",
            "nullable": true
          },
          "nsx_manager_device": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "F5ToEIPGSLBPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/F5ToEIPGSLBPlanStatusEnum"
          },
          "source_type": {
            "$ref": "#/components/schemas/F5ToEIPGSLBPlanSourceTypeEnum"
          },
          "candidates": {},
          "selected": {},
          "eligibility": {},
          "applications": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          },
          "eip_target": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "name"
        ]
      },
      "MigrationPlanStatusEnum": {
        "enum": [
          "draft",
          "ready",
          "in_progress",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `ready` - Ready\n* `in_progress` - In Progress\n* `completed` - Completed\n* `failed` - Failed"
      },
      "ASMToXCPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/ASMToXCPlanStatusEnum"
          },
          "asm_policy_name": {
            "type": "string",
            "maxLength": 300
          },
          "asm_policy_id": {
            "type": "string",
            "maxLength": 100
          },
          "xc_tenant_name": {
            "type": "string",
            "maxLength": 200
          },
          "xc_api_token": {
            "type": "string",
            "maxLength": 300
          },
          "xc_namespace": {
            "type": "string",
            "maxLength": 200
          },
          "xc_app_firewall_name": {
            "type": "string",
            "maxLength": 200
          },
          "policy": {},
          "build": {},
          "validation": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          },
          "xc_target": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "name"
        ]
      },
      "PatchedASMToCloudflarePlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/ASMToCloudflarePlanStatusEnum"
          },
          "asm_policy_name": {
            "type": "string",
            "maxLength": 300
          },
          "asm_policy_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_account_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_zone_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_api_token": {
            "type": "string",
            "maxLength": 300
          },
          "cf_zone_name": {
            "type": "string",
            "maxLength": 200
          },
          "policy": {},
          "build": {},
          "validation": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "PatchedVcmpMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/VcmpMigrationPlanStatusEnum"
          },
          "notes": {
            "type": "string"
          },
          "selected_guests": {},
          "temp_mgmt_ips": {},
          "temp_mgmt_prefix": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "temp_mgmt_gateway": {
            "type": "string",
            "maxLength": 100
          },
          "tenant_image": {
            "type": "string",
            "maxLength": 300
          },
          "trunk_mappings": {},
          "tenants_created": {
            "type": "boolean"
          },
          "vlans_staged": {
            "type": "boolean"
          },
          "tenants_deployed": {
            "type": "boolean"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "legacy_host_1": {
            "type": "integer",
            "nullable": true
          },
          "legacy_host_2": {
            "type": "integer",
            "nullable": true
          },
          "target_host_1": {
            "type": "integer",
            "nullable": true
          },
          "target_host_2": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "ASMToXCPlanStatusEnum": {
        "enum": [
          "draft",
          "extracted",
          "mapped",
          "risk_review",
          "risk_accepted",
          "built",
          "validating",
          "cutover",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `extracted` - Extracted\n* `mapped` - Mapped\n* `risk_review` - Risk Review\n* `risk_accepted` - Risk Accepted\n* `built` - Built in XC\n* `validating` - Shadow Validation\n* `cutover` - Cutover in Progress\n* `completed` - Completed\n* `failed` - Failed"
      },
      "ConsolPlanDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "datacenter": {
            "type": "integer"
          },
          "datacenter_name": {
            "type": "string",
            "readOnly": true
          },
          "target_host": {
            "type": "integer"
          },
          "target_host_name": {
            "type": "string",
            "readOnly": true
          },
          "target_host_payload": {
            "type": "string",
            "readOnly": true
          },
          "status": {
            "$ref": "#/components/schemas/StatusE5bEnum"
          },
          "change_ref": {
            "type": "string",
            "maxLength": 50
          },
          "created_by": {
            "type": "string",
            "maxLength": 150
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsolPlanSource"
            },
            "readOnly": true
          },
          "moves": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsolMove"
            },
            "readOnly": true
          },
          "vlan_gaps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsolVlanGap"
            },
            "readOnly": true
          },
          "source_hosts_payload": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "created_at",
          "datacenter",
          "datacenter_name",
          "id",
          "moves",
          "name",
          "source_hosts_payload",
          "sources",
          "target_host",
          "target_host_name",
          "target_host_payload",
          "vlan_gaps"
        ]
      },
      "MigrationPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "source_device_name": {
            "type": "string",
            "readOnly": true
          },
          "target_device_name": {
            "type": "string",
            "readOnly": true
          },
          "avi_controller_name": {
            "type": "string",
            "readOnly": true,
            "default": ""
          },
          "naming_convention_name": {
            "type": "string",
            "readOnly": true
          },
          "ipam_device_name": {
            "type": "string",
            "readOnly": true
          },
          "ipam_device_vendor": {
            "type": "string",
            "readOnly": true
          },
          "nsx_manager_device_name": {
            "type": "string",
            "readOnly": true
          },
          "ipam_device_network_view": {
            "type": "string",
            "readOnly": true
          },
          "source_device_client_code": {
            "type": "string",
            "readOnly": true
          },
          "item_count": {
            "type": "string",
            "readOnly": true
          },
          "item_status_summary": {
            "type": "string",
            "readOnly": true
          },
          "default_se_group": {
            "type": "string",
            "readOnly": true
          },
          "tenant_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "plan_type": {
            "$ref": "#/components/schemas/PlanTypeEnum"
          },
          "target_platform": {
            "$ref": "#/components/schemas/MigrationPlanTargetPlatformEnum"
          },
          "f5_partition": {
            "type": "string",
            "maxLength": 100
          },
          "f5_route_domain": {
            "type": "string",
            "maxLength": 20
          },
          "status": {
            "$ref": "#/components/schemas/MigrationPlanStatusEnum"
          },
          "default_vip_network": {
            "type": "string",
            "maxLength": 100
          },
          "default_cloud": {
            "type": "string",
            "maxLength": 200
          },
          "default_tier1_lr": {
            "type": "string",
            "maxLength": 500
          },
          "default_vrf_context": {
            "type": "string",
            "maxLength": 500
          },
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "source_device": {
            "type": "integer"
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          },
          "avi_controller": {
            "type": "integer",
            "nullable": true
          },
          "naming_convention": {
            "type": "integer",
            "nullable": true
          },
          "ipam_device": {
            "type": "integer",
            "nullable": true
          },
          "nsx_manager_device": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "avi_controller_name",
          "created_at",
          "default_se_group",
          "id",
          "ipam_device_name",
          "ipam_device_network_view",
          "ipam_device_vendor",
          "item_count",
          "item_status_summary",
          "name",
          "naming_convention_name",
          "nsx_manager_device_name",
          "source_device",
          "source_device_client_code",
          "source_device_name",
          "target_device_name",
          "updated_at"
        ]
      },
      "PaginatedVcmpMigrationPlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VcmpMigrationPlan"
            }
          }
        }
      },
      "A10ToAviMigrationPlanStatusEnum": {
        "enum": [
          "draft",
          "discovered",
          "selected",
          "vips_set",
          "translated",
          "deployed",
          "validated",
          "cutover",
          "completed",
          "rolled_back",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `discovered` - Discovered\n* `selected` - Objects Selected\n* `vips_set` - VIPs Assigned\n* `translated` - Translated\n* `deployed` - Deployed to Avi\n* `validated` - Validated\n* `cutover` - Cutover in Progress\n* `completed` - Completed\n* `rolled_back` - Rolled Back\n* `failed` - Failed"
      },
      "MigrationPlanRequest": {
        "type": "object",
        "properties": {
          "tenant_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "plan_type": {
            "$ref": "#/components/schemas/PlanTypeEnum"
          },
          "target_platform": {
            "$ref": "#/components/schemas/MigrationPlanTargetPlatformEnum"
          },
          "f5_partition": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "f5_route_domain": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20
          },
          "status": {
            "$ref": "#/components/schemas/MigrationPlanStatusEnum"
          },
          "default_vip_network": {
            "type": "string",
            "maxLength": 100
          },
          "default_cloud": {
            "type": "string",
            "maxLength": 200
          },
          "default_tier1_lr": {
            "type": "string",
            "maxLength": 500
          },
          "default_vrf_context": {
            "type": "string",
            "maxLength": 500
          },
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "source_device": {
            "type": "integer"
          },
          "target_device": {
            "type": "integer",
            "nullable": true
          },
          "avi_controller": {
            "type": "integer",
            "nullable": true
          },
          "naming_convention": {
            "type": "integer",
            "nullable": true
          },
          "ipam_device": {
            "type": "integer",
            "nullable": true
          },
          "nsx_manager_device": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "name",
          "source_device"
        ]
      },
      "VcmpMigrationPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/VcmpMigrationPlanStatusEnum"
          },
          "notes": {
            "type": "string"
          },
          "selected_guests": {},
          "temp_mgmt_ips": {},
          "temp_mgmt_prefix": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "temp_mgmt_gateway": {
            "type": "string",
            "maxLength": 100
          },
          "tenant_image": {
            "type": "string",
            "maxLength": 300
          },
          "trunk_mappings": {},
          "tenants_created": {
            "type": "boolean"
          },
          "vlans_staged": {
            "type": "boolean"
          },
          "tenants_deployed": {
            "type": "boolean"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "legacy_host_1": {
            "type": "integer",
            "nullable": true
          },
          "legacy_host_2": {
            "type": "integer",
            "nullable": true
          },
          "target_host_1": {
            "type": "integer",
            "nullable": true
          },
          "target_host_2": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "name"
        ]
      },
      "PatchedF5ToEIPGSLBPlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/F5ToEIPGSLBPlanStatusEnum"
          },
          "source_type": {
            "$ref": "#/components/schemas/F5ToEIPGSLBPlanSourceTypeEnum"
          },
          "candidates": {},
          "selected": {},
          "eligibility": {},
          "applications": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          },
          "eip_target": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "MigrationItemStatusEnum": {
        "enum": [
          "pending",
          "ready",
          "migrated",
          "failed",
          "skipped"
        ],
        "type": "string",
        "description": "* `pending` - Pending\n* `ready` - Ready\n* `migrated` - Migrated\n* `failed` - Failed\n* `skipped` - Skipped"
      },
      "ConsolMove": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "plan": {
            "type": "integer"
          },
          "guest": {
            "type": "integer"
          },
          "guest_name": {
            "type": "string",
            "readOnly": true
          },
          "source_host_name": {
            "type": "string",
            "readOnly": true
          },
          "target_vcpus": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "target_mem_mb": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "target_vdisk_gb": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648
          },
          "ha_mode": {
            "$ref": "#/components/schemas/HaModeEnum"
          },
          "peer_guest": {
            "type": "integer",
            "nullable": true
          },
          "peer_guest_name": {
            "type": "string",
            "readOnly": true
          },
          "peer_host_name": {
            "type": "string",
            "readOnly": true
          },
          "sequence": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": -2147483648,
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ConsolMoveStatusEnum"
          },
          "vlan_gaps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsolVlanGap"
            },
            "readOnly": true
          },
          "workflow_run": {
            "type": "integer",
            "nullable": true
          },
          "workflow_run_status": {
            "type": "string",
            "readOnly": true
          },
          "change_number": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "change_number",
          "guest",
          "guest_name",
          "id",
          "peer_guest_name",
          "peer_host_name",
          "plan",
          "source_host_name",
          "target_mem_mb",
          "target_vcpus",
          "target_vdisk_gb",
          "vlan_gaps",
          "workflow_run_status"
        ]
      },
      "ConsolPlanDetailRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "datacenter": {
            "type": "integer"
          },
          "target_host": {
            "type": "integer"
          },
          "status": {
            "$ref": "#/components/schemas/StatusE5bEnum"
          },
          "change_ref": {
            "type": "string",
            "maxLength": 50
          },
          "created_by": {
            "type": "string",
            "maxLength": 150
          }
        },
        "required": [
          "datacenter",
          "name",
          "target_host"
        ]
      },
      "PaginatedMigrationPlanList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MigrationPlan"
            }
          }
        }
      },
      "ASMToCloudflarePlanRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "status": {
            "$ref": "#/components/schemas/ASMToCloudflarePlanStatusEnum"
          },
          "asm_policy_name": {
            "type": "string",
            "maxLength": 300
          },
          "asm_policy_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_account_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_zone_id": {
            "type": "string",
            "maxLength": 100
          },
          "cf_api_token": {
            "type": "string",
            "maxLength": 300
          },
          "cf_zone_name": {
            "type": "string",
            "maxLength": 200
          },
          "policy": {},
          "build": {},
          "validation": {},
          "cutover_config": {},
          "notes": {
            "type": "string"
          },
          "created_by": {
            "type": "string",
            "maxLength": 100
          },
          "f5_source": {
            "type": "integer",
            "nullable": true
          }
        },
        "required": [
          "name"
        ]
      },
      "PaginatedVcmpMigrationUnitList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=4"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?page=2"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VcmpMigrationUnit"
            }
          }
        }
      },
      "ASMToCloudflarePlanStatusEnum": {
        "enum": [
          "draft",
          "extracted",
          "mapped",
          "risk_review",
          "risk_accepted",
          "built",
          "validating",
          "cutover",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - Draft\n* `extracted` - Extracted\n* `mapped` - Mapped\n* `risk_review` - Risk Review\n* `risk_accepted` - Risk Accepted\n* `built` - Built in Cloudflare\n* `validating` - Shadow Validation\n* `cutover` - Cutover in Progress\n* `completed` - Completed\n* `failed` - Failed"
      }
    }
  }
}