/systems - List systems

GET /systems

Get list of systems visible to the user based on hierarchical organization permissions. Supports filtering by name, type, creator, version, organization, and status.

Query String Examples:

  1. Single type filter: ?type=nsec
  2. Multiple types filter: ?type=nsec&type=ns8
  3. Multiple filters combined: ?type=nsec&status=online&status=deleted&version=8.0
  4. With pagination and sorting: ?page=1&page_size=50&sort_by=name&sort_direction=asc&type=nsec
  5. Search with filters: ?search=backup&type=ns8&organization_id=org_abc123xyz
  6. Creator filter (by user): ?created_by=53h5zxpwu4vc
  7. Creator filter (by organization): ?created_by=lbswt1rxdhbz
  8. Creator filter (multiple): ?created_by=53h5zxpwu4vc&created_by=lbswt1rxdhbz

Complete Example Request:

GET /api/systems?page=1&page_size=20&sort_by=created_at&sort_direction=desc&type=nsec&type=ns8&status=online&version=nsec:8.0&version=ns8:1.2.3&organization_id=org_abc123xyz

This retrieves systems that are:

  • Type: nsec OR ns8
  • Status: online
  • Version: (nsec version 8.0) OR (ns8 version 1.2.3)
  • Organization: org_abc123xyz
  • Sorted by creation date (newest first)
  • Page 1 with 20 items per page

Query parameters

  • page integer

    Page number

    Minimum value is 1. Default value is 1.

  • page_size integer

    Items per page

    Minimum value is 1, maximum value is 100. Default value is 20.

  • sort_by string

    Field to sort systems by

    Values are name, type, status, fqdn, version, system_key, created_at, updated_at, creator_name, or organization_name.

  • sort_direction string

    Sort direction

    Values are asc or desc. Default value is asc.

  • name string

    Filter systems by name (case-insensitive, partial match)

  • system_key string

    Filter systems by system key (exact match). Useful for exporting a single system.

  • type array[string]

    Filter systems by type/product (exact match). Supports multiple values for checkbox filtering.

  • created_by array[string]

    Filter systems by creator user ID or creator organization ID (exact match). Each provided ID is checked against both the user_id and organization_id fields of the system creator. Supports multiple values for checkbox filtering.

    Examples:

    • ?created_by=53h5zxpwu4vc - matches systems created by user with ID 53h5zxpwu4vc
    • ?created_by=lbswt1rxdhbz - matches systems created by users in organization lbswt1rxdhbz
    • ?created_by=53h5zxpwu4vc&created_by=lbswt1rxdhbz - matches systems created by the user OR by users in the organization
  • version array[string]

    Filter systems by version using prefixed format product:version (e.g., nsec:8.0, ns8:1.2.3). The prefix prevents ambiguity when the same version number exists for multiple products. Supports multiple values for checkbox filtering.

    Example: ?version=nsec:8.0&version=ns8:1.2.3 matches systems with (nsec version 8.0) OR (ns8 version 1.2.3)

    Backward compatibility: Non-prefixed versions (e.g., 8.0) are still supported but may match multiple products.

  • organization_id array[string]

    Filter systems by organization ID (exact match). Supports multiple values for checkbox filtering.

  • status array[string]

    Filter systems by status (exact match). Supports multiple values for checkbox filtering.

    Special value "deleted" shows soft-deleted systems (where deleted_at IS NOT NULL). When "deleted" is combined with other statuses, both deleted and non-deleted systems matching the other statuses are returned.

    Values are unknown, online, offline, or deleted.

Responses

  • 200 application/json

    Systems retrieved successfully

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object
      Hide data attributes Show data attributes object
      • systems array[object]
        Hide systems attributes Show systems attributes object
        • id string

          System ID

        • name string

          System name

        • type string | null

          System type (auto-detected by collect service, null until first inventory collection)

          Values are ns8 or nsec.

        • status string

          System operational status (defaults to 'unknown', auto-updated by collect service)

          Values are unknown, online, offline, or deleted.

        • fqdn string

          Fully qualified domain name

        • ipv4_address string

          IPv4 address

        • ipv6_address string

          IPv6 address

        • version string

          System version

        • system_key string

          Auto-generated unique commercial system key. Hidden (empty string) until system is registered.

        • organization_id string

          Organization ID to which this system belongs

        • organization_name string

          Organization name to which this system belongs (resolved from distributors, resellers, or customers)

        • custom_data object

          Custom system data

          Additional properties are allowed.

        • system_secret string

          Auto-generated system secret token in format my_. (only returned during creation/regeneration, never stored or displayed again)

        • notes string

          Additional notes or description for the system

        • created_at string(date-time)

          System creation timestamp

        • updated_at string(date-time)

          System last update timestamp

        • created_by object
          Hide created_by attributes Show created_by attributes object
          • user_id string

            User ID who created the system

          • name string

            Full name of the user who created the system

          • email string

            Email of the user who created the system

          • organization_id string

            Organization ID of the creator

          • organization_name string

            Organization name of the creator

        • heartbeat_status string

          System heartbeat status (alive=<15min, dead=>15min, zombie=never communicated)

          Values are alive, dead, or zombie.

        • last_heartbeat string(date-time)

          Last heartbeat timestamp

        • heartbeat_minutes integer

          Minutes since last heartbeat

        • registered_at string(date-time) | null

          Registration timestamp. NULL means not yet registered, non-NULL means system registered at that time. When NULL, system_key is hidden.

      • pagination object
        Hide pagination attributes Show pagination attributes object
        • page integer

          Current page number

          Minimum value is 1.

        • page_size integer

          Number of items per page

          Minimum value is 1, maximum value is 100.

        • total_count integer

          Total number of items

          Minimum value is 0.

        • total_pages integer

          Total number of pages

          Minimum value is 0.

        • has_next boolean

          Whether there is a next page

        • has_prev boolean

          Whether there is a previous page

        • next_page integer | null

          Next page number if available

        • prev_page integer | null

          Previous page number if available

        • sort_by string | null

          Field used for sorting

        • sort_direction string | null

          Sort direction

          Values are asc or desc.

  • 401 application/json

    Unauthorized - invalid or missing token

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object | null
  • 403 application/json

    Forbidden - insufficient permissions

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object | null
GET /systems
curl \
 --request GET 'https://collect.your-domain.com/api/systems' \
 --header "Authorization: Bearer $ACCESS_TOKEN"
Response examples (200)
{
  "code": 200,
  "message": "systems retrieved successfully",
  "data": {
    "systems": [
      {
        "id": "4cf3053f-d0d5-4b10-b752-ff8f7b63c2f7",
        "name": "Production Server 01",
        "type": "nsec",
        "status": "unknown",
        "fqdn": "prod-web-01.example.com",
        "ipv4_address": "192.168.1.100",
        "ipv6_address": "2001:db8::1",
        "version": "2.1.4",
        "system_key": "ABC123DEF456",
        "organization_id": "org_123456789",
        "organization_name": "Acme Corporation",
        "custom_data": {
          "tier": "web",
          "datacenter": "EU-West-1",
          "environment": "production"
        },
        "system_secret": "my_a1b2c3d4e5f6g7h8i9j0.k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0",
        "notes": "Production web server for EU region",
        "created_at": "2025-07-01T09:00:00Z",
        "updated_at": "2025-07-10T10:30:00Z",
        "created_by": {
          "user_id": "53h5zxpwu4vc",
          "name": "Edoardo Super",
          "email": "edoardo.spadoni@nethesis.it",
          "organization_id": "lbswt1rxdhbz",
          "organization_name": "Nethesis Italia"
        },
        "heartbeat_status": "alive",
        "last_heartbeat": "2025-07-21T10:25:00Z",
        "heartbeat_minutes": 5,
        "registered_at": "2025-11-06T10:30:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 20,
      "total_count": 156,
      "total_pages": 8,
      "has_next": true,
      "has_prev": false,
      "next_page": 2,
      "prev_page": 42,
      "sort_by": "name",
      "sort_direction": "asc"
    }
  }
}
Response examples (401)
{
  "code": 401,
  "message": "invalid token",
  "data": {}
}
Response examples (403)
{
  "code": 403,
  "message": "insufficient permissions",
  "data": {}
}