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<token>

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

In: header

Query Parameters

network_id?string|null

Filter by network ID

Formatuuid
host_id?string|null

Filter by host ID

Formatuuid
ids?|null

Filter by specific entity IDs (for selective loading)

tag_ids?|null

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

search?string|null

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?null|ServiceOrderField

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

order_by?null|ServiceOrderField

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

order_direction?null|OrderDirection

Direction for order_by field (group_by always uses ASC).

ports?|null

Only services exposed on one of these port numbers.

protocol?null|TransportProtocol

Only services exposed over this transport protocol.

exclude_categories?|null

Exclude services belonging to these categories.

limit?integer|null

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

Formatint32
Range0 <= value <= 1000
offset?integer|null

Number of results to skip. Default: 0.

Formatint32
Range0 <= value
at?string|null

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

Formatdate-time
stale?boolean|null

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://loading/api/v1/services"
{
  "data": [
    {
      "bindings": [
        {
          "created_at": "2026-07-29T01:29:50.387941Z",
          "first_discovery_id": null,
          "id": "e15b9e07-fb0e-4c37-9bfe-ee91c49f85bd",
          "ip_address_id": "550e8400-e29b-41d4-a716-446655440005",
          "last_discovery_id": null,
          "last_seen_at": "2026-07-29T01:29:50.387941Z",
          "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-07-29T01:29:50.387941Z",
          "valid_from": "2026-07-29T01:29:50.387941Z",
          "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": "MySQL",
      "source": {
        "type": "Manual"
      },
      "tags": [],
      "updated_at": "2026-01-15T10:30:00Z",
      "valid_from": "2026-01-15T10:30:00Z",
      "valid_to": null,
      "virtualization": null
    }
  ],
  "meta": {
    "api_version": 1,
    "pagination": {
      "has_more": true,
      "limit": 50,
      "offset": 0,
      "total_count": 142
    },
    "server_version": "0.17.7"
  },
  "success": true,
  "error": "string"
}