---
title: "PUT /api/v1/topology/{id}"
method: PUT
path: "/api/v1/topology/{id}"
tags: ["Topologies", "internal"]
---

# PUT /api/v1/topology/{id}

`PUT /api/v1/topology/{id}`

## Path parameters

- `id` string, uuid, required

## Request body

- Topology
  - `network_id` string, uuid, required
  - `options` TopologyOptions, required
    - `local` TopologyLocalOptions, required
      - `bundle_edges` boolean
      - `hide_edge_types` EdgeTypeDiscriminants[]
      - `no_fade_edges` boolean
      - `show_minimap` boolean
      - `tag_filter` TopologyTagFilter — Filter settings for hiding entities by tag in topology visualization.
        - `hidden_host_tag_ids` string[] — Host tag IDs to hide (hosts with these tags will fade out)
        - `hidden_service_tag_ids` string[] — Service tag IDs to hide (services with these tags will be hidden from nodes)
        - `hidden_subnet_tag_ids` string[] — Subnet tag IDs to hide (subnets with these tags will fade out)
    - `request` TopologyRequestOptions, required
      - `container_rules` object
      - `element_rules` IdentifiedRuleElementRule[]
        - `id` string, uuid, required
        - `rule` union, required — Rules that organize nodes within a container into sub-groups.
          - object
            - `ByServiceCategory` object, required
              - …
          - object
            - `ByTag` object, required
              - …
          - 'ByHypervisor'
          - 'ByContainerRuntime'
          - 'ByStack'
          - 'ByTrunkPort' — Groups trunk ports (ports with tagged VLANs) into a "Trunk Ports" subcontainer. Higher priority than ByVLAN — prevents trunk ports from being grouped by VLAN.
          - 'ByVLAN' — Groups access ports by their native VLAN ID into per-VLAN subcontainers.
          - 'ByPortOpStatus' — Groups ports by operational status (Up, Down, etc.) into per-status subcontainers.
      - `hide_entities` object — Entity types hidden per view. Keyed by TopologyView, values are entity types (matching those declared as container/element/inline in the view's element_config). Hides every manifestation of the entity in that view — element nodes, container nodes, and inline rows on element cards. Supersedes the old `hide_ports` (L3-only, inline-only).
      - `hide_metadata_values` object — Generic per-(view, entity, filter) hide-set for metadata filters (Category, Virtualization, etc). Supersedes the old `hide_service_categories`; nested so JSON keys are strings all the way down.
  - `created_at` string, date-time, required
  - `id` string, uuid, required
  - `updated_at` string, date-time, required

## Response `200`

Topology updated

- ApiResponseTopology
  - `data` object
    - `network_id` string, uuid, required
    - `options` TopologyOptions, required
      - `local` TopologyLocalOptions, required
        - `bundle_edges` boolean
        - `hide_edge_types` EdgeTypeDiscriminants[]
        - `no_fade_edges` boolean
        - `show_minimap` boolean
        - `tag_filter` TopologyTagFilter — Filter settings for hiding entities by tag in topology visualization.
          - `hidden_host_tag_ids` string[] — Host tag IDs to hide (hosts with these tags will fade out)
          - `hidden_service_tag_ids` string[] — Service tag IDs to hide (services with these tags will be hidden from nodes)
          - `hidden_subnet_tag_ids` string[] — Subnet tag IDs to hide (subnets with these tags will fade out)
      - `request` TopologyRequestOptions, required
        - `container_rules` object
        - `element_rules` IdentifiedRuleElementRule[]
          - `id` string, uuid, required
          - `rule` union, required — Rules that organize nodes within a container into sub-groups.
            - object
              - …
            - object
              - …
            - 'ByHypervisor'
            - 'ByContainerRuntime'
            - 'ByStack'
            - 'ByTrunkPort' — Groups trunk ports (ports with tagged VLANs) into a "Trunk Ports" subcontainer. Higher priority than ByVLAN — prevents trunk ports from being grouped by VLAN.
            - 'ByVLAN' — Groups access ports by their native VLAN ID into per-VLAN subcontainers.
            - 'ByPortOpStatus' — Groups ports by operational status (Up, Down, etc.) into per-status subcontainers.
        - `hide_entities` object — Entity types hidden per view. Keyed by TopologyView, values are entity types (matching those declared as container/element/inline in the view's element_config). Hides every manifestation of the entity in that view — element nodes, container nodes, and inline rows on element cards. Supersedes the old `hide_ports` (L3-only, inline-only).
        - `hide_metadata_values` object — Generic per-(view, entity, filter) hide-set for metadata filters (Category, Virtualization, etc). Supersedes the old `hide_service_categories`; nested so JSON keys are strings all the way down.
    - `created_at` string, date-time, required
    - `id` string, uuid, required
    - `updated_at` string, date-time, required
  - `error` string, nullable
  - `meta` ApiMeta, required — API metadata included in all responses
    - `api_version` integer, required — API version (integer, increments on breaking changes)
    - `server_version` string, required — Server version (semver)
  - `success` boolean, required

## Other responses

- `404` — Topology not found

## Changes

- **2026-07-07** `d8684743dffa` — 4 info
  - the `container_rules` request property default value changed from `{"Application":[{"id":"b5493bd6-daeb-40c3-a567-7c83c74fe416","rule":{"ByApplication":{"tag_ids":[]}}}],"L2Physical":[{"id":"5b9911b1-4593-4d30-8c41-afe98d842f74","rule":"ByHost"}],"L3Logical":[{"id":"990a8a2d-ebd5-42b4-b6ca-b41f1cb2140f","rule":"BySubnet"},{"id":"1990757a-7f25-422f-a4e6-4aac24431f1c","rule":"MergeContainerBridges"}],"Workloads":[{"id":"5b9911b1-4593-4d30-8c41-afe98d842f74","rule":"ByHost"}]}` to `{"Application":[{"id":"d194d20b-5bdc-4bd4-aab9-db7a5fee16b4","rule":{"ByApplication":{"tag_ids":[]}}}],"L2Physical":[{"id":"b3a0eb01-6438-40a3-b83e-4eeb0fe4a4d4","rule":"ByHost"}],"L3Logical":[{"id":"146fc5ae-fc46-4c3a-a4b5-35a94ecc8504","rule":"BySubnet"},{"id":"23c3b514-4a1e-495e-aaf9-9557c855b7f9","rule":"MergeContainerBridges"}],"Workloads":[{"id":"b3a0eb01-6438-40a3-b83e-4eeb0fe4a4d4","rule":"ByHost"}]}`
  - the `element_rules` request property default value changed from `{"id":"e1c0cb18-5c29-4abd-98ca-52befc17b7d4","rule":"ByTrunkPort"}, {"id":"c365a6c9-b232-40fe-a729-7686ba47709d","rule":"ByVLAN"}, {"id":"26d05cf5-161f-4c1d-b667-483165a6304e","rule":"ByPortOpStatus"}, {"id":"4c4574bd-4010-4d8d-92fb-96d4ae1b9660","rule":{"ByServiceCategory":{"categories":["NetworkCore","NetworkAccess","RemoteAccess","Workstation","Mobile","Printer","OpenPorts"],"is_infra_rule":true,"title":"Infrastructure"}}}, {"id":"0620ab6f-21dc-4bd6-9dba-21d41f206291","rule":{"ByTag":{"tag_ids":[],"title":null}}}, {"id":"c57d3ece-917c-45bc-b511-06696cd03828","rule":"ByHypervisor"}, {"id":"4b833bb7-459f-4fb8-99a8-28806080b8a4","rule":"ByContainerRuntime"}, {"id":"3ded2997-e3ab-488d-b4f6-ba371deb8396","rule":"ByStack"}` to `{"id":"564342d5-fd33-47d1-9c85-8c6496a9a365","rule":"ByTrunkPort"}, {"id":"2762b355-2efa-49fc-9abf-c4d9f88c722a","rule":"ByVLAN"}, {"id":"d4d0250a-a672-4787-a929-cfc8ff3c5a8c","rule":"ByPortOpStatus"}, {"id":"d44efc91-33d4-4acd-82d3-c4d146a47786","rule":{"ByServiceCategory":{"categories":["NetworkCore","NetworkAccess","RemoteAccess","Workstation","Mobile","Printer","OpenPorts"],"is_infra_rule":true,"title":"Infrastructure"}}}, {"id":"991dcb08-3f68-4cda-beec-9d61b52a4cb8","rule":{"ByTag":{"tag_ids":[],"title":null}}}, {"id":"f4cbb217-290d-4f62-9de1-2cbbe8802eaa","rule":"ByHypervisor"}, {"id":"9e8ce81e-8c32-44c9-b9ef-1e6a9601bcfd","rule":"ByContainerRuntime"}, {"id":"7ce4fa9a-eff3-4eba-bbef-da190713270a","rule":"ByStack"}`
  - the `container_rules` response's property default value changed from `{"Application":[{"id":"b5493bd6-daeb-40c3-a567-7c83c74fe416","rule":{"ByApplication":{"tag_ids":[]}}}],"L2Physical":[{"id":"5b9911b1-4593-4d30-8c41-afe98d842f74","rule":"ByHost"}],"L3Logical":[{"id":"990a8a2d-ebd5-42b4-b6ca-b41f1cb2140f","rule":"BySubnet"},{"id":"1990757a-7f25-422f-a4e6-4aac24431f1c","rule":"MergeContainerBridges"}],"Workloads":[{"id":"5b9911b1-4593-4d30-8c41-afe98d842f74","rule":"ByHost"}]}` to `{"Application":[{"id":"d194d20b-5bdc-4bd4-aab9-db7a5fee16b4","rule":{"ByApplication":{"tag_ids":[]}}}],"L2Physical":[{"id":"b3a0eb01-6438-40a3-b83e-4eeb0fe4a4d4","rule":"ByHost"}],"L3Logical":[{"id":"146fc5ae-fc46-4c3a-a4b5-35a94ecc8504","rule":"BySubnet"},{"id":"23c3b514-4a1e-495e-aaf9-9557c855b7f9","rule":"MergeContainerBridges"}],"Workloads":[{"id":"b3a0eb01-6438-40a3-b83e-4eeb0fe4a4d4","rule":"ByHost"}]}` for the status `200`
  - the `element_rules` response's property default value changed from `{"id":"e1c0cb18-5c29-4abd-98ca-52befc17b7d4","rule":"ByTrunkPort"}, {"id":"c365a6c9-b232-40fe-a729-7686ba47709d","rule":"ByVLAN"}, {"id":"26d05cf5-161f-4c1d-b667-483165a6304e","rule":"ByPortOpStatus"}, {"id":"4c4574bd-4010-4d8d-92fb-96d4ae1b9660","rule":{"ByServiceCategory":{"categories":["NetworkCore","NetworkAccess","RemoteAccess","Workstation","Mobile","Printer","OpenPorts"],"is_infra_rule":true,"title":"Infrastructure"}}}, {"id":"0620ab6f-21dc-4bd6-9dba-21d41f206291","rule":{"ByTag":{"tag_ids":[],"title":null}}}, {"id":"c57d3ece-917c-45bc-b511-06696cd03828","rule":"ByHypervisor"}, {"id":"4b833bb7-459f-4fb8-99a8-28806080b8a4","rule":"ByContainerRuntime"}, {"id":"3ded2997-e3ab-488d-b4f6-ba371deb8396","rule":"ByStack"}` to `{"id":"564342d5-fd33-47d1-9c85-8c6496a9a365","rule":"ByTrunkPort"}, {"id":"2762b355-2efa-49fc-9abf-c4d9f88c722a","rule":"ByVLAN"}, {"id":"d4d0250a-a672-4787-a929-cfc8ff3c5a8c","rule":"ByPortOpStatus"}, {"id":"d44efc91-33d4-4acd-82d3-c4d146a47786","rule":{"ByServiceCategory":{"categories":["NetworkCore","NetworkAccess","RemoteAccess","Workstation","Mobile","Printer","OpenPorts"],"is_infra_rule":true,"title":"Infrastructure"}}}, {"id":"991dcb08-3f68-4cda-beec-9d61b52a4cb8","rule":{"ByTag":{"tag_ids":[],"title":null}}}, {"id":"f4cbb217-290d-4f62-9de1-2cbbe8802eaa","rule":"ByHypervisor"}, {"id":"9e8ce81e-8c32-44c9-b9ef-1e6a9601bcfd","rule":"ByContainerRuntime"}, {"id":"7ce4fa9a-eff3-4eba-bbef-da190713270a","rule":"ByStack"}` for the status `200`
- …earlier changes not shown

[Full history](https://skmtc.dev/scanopy/apis/scanopy-api/changes/api/v1/topology/:id/put.md)

---

[API](https://skmtc.dev/scanopy/apis/scanopy-api.md) · [All operations](https://skmtc.dev/scanopy/apis/scanopy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/scanopy/scanopy-api/revisions/d8684743dffa/schema)
