ScanopyScanopy
Services

List all services

Returns all services the authenticated user has access to. Supports pagination via limit and offset query parameters, and ordering via group_by, order_by, and order_direction.

GET
/api/v1/services

Authorization

Authorization<token>

User API key (Bearer scp_u_...). Create in Platform > API Keys.

In: header

Query Parameters

network_ids?array<>|

Filter by network ID. Repeat the parameter to pass several.

host_ids?array<>|

Filter by host ID. Repeat the parameter to pass several.

ids?array<>|

Filter by specific entity IDs (for selective loading)

service_definitions?array<string>|

Only services with one of these definitions.

virtualization_service_ids?array<>|

Filter by the service containerizing this one. Repeat for several.

include_uncontainerized?|

true also returns services nothing containerizes. Set on its own it returns only those — the "Not Containerized" choice in the UI's filter.

tag_ids?array<>|

Filter by tag IDs (returns services that have ANY of the specified tags)

search?|

Free-text search. Case-insensitive substring match against the service's name and definition, and against the name of the host it runs on.

group_by?|

Primary ordering field (used for grouping). Always sorts ASC to keep groups together.

order_by?|

Secondary ordering field (sorting within groups or standalone sort).

order_direction?|

Direction for order_by field (group_by always uses ASC).

ports?array<>|

Only services exposed on one of these port numbers, over either protocol.

exclude_categories?array<>|

Exclude services belonging to these categories.

limit?|

Maximum number of results to return (1-1000, default: 50). Use 0 for no limit.

offset?|

Number of results to skip. Default: 0.

at?|

As-of timestamp (ISO 8601). When set, returns SCD2 state as of this instant (snapshot view) instead of live state.

stale?|

true returns only services discovery hasn't observed within their network's staleness window; false returns only those it has. Omit for both. Evaluated per row against the service's own network's window.

Response Body

application/json

curl -X GET "https://example.com/api/v1/services"
{
  "data": [
    {
      "bindings": [
        {
          "created_at": "2026-09-15T04:26:40.598273Z",
          "first_discovery_id": null,
          "id": "a781bec8-ad7e-4215-8900-6fa9ceedc9a3",
          "ip_address_id": "550e8400-e29b-41d4-a716-446655440005",
          "last_discovery_id": null,
          "last_seen_at": "2026-09-15T04:26:40.598273Z",
          "lineage_id": null,
          "network_id": "550e8400-e29b-41d4-a716-446655440002",
          "port_id": "550e8400-e29b-41d4-a716-446655440006",
          "service_id": "550e8400-e29b-41d4-a716-446655440007",
          "type": "Port",
          "updated_at": "2026-09-15T04:26:40.598273Z",
          "valid_from": "2026-09-15T04:26:40.598273Z",
          "valid_to": null
        }
      ],
      "created_at": "2026-01-15T10:30:00Z",
      "first_discovery_id": null,
      "host_id": "550e8400-e29b-41d4-a716-446655440003",
      "id": "550e8400-e29b-41d4-a716-446655440007",
      "last_discovery_id": null,
      "last_seen_at": "2026-01-15T10:30:00Z",
      "lineage_id": null,
      "name": "nginx",
      "network_id": "550e8400-e29b-41d4-a716-446655440002",
      "position": 0,
      "service_definition": "Immich",
      "source": {
        "type": "Manual"
      },
      "tags": [],
      "updated_at": "2026-01-15T10:30:00Z",
      "valid_from": "2026-01-15T10:30:00Z",
      "valid_to": null,
      "virtualization_metadata": null,
      "virtualization_service_id": null
    }
  ],
  "meta": {
    "api_version": 1,
    "pagination": {
      "has_more": true,
      "limit": 50,
      "offset": 0,
      "total_count": 142
    },
    "server_version": "0.17.14"
  },
  "success": true,
  "error": "string"
}