---
title: "Get topology by ID"
method: GET
path: "/api/v1/topologies/{id}"
tags: ["Topologies"]
---

# Get topology by ID

`GET /api/v1/topologies/{id}`

## Request

- Base URL: `https://app.scanopy.net`
- URL: `https://app.scanopy.net/api/v1/topologies/{id}`
- Auth: one of:
  - API key in header `Authorization`
  - API key in cookie `session_id`

## Path parameters

- `id` string, uuid, required

## Response `200`

Topology found

- ApiResponseTopology: Envelope for a successful response. Failures are sent with a non-2xx status and an `ApiErrorResponse` body instead.
  - `data` object: The result payload. Omitted on failure.
    - `options` TopologyOptions, required
      - `local` TopologyLocalOptions, required: Viewer settings. `hide_edge_types` and `tag_filter` are per view; the rest apply to every view.
        - `bundle_edges` boolean: Collapse parallel edges between the same pair of nodes into one.
        - `hide_edge_types` object: Edge types to leave out of the drawing, per view. A view with no entry hides the edge types that view hides by default. Unknown edge types and views are dropped on read rather than failing the topology.
        - `no_fade_edges` boolean: Keep unrelated edges at full opacity when something is selected.
        - `show_minimap` boolean: Show the minimap.
        - `tag_filter` object: Tags whose entities are left out, per view. A view with no entry hides nothing by tag.
      - `request` TopologyRequestOptions, required
        - `container_rules` object: Rules deciding how nodes are grouped into containers.
        - `element_rules` IdentifiedRuleElementRule[]: Rules deciding how entities are placed and inlined within containers. A missing field takes the rules for an organization with no stated use case.
          - `id` string, uuid, required: Server-assigned unique identifier.
          - `rule` union, required: Rules that organize nodes within a container into sub-groups.
            - object: One subcontainer per group of service categories.
              - …
            - object: One subcontainer per group of tags.
              - …
            - 'ByHypervisor'
            - 'ByContainerRuntime'
            - 'ByStack'
            - 'ByDeviceType': Groups hosts by device type (servers, workstations, printers, …) into per-type subcontainers. Hosts with no identified device type stay ungrouped.
            - '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.
        - `element_sort` object: How nodes are ordered inside containers, per view. A view with no entry uses the layout's own order.
        - `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.
    - `site_id` string, uuid, required: The site this entity belongs to.
    - `created_at` string, date-time, required: When this record was first created.
    - `id` string, uuid, required: Server-assigned unique identifier.
    - `updated_at` string, date-time, required: When this record was last modified.
  - `error` string, nullable: Not sent on a successful response. Failure messages arrive in an `ApiErrorResponse`.
  - `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: Always `true` on a successful response.

## Other responses

- `404`: Topology not found

## Changes

- **2026-10-31** `60db2dbbed33`: 1 warning, 2 info
  - added the new `Confirmation` enum value to the `data/allOf[#/components/schemas/TopologyBase]/options/request/hide_metadata_values/additionalProperties/additionalProperties/propertyNames/` response property for the response status `200`
  - the `container_rules` response's property default value changed from `{"Application":[{"id":"e2ea28a8-ab66-4f00-9cc0-9038c5c79d47","rule":{"ByApplication":{"tag_ids":[]}}}],"L2Physical":[{"id":"a665ec34-ca4a-40b7-982c-b31003a319ba","rule":"ByHost"}],"L3Logical":[{"id":"47177f84-3fda-46c7-b81b-008293b81188","rule":"BySubnet"},{"id":"eb47e951-9a71-4b3c-806d-63b5932efb95","rule":"MergeContainerBridges"}],"Workloads":[{"id":"a665ec34-ca4a-40b7-982c-b31003a319ba","rule":"ByHost"}]}` to `{"Application":[{"id":"8359cdc9-f787-4e3a-be29-36c093779516","rule":{"ByApplication":{"tag_ids":[]}}}],"L2Physical":[{"id":"8589acf6-db61-4360-a96f-1a5de1a70312","rule":"ByHost"}],"L3Logical":[{"id":"043869dd-efe5-40a6-a4db-2c504bc08dd2","rule":"BySubnet"},{"id":"10d6e863-9d9a-43b8-8720-d3adb900d8e6","rule":"MergeContainerBridges"}],"Workloads":[{"id":"8589acf6-db61-4360-a96f-1a5de1a70312","rule":"ByHost"}]}` for the status `200`
  - the `element_rules` response's property default value changed from `{"id":"bc09dc49-8389-41cd-b771-ddb43dc9da88","rule":"ByTrunkPort"}, {"id":"8e30beaa-77d4-4447-989e-6305deb6bb03","rule":"ByVLAN"}, {"id":"12c5994d-26ca-4f68-8eca-0e8c42061489","rule":"ByPortOpStatus"}, {"id":"8642b21c-1575-424c-ae5b-abf4c5467381","rule":{"ByServiceCategory":{"categories":["NetworkCore","NetworkAccess","NetworkAppliance","RemoteAccess","Workstation","Mobile","IoT","Printer","OpenPorts","NetworkIdentities"],"is_infra_rule":true,"title":"Infrastructure"}}}, {"id":"339650ec-9d74-40ef-b4f8-5800d7e9375c","rule":{"ByTag":{"tag_ids":[],"title":null}}}, {"id":"9868fe8a-440f-45cb-a67d-874b3f4b8454","rule":"ByDeviceType"}, {"id":"93db478d-f448-4766-94bc-732bfd624eaa","rule":"ByHypervisor"}, {"id":"692ca573-af2d-4a44-901c-5a9377562c2e","rule":"ByContainerRuntime"}, {"id":"4c35f319-bb9a-4d89-bc37-e157b2498c67","rule":"ByStack"}` to `{"id":"e687f3af-643e-4166-9372-480c613b2c59","rule":"ByTrunkPort"}, {"id":"59bae1af-48ae-4a9d-8901-742a5962237e","rule":"ByVLAN"}, {"id":"7d098cb5-a1f3-4b44-b2ad-eb84c9f3abce","rule":"ByPortOpStatus"}, {"id":"fa92d20c-4c99-4385-b7e5-554e2f705091","rule":{"ByServiceCategory":{"categories":["NetworkCore","NetworkAccess","NetworkAppliance","RemoteAccess","Workstation","Mobile","IoT","Printer","OpenPorts","NetworkIdentities"],"is_infra_rule":true,"title":"Infrastructure"}}}, {"id":"dd6508db-c3f5-47a8-b22d-96a381b5cf75","rule":{"ByTag":{"tag_ids":[],"title":null}}}, {"id":"8768cc4d-f427-41ea-9276-2bd74162d7e0","rule":"ByDeviceType"}, {"id":"599c0eca-c956-4de2-b72a-6c1208350cbe","rule":"ByHypervisor"}, {"id":"ab9ef755-540c-41f2-80ee-b0b30bcb57be","rule":"ByContainerRuntime"}, {"id":"81c086c7-f636-4ef8-bc20-cba88bf034f1","rule":"ByStack"}` for the status `200`
- …earlier changes not shown

[Operation history](https://skmtc.dev/scanopy/apis/scanopy-api/changes/api/v1/topologies/:id/get.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.dev/scanopy/apis/scanopy-api/revisions/966ba786bdb5?raw)
