{
  "info": {
    "_postman_id": "ptai-api-collection",
    "name": "ptAI API",
    "description": "Curated requests for every ptAI attack, mirroring the dashboard's **Data type → Family → Scenario → Algorithm** hierarchy.\n\n**Before sending:** open the *Body* tab, scroll to the file slots (`dataset`, `model`, `scaler`, `encoder` for structured; `model` and optional `dataset_zip` for image), and click *Select Files* to attach your assets. `params` is pre-filled with the dashboard's default values for the chosen algorithm + data type.\n\n**Response:** every attack returns a **ZIP** by default (all results + artifacts). In Postman, use *Save Response → Save to a file* to keep it. Add `?format=json` to the URL if you'd rather get the JSON envelope inline.\n\n**Slow attacks:** every attack runs as a background job. Fast ones still return inline like above; slow ones (jsma, hsj, cw, zoo, boundary, pentest, inference...) return `202 {job_id, ...}` instead — see the **Jobs (async attacks)** folder to poll/fetch/cancel.\n\n**Auth:** set the `apiKey` collection variable (Variables tab) to your `X-API-Key` — every request in this collection sends it automatically via the collection-level Authorization.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Meta",
      "description": "Health, schema, and documentation endpoints. Most are always public — no API key required — except where noted.",
      "item": [
        {
          "name": "Health check",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/healthz",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "healthz"
              ]
            }
          }
        },
        {
          "name": "OpenAPI schema",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/openapi.json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "openapi.json"
              ]
            }
          }
        },
        {
          "name": "Landing page",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/",
              "host": [
                "{{baseUrl}}"
              ],
              "path": []
            }
          }
        },
        {
          "name": "User API Guide (Markdown download)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/readme",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "readme"
              ]
            }
          }
        },
        {
          "name": "Validate API key (whoami)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/auth/whoami",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "auth",
                "whoami"
              ]
            },
            "description": "Unlike the other requests in this folder, this one requires a valid `X-API-Key` (set the `apiKey` collection variable first) — use it to check a pasted key works before running an attack."
          }
        }
      ]
    },
    {
      "name": "Unified (one full-config file)",
      "description": "`POST /api/attack` — one JSON config describes the whole request (data_type + family + scenario/attack + params). Put it inline in `config`, or upload a `.json` in `config_file` (download ready-made ones from /templates). Then attach your data files. Same ZIP/JSON response as the granular endpoints.",
      "item": [
        {
          "name": "Evasion PGD (structured) — inline config",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "config",
                  "value": "{\"data_type\":\"structured\",\"family\":\"evasion\",\"scenario\":\"white\",\"attack\":\"pgd\",\"columns_to_drop\":\"flow_id,src_ip,dst_ip,src_port,dst_port\",\"label_col\":\"label\",\"params\":{\"eps\":0.1,\"eps_step\":0.01,\"max_iter\":40}}",
                  "type": "text"
                },
                {
                  "key": "dataset",
                  "type": "file",
                  "src": [],
                  "description": "Tabular dataset (.csv)"
                },
                {
                  "key": "model",
                  "type": "file",
                  "src": [],
                  "description": "Keras model (.h5)"
                },
                {
                  "key": "scaler",
                  "type": "file",
                  "src": [],
                  "description": "Fitted scaler (.joblib / .pkl)"
                },
                {
                  "key": "encoder",
                  "type": "file",
                  "src": [],
                  "description": "Label encoder (.joblib / .pkl)"
                }
              ]
            }
          }
        },
        {
          "name": "Evasion FGSM (image) — inline config",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "config",
                  "value": "{\"data_type\":\"image\",\"family\":\"evasion\",\"scenario\":\"white\",\"attack\":\"fgsm\",\"source\":\"mnist\",\"limit\":200,\"params\":{\"eps\":0.03}}",
                  "type": "text"
                },
                {
                  "key": "model",
                  "type": "file",
                  "src": [],
                  "description": "Keras model (.h5)"
                }
              ]
            }
          }
        },
        {
          "name": "Poisoning Backdoor (structured) — inline config",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "config",
                  "value": "{\"data_type\":\"structured\",\"family\":\"poisoning\",\"attack\":\"backdoor\",\"columns_to_drop\":\"flow_id,src_ip,dst_ip,src_port,dst_port\",\"label_col\":\"label\",\"params\":{\"target_class\":0,\"trigger_features\":\"-1\",\"trigger_value\":1.0,\"poison_fraction\":0.1}}",
                  "type": "text"
                },
                {
                  "key": "dataset",
                  "type": "file",
                  "src": [],
                  "description": "Tabular dataset (.csv)"
                },
                {
                  "key": "model",
                  "type": "file",
                  "src": [],
                  "description": "Keras model (.h5)"
                },
                {
                  "key": "scaler",
                  "type": "file",
                  "src": [],
                  "description": "Fitted scaler (.joblib / .pkl)"
                },
                {
                  "key": "encoder",
                  "type": "file",
                  "src": [],
                  "description": "Label encoder (.joblib / .pkl)"
                }
              ]
            }
          }
        },
        {
          "name": "Any attack — upload config_file instead",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack"
              ]
            },
            "description": "Leave `config` empty and upload a full-config .json from /templates in `config_file`.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "config",
                  "value": "{}",
                  "type": "text"
                },
                {
                  "key": "config_file",
                  "type": "file",
                  "src": [],
                  "description": "Full-config .json from /templates (config set)"
                },
                {
                  "key": "dataset",
                  "type": "file",
                  "src": [],
                  "description": "Tabular dataset (.csv)"
                },
                {
                  "key": "model",
                  "type": "file",
                  "src": [],
                  "description": "Keras model (.h5)"
                },
                {
                  "key": "scaler",
                  "type": "file",
                  "src": [],
                  "description": "Fitted scaler (.joblib / .pkl)"
                },
                {
                  "key": "encoder",
                  "type": "file",
                  "src": [],
                  "description": "Label encoder (.joblib / .pkl)"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Structured (tabular)",
      "description": "Tabular attacks — CSV + Keras model + scaler + encoder.",
      "item": [
        {
          "name": "Evasion",
          "description": "Adversarial inputs that fool the model at inference time.",
          "item": [
            {
              "name": "White-box (gradient access)",
              "item": [
                {
                  "name": "FGSM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "fgsm",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.1}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "PGD",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "pgd",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.1,\"eps_step\":0.01,\"max_iter\":40}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "BIM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "bim",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.1,\"eps_step\":0.01,\"max_iter\":10}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "JSMA",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "jsma",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"theta\":1.0,\"gamma\":0.1}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "CW",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "cw",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"confidence\":0.0,\"learning_rate\":0.001,\"binary_search_steps\":10,\"max_iter\":20,\"initial_const\":0.9,\"batch_size\":32}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            {
              "name": "Black-box (decision-only)",
              "item": [
                {
                  "name": "ZOO",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/blackbox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "blackbox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "zoo",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"confidence\":0.5,\"learning_rate\":0.01,\"max_iter\":20,\"nb_parallel\":20}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "Boundary",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/blackbox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "blackbox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "boundary",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":1000,\"epsilon\":0.01}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "HopSkipJump",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/blackbox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "blackbox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "hsj",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":25,\"max_eval\":10000}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            {
              "name": "Grey-box (gradients on surrogate)",
              "item": [
                {
                  "name": "FGSM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "fgsm",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.1}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "PGD",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "pgd",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.1,\"eps_step\":0.01,\"max_iter\":40}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "BIM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "bim",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.1,\"eps_step\":0.01,\"max_iter\":10}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "JSMA",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "jsma",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"theta\":1.0,\"gamma\":0.1}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "CW",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "structured",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "cw",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"confidence\":0.0,\"learning_rate\":0.001,\"binary_search_steps\":10,\"max_iter\":20,\"initial_const\":0.9,\"batch_size\":32}",
                          "type": "text"
                        },
                        {
                          "key": "columns_to_drop",
                          "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                          "type": "text",
                          "description": "Comma-separated columns to drop before scaling"
                        },
                        {
                          "key": "label_col",
                          "value": "label",
                          "type": "text",
                          "description": "Ground-truth column"
                        },
                        {
                          "key": "label_binary_col",
                          "value": "",
                          "type": "text",
                          "description": "Optional binary label column"
                        },
                        {
                          "key": "dataset",
                          "type": "file",
                          "src": [],
                          "description": "Tabular dataset (.csv)"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5)"
                        },
                        {
                          "key": "scaler",
                          "type": "file",
                          "src": [],
                          "description": "Fitted scaler (.joblib / .pkl)"
                        },
                        {
                          "key": "encoder",
                          "type": "file",
                          "src": [],
                          "description": "Label encoder (.joblib / .pkl)"
                        }
                      ]
                    }
                  }
                }
              ]
            }
          ]
        },
        {
          "name": "Inference (Membership)",
          "description": "Test whether the model leaks its training-set membership.",
          "item": [
            {
              "name": "MIA · Random Forest meta-classifier",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/inference",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "inference"
                  ]
                },
                "description": "Rule-Based + Black-Box MIA run in parallel. Change `attack_model_type` to gb or lr to swap the meta-classifier.",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "structured",
                      "type": "text"
                    },
                    {
                      "key": "attack_model_type",
                      "value": "rf",
                      "type": "text",
                      "description": "rf · gb · lr"
                    },
                    {
                      "key": "params",
                      "value": "{\"split_ratio\":0.7,\"max_samples\":1000,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "columns_to_drop",
                      "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                      "type": "text",
                      "description": "Comma-separated columns to drop before scaling"
                    },
                    {
                      "key": "label_col",
                      "value": "label",
                      "type": "text",
                      "description": "Ground-truth column"
                    },
                    {
                      "key": "label_binary_col",
                      "value": "",
                      "type": "text",
                      "description": "Optional binary label column"
                    },
                    {
                      "key": "dataset",
                      "type": "file",
                      "src": [],
                      "description": "Tabular dataset (.csv)"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5)"
                    },
                    {
                      "key": "scaler",
                      "type": "file",
                      "src": [],
                      "description": "Fitted scaler (.joblib / .pkl)"
                    },
                    {
                      "key": "encoder",
                      "type": "file",
                      "src": [],
                      "description": "Label encoder (.joblib / .pkl)"
                    }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Extraction (CopycatCNN)",
          "description": "Train a stolen ('thieved') copy of the model from victim queries.",
          "item": [
            {
              "name": "CopycatCNN",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/extraction",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "extraction"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "structured",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"nb_stolen\":500,\"nb_epochs\":5,\"batch_size\":64,\"use_probability\":true}",
                      "type": "text"
                    },
                    {
                      "key": "columns_to_drop",
                      "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                      "type": "text",
                      "description": "Comma-separated columns to drop before scaling"
                    },
                    {
                      "key": "label_col",
                      "value": "label",
                      "type": "text",
                      "description": "Ground-truth column"
                    },
                    {
                      "key": "label_binary_col",
                      "value": "",
                      "type": "text",
                      "description": "Optional binary label column"
                    },
                    {
                      "key": "dataset",
                      "type": "file",
                      "src": [],
                      "description": "Tabular dataset (.csv)"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5)"
                    },
                    {
                      "key": "scaler",
                      "type": "file",
                      "src": [],
                      "description": "Fitted scaler (.joblib / .pkl)"
                    },
                    {
                      "key": "encoder",
                      "type": "file",
                      "src": [],
                      "description": "Label encoder (.joblib / .pkl)"
                    }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Poisoning",
          "description": "Inject malicious training samples, retrain a clone, measure ASR.",
          "item": [
            {
              "name": "Backdoor",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/poisoning",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "poisoning"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "structured",
                      "type": "text"
                    },
                    {
                      "key": "attack",
                      "value": "backdoor",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"target_class\":0,\"trigger_features\":\"-1\",\"trigger_value\":1.0,\"poison_fraction\":0.10,\"nb_epochs\":8,\"batch_size\":64,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "columns_to_drop",
                      "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                      "type": "text",
                      "description": "Comma-separated columns to drop before scaling"
                    },
                    {
                      "key": "label_col",
                      "value": "label",
                      "type": "text",
                      "description": "Ground-truth column"
                    },
                    {
                      "key": "label_binary_col",
                      "value": "",
                      "type": "text",
                      "description": "Optional binary label column"
                    },
                    {
                      "key": "dataset",
                      "type": "file",
                      "src": [],
                      "description": "Tabular dataset (.csv)"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5)"
                    },
                    {
                      "key": "scaler",
                      "type": "file",
                      "src": [],
                      "description": "Fitted scaler (.joblib / .pkl)"
                    },
                    {
                      "key": "encoder",
                      "type": "file",
                      "src": [],
                      "description": "Label encoder (.joblib / .pkl)"
                    }
                  ]
                }
              }
            },
            {
              "name": "Clean-Label",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/poisoning",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "poisoning"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "structured",
                      "type": "text"
                    },
                    {
                      "key": "attack",
                      "value": "clean_label",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"target_class\":0,\"trigger_features\":\"-1\",\"trigger_value\":1.0,\"poison_fraction\":0.10,\"pp_poison\":0.33,\"eps\":0.3,\"eps_step\":0.1,\"max_iter\":100,\"nb_epochs\":8,\"batch_size\":64,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "columns_to_drop",
                      "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                      "type": "text",
                      "description": "Comma-separated columns to drop before scaling"
                    },
                    {
                      "key": "label_col",
                      "value": "label",
                      "type": "text",
                      "description": "Ground-truth column"
                    },
                    {
                      "key": "label_binary_col",
                      "value": "",
                      "type": "text",
                      "description": "Optional binary label column"
                    },
                    {
                      "key": "dataset",
                      "type": "file",
                      "src": [],
                      "description": "Tabular dataset (.csv)"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5)"
                    },
                    {
                      "key": "scaler",
                      "type": "file",
                      "src": [],
                      "description": "Fitted scaler (.joblib / .pkl)"
                    },
                    {
                      "key": "encoder",
                      "type": "file",
                      "src": [],
                      "description": "Label encoder (.joblib / .pkl)"
                    }
                  ]
                }
              }
            },
            {
              "name": "Hidden Trigger",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/poisoning",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "poisoning"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "structured",
                      "type": "text"
                    },
                    {
                      "key": "attack",
                      "value": "hidden_trigger",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"target_class\":0,\"source_class\":1,\"trigger_features\":\"-1\",\"trigger_value\":1.0,\"feature_layer\":-2,\"learning_rate\":0.01,\"max_iter\":200,\"htb_batch_size\":32,\"poison_fraction\":0.10,\"nb_epochs\":8,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "columns_to_drop",
                      "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                      "type": "text",
                      "description": "Comma-separated columns to drop before scaling"
                    },
                    {
                      "key": "label_col",
                      "value": "label",
                      "type": "text",
                      "description": "Ground-truth column"
                    },
                    {
                      "key": "label_binary_col",
                      "value": "",
                      "type": "text",
                      "description": "Optional binary label column"
                    },
                    {
                      "key": "dataset",
                      "type": "file",
                      "src": [],
                      "description": "Tabular dataset (.csv)"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5)"
                    },
                    {
                      "key": "scaler",
                      "type": "file",
                      "src": [],
                      "description": "Fitted scaler (.joblib / .pkl)"
                    },
                    {
                      "key": "encoder",
                      "type": "file",
                      "src": [],
                      "description": "Label encoder (.joblib / .pkl)"
                    }
                  ]
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Image",
      "description": "Image attacks — built-in MNIST / CIFAR-10 or a class-per-folder ZIP.",
      "item": [
        {
          "name": "Evasion",
          "description": "Adversarial inputs that fool the model at inference time.",
          "item": [
            {
              "name": "White-box (gradient access)",
              "item": [
                {
                  "name": "FGSM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "fgsm",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "PGD",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "pgd",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03,\"eps_step\":0.01,\"max_iter\":40}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "BIM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "bim",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03,\"eps_step\":0.01,\"max_iter\":10}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "DeepFool",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "deepfool",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":50}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "JSMA",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "jsma",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"theta\":0.1,\"gamma\":0.1}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "APGD",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "apgd",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03,\"max_iter\":40}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "CW",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/whitebox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "whitebox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "cw",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"confidence\":0.0,\"learning_rate\":0.01,\"binary_search_steps\":5,\"max_iter\":20}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            {
              "name": "Black-box (decision-only)",
              "item": [
                {
                  "name": "ZOO",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/blackbox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "blackbox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "zoo",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":50,\"nb_parallel\":10}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "Boundary",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/blackbox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "blackbox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "boundary",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":2500,\"epsilon\":0.01}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "HopSkipJump",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/blackbox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "blackbox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "hsj",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":20,\"max_eval\":10000}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            {
              "name": "Grey-box (gradients on surrogate)",
              "item": [
                {
                  "name": "FGSM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "fgsm",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "PGD",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "pgd",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03,\"eps_step\":0.01,\"max_iter\":40}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "BIM",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "bim",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03,\"eps_step\":0.01,\"max_iter\":10}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "DeepFool",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "deepfool",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"max_iter\":50}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "JSMA",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "jsma",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"theta\":0.1,\"gamma\":0.1}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "APGD",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "apgd",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"eps\":0.03,\"max_iter\":40}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                },
                {
                  "name": "CW",
                  "request": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{baseUrl}}/api/attack/evasion/greybox",
                      "host": [
                        "{{baseUrl}}"
                      ],
                      "path": [
                        "api",
                        "attack",
                        "evasion",
                        "greybox"
                      ]
                    },
                    "body": {
                      "mode": "formdata",
                      "formdata": [
                        {
                          "key": "data_type",
                          "value": "image",
                          "type": "text"
                        },
                        {
                          "key": "attack",
                          "value": "cw",
                          "type": "text"
                        },
                        {
                          "key": "params",
                          "value": "{\"confidence\":0.0,\"learning_rate\":0.01,\"binary_search_steps\":5,\"max_iter\":20}",
                          "type": "text"
                        },
                        {
                          "key": "source",
                          "value": "mnist",
                          "type": "text",
                          "description": "mnist · cifar10 · zip"
                        },
                        {
                          "key": "limit",
                          "value": "200",
                          "type": "text",
                          "description": "Max samples to use"
                        },
                        {
                          "key": "model",
                          "type": "file",
                          "src": [],
                          "description": "Keras model (.h5) — optional for extraction"
                        }
                      ]
                    }
                  }
                }
              ]
            }
          ]
        },
        {
          "name": "Inference (Membership)",
          "description": "Test whether the model leaks its training-set membership.",
          "item": [
            {
              "name": "MIA · Random Forest meta-classifier",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/inference",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "inference"
                  ]
                },
                "description": "Rule-Based + Black-Box MIA run in parallel. Change `attack_model_type` to gb or lr to swap the meta-classifier.",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "image",
                      "type": "text"
                    },
                    {
                      "key": "attack_model_type",
                      "value": "rf",
                      "type": "text",
                      "description": "rf · gb · lr"
                    },
                    {
                      "key": "params",
                      "value": "{\"split_ratio\":0.7,\"max_samples\":500,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "source",
                      "value": "mnist",
                      "type": "text",
                      "description": "mnist · cifar10 · zip"
                    },
                    {
                      "key": "limit",
                      "value": "200",
                      "type": "text",
                      "description": "Max samples to use"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5) — optional for extraction"
                    }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Extraction (CopycatCNN)",
          "description": "Train a stolen ('thieved') copy of the model from victim queries.",
          "item": [
            {
              "name": "CopycatCNN",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/extraction",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "extraction"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "image",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"nb_stolen\":200,\"nb_epochs\":3,\"batch_size\":32,\"use_probability\":true}",
                      "type": "text"
                    },
                    {
                      "key": "source",
                      "value": "mnist",
                      "type": "text",
                      "description": "mnist · cifar10 · zip"
                    },
                    {
                      "key": "limit",
                      "value": "200",
                      "type": "text",
                      "description": "Max samples to use"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5) — optional for extraction"
                    }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Poisoning",
          "description": "Inject malicious training samples, retrain a clone, measure ASR.",
          "item": [
            {
              "name": "Backdoor",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/poisoning",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "poisoning"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "image",
                      "type": "text"
                    },
                    {
                      "key": "attack",
                      "value": "backdoor",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"target_class\":0,\"patch_size\":4,\"patch_value\":1.0,\"patch_position\":\"bottom-right\",\"poison_fraction\":0.10,\"nb_epochs\":5,\"batch_size\":32,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "source",
                      "value": "mnist",
                      "type": "text",
                      "description": "mnist · cifar10 · zip"
                    },
                    {
                      "key": "limit",
                      "value": "200",
                      "type": "text",
                      "description": "Max samples to use"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5) — optional for extraction"
                    }
                  ]
                }
              }
            },
            {
              "name": "Clean-Label",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/poisoning",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "poisoning"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "image",
                      "type": "text"
                    },
                    {
                      "key": "attack",
                      "value": "clean_label",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"target_class\":0,\"patch_size\":4,\"patch_value\":1.0,\"patch_position\":\"bottom-right\",\"poison_fraction\":0.10,\"pp_poison\":0.33,\"eps\":0.3,\"eps_step\":0.1,\"max_iter\":100,\"nb_epochs\":5,\"batch_size\":32,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "source",
                      "value": "mnist",
                      "type": "text",
                      "description": "mnist · cifar10 · zip"
                    },
                    {
                      "key": "limit",
                      "value": "200",
                      "type": "text",
                      "description": "Max samples to use"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5) — optional for extraction"
                    }
                  ]
                }
              }
            },
            {
              "name": "Hidden Trigger",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/attack/poisoning",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "attack",
                    "poisoning"
                  ]
                },
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "data_type",
                      "value": "image",
                      "type": "text"
                    },
                    {
                      "key": "attack",
                      "value": "hidden_trigger",
                      "type": "text"
                    },
                    {
                      "key": "params",
                      "value": "{\"target_class\":0,\"source_class\":1,\"patch_size\":4,\"patch_value\":1.0,\"patch_position\":\"bottom-right\",\"feature_layer\":-2,\"learning_rate\":0.01,\"max_iter\":200,\"htb_batch_size\":32,\"poison_fraction\":0.10,\"nb_epochs\":5,\"seed\":42}",
                      "type": "text"
                    },
                    {
                      "key": "source",
                      "value": "mnist",
                      "type": "text",
                      "description": "mnist · cifar10 · zip"
                    },
                    {
                      "key": "limit",
                      "value": "200",
                      "type": "text",
                      "description": "Max samples to use"
                    },
                    {
                      "key": "model",
                      "type": "file",
                      "src": [],
                      "description": "Keras model (.h5) — optional for extraction"
                    }
                  ]
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Adversarial Penetration Test",
      "description": "ε-sweep across FGSM / PGD / BIM with a pass/fail verdict. Structured data only.",
      "item": [
        {
          "name": "Full sweep (ZIP download — default)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/pentest",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "pentest"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "data_type",
                  "value": "structured",
                  "type": "text",
                  "description": "Adversarial Penetration Test is structured-only."
                },
                {
                  "key": "use_fgsm",
                  "value": "true",
                  "type": "text"
                },
                {
                  "key": "use_pgd",
                  "value": "true",
                  "type": "text"
                },
                {
                  "key": "use_bim",
                  "value": "true",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"eps_step\":0.05}",
                  "type": "text",
                  "description": "Optional STIX metadata: model_id, dataset, norm"
                },
                {
                  "key": "columns_to_drop",
                  "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                  "type": "text",
                  "description": "Comma-separated columns to drop before scaling"
                },
                {
                  "key": "label_col",
                  "value": "label",
                  "type": "text",
                  "description": "Ground-truth column"
                },
                {
                  "key": "label_binary_col",
                  "value": "",
                  "type": "text",
                  "description": "Optional binary label column"
                },
                {
                  "key": "dataset",
                  "type": "file",
                  "src": [],
                  "description": "Tabular dataset (.csv)"
                },
                {
                  "key": "model",
                  "type": "file",
                  "src": [],
                  "description": "Keras model (.h5)"
                },
                {
                  "key": "scaler",
                  "type": "file",
                  "src": [],
                  "description": "Fitted scaler (.joblib / .pkl)"
                },
                {
                  "key": "encoder",
                  "type": "file",
                  "src": [],
                  "description": "Label encoder (.joblib / .pkl)"
                }
              ]
            }
          }
        },
        {
          "name": "Full sweep (JSON envelope)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/pentest?format=json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "pentest"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "json"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "data_type",
                  "value": "structured",
                  "type": "text",
                  "description": "Adversarial Penetration Test is structured-only."
                },
                {
                  "key": "use_fgsm",
                  "value": "true",
                  "type": "text"
                },
                {
                  "key": "use_pgd",
                  "value": "true",
                  "type": "text"
                },
                {
                  "key": "use_bim",
                  "value": "true",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"eps_step\":0.05}",
                  "type": "text",
                  "description": "Optional STIX metadata: model_id, dataset, norm"
                },
                {
                  "key": "columns_to_drop",
                  "value": "flow_id,src_ip,dst_ip,src_port,dst_port",
                  "type": "text",
                  "description": "Comma-separated columns to drop before scaling"
                },
                {
                  "key": "label_col",
                  "value": "label",
                  "type": "text",
                  "description": "Ground-truth column"
                },
                {
                  "key": "label_binary_col",
                  "value": "",
                  "type": "text",
                  "description": "Optional binary label column"
                },
                {
                  "key": "dataset",
                  "type": "file",
                  "src": [],
                  "description": "Tabular dataset (.csv)"
                },
                {
                  "key": "model",
                  "type": "file",
                  "src": [],
                  "description": "Keras model (.h5)"
                },
                {
                  "key": "scaler",
                  "type": "file",
                  "src": [],
                  "description": "Fitted scaler (.joblib / .pkl)"
                },
                {
                  "key": "encoder",
                  "type": "file",
                  "src": [],
                  "description": "Label encoder (.joblib / .pkl)"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Object detection",
      "description": "ART evasion attacks against object detectors (Faster R-CNN, YOLOv5) on a built-in COCO sample or your own JPEG/PNG images. Start with *Catalog* (models, attacks + parameter ranges, compatibility, sample image ids). Same job contract as every family: slow runs return `202` — use the Jobs folder.",
      "item": [
        {
          "name": "Catalog (models · attacks · compatibility · sample images)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/object-detection/catalog",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "object-detection",
                "catalog"
              ]
            }
          }
        },
        {
          "name": "Sample image (thumbnail)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/object-detection/images/000000206487.jpg?thumb=true",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "object-detection",
                "images",
                "000000206487.jpg"
              ],
              "query": [
                {
                  "key": "thumb",
                  "value": "true"
                }
              ]
            }
          }
        },
        {
          "name": "FGSM (L∞) (ZIP download — default)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ]
            },
            "description": "One-step L∞ sign-gradient perturbation of the whole image that increases the detector's training loss. Cheap baseline; an untargeted loss increase does not guarantee that any particular object disappears.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "fgsm",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"eps\": 8}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "images",
                  "value": "000000206487.jpg,000000118209.jpg",
                  "type": "text",
                  "description": "Built-in COCO sample ids (see the catalog). Empty + no uploads → first 4 samples."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "PGD (L∞) (ZIP download — default)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ]
            },
            "description": "Iterative L∞ projected gradient descent on the detection loss — the attack in ART's official YOLOv3/v5 example. Stronger than FGSM at the same budget.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "pgd",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"eps\": 8, \"eps_step\": 2, \"max_iter\": 10}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "images",
                  "value": "000000206487.jpg,000000118209.jpg",
                  "type": "text",
                  "description": "Built-in COCO sample ids (see the catalog). Empty + no uploads → first 4 samples."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "DPatch (ZIP download — default)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ]
            },
            "description": "Learns one universal rectangular patch (shared across all images) that disrupts the detector; pasted at the top-left corner. Unbounded inside the patch, zero change outside.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "dpatch",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"patch_size\": 64, \"learning_rate\": 8, \"max_iter\": 40}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "images",
                  "value": "000000206487.jpg,000000118209.jpg",
                  "type": "text",
                  "description": "Built-in COCO sample ids (see the catalog). Empty + no uploads → first 4 samples."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "RobustDPatch (ZIP download — default)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ]
            },
            "description": "DPatch with expectation-over-transformation: the patch is optimised under random crops, brightness changes and (optionally) 90° rotations so it survives mild image changes. Not a claim of physical-world robustness.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "robust_dpatch",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"patch_size\": 64, \"patch_x\": 16, \"patch_y\": 16, \"learning_rate\": 8, \"max_iter\": 30, \"sample_size\": 2, \"brightness\": 0.2, \"crop\": 8, \"rotations\": false}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "images",
                  "value": "000000206487.jpg,000000118209.jpg",
                  "type": "text",
                  "description": "Built-in COCO sample ids (see the catalog). Empty + no uploads → first 4 samples."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "Adversarial Patch (PyTorch) (ZIP download — default)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ]
            },
            "description": "Learns a square patch with Adam under random rotation/scale; applied at a fixed location. Untargeted: maximises the detector's loss against its own clean predictions.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "adv_patch",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"patch_size\": 64, \"patch_x\": 16, \"patch_y\": 16, \"learning_rate\": 8, \"max_iter\": 40, \"rotation_max\": 10}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "images",
                  "value": "000000206487.jpg,000000118209.jpg",
                  "type": "text",
                  "description": "Built-in COCO sample ids (see the catalog). Empty + no uploads → first 4 samples."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "PGD (JSON envelope)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection?format=json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "json"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "pgd",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"eps\": 8, \"eps_step\": 2, \"max_iter\": 10}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "images",
                  "value": "000000206487.jpg,000000118209.jpg",
                  "type": "text",
                  "description": "Built-in COCO sample ids (see the catalog). Empty + no uploads → first 4 samples."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "PGD on your own images (attach files)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/attack/object-detection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "attack",
                "object-detection"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "model",
                  "value": "yolov5s",
                  "type": "text",
                  "description": "Built-in detector: frcnn_mobilenet_v3_320 · frcnn_resnet50_fpn · yolov5s"
                },
                {
                  "key": "attack",
                  "value": "pgd",
                  "type": "text"
                },
                {
                  "key": "params",
                  "value": "{\"eps\": 8, \"eps_step\": 2, \"max_iter\": 10}",
                  "type": "text",
                  "description": "eps / eps_step / learning_rate are in 0–255 pixel units on every model (8 = 8/255 on [0,1] models)."
                },
                {
                  "key": "label_source",
                  "value": "ground_truth",
                  "type": "text",
                  "description": "ground_truth · clean_predictions"
                },
                {
                  "key": "score_threshold",
                  "value": "0.5",
                  "type": "text"
                },
                {
                  "key": "seed",
                  "value": "0",
                  "type": "text"
                },
                {
                  "key": "images",
                  "value": "",
                  "type": "text",
                  "description": "Leave empty to attack only the uploaded images."
                },
                {
                  "key": "files",
                  "type": "file",
                  "src": [],
                  "description": "Your JPEG/PNG image(s) — repeat the `files` key for several."
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Jobs (async attacks)",
      "description": "If an attack endpoint returns `202` instead of your result, copy its `job_id` into the `jobId` collection variable and use these requests to poll status, fetch the finished result, or cancel it.",
      "item": [
        {
          "name": "Poll job status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/jobs/{{jobId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "jobs",
                "{{jobId}}"
              ]
            }
          }
        },
        {
          "name": "Fetch job result (ZIP)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/jobs/{{jobId}}/result?format=zip",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "jobs",
                "{{jobId}}",
                "result"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "zip"
                }
              ]
            }
          }
        },
        {
          "name": "Fetch job result (JSON)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/jobs/{{jobId}}/result?format=json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "jobs",
                "{{jobId}}",
                "result"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "json"
                }
              ]
            }
          }
        },
        {
          "name": "Cancel job",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/jobs/{{jobId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "jobs",
                "{{jobId}}"
              ]
            }
          }
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://127.0.0.1:8000",
      "type": "string",
      "description": "API root. Override per-environment if you're hitting a remote deployment. This deployment uses a self-signed cert (no domain points at the server yet) — in Postman, turn off Settings → General → 'SSL certificate verification' or you'll get a self-signed-cert error on every request."
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string",
      "description": "Your X-API-Key. Every request in this collection sends it automatically once set."
    },
    {
      "key": "jobId",
      "value": "",
      "type": "string",
      "description": "Paste a job_id here after an attack request returns 202 (see the Jobs folder)."
    }
  ],
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  }
}
