For the complete documentation index, see llms.txt. This page is also available as Markdown.

List assets

Lists assets with filters, sorting and offset pagination

List Assets

get

Lists assets with filtering, sorting and offset pagination. Pass with_total=true to get the total count.

Authorizations
AuthorizationstringRequired

Harmony access key, sent as Authorization: AccessKey <your-key>. Create keys in Settings > Access Keys. The tenant is resolved from the key.

Query parameters
memory_gb_minany of · nullableOptional

Minimum total RAM in GB (inclusive)

number · max: 1000000Optional
or
stringOptionalPattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
memory_gb_maxany of · nullableOptional

Maximum total RAM in GB (inclusive)

number · max: 1000000Optional
or
stringOptionalPattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
storage_gb_minany of · nullableOptional

Minimum disk capacity in GB, taken as the largest of the device's disks (inclusive)

number · max: 1000000Optional
or
stringOptionalPattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
storage_gb_maxany of · nullableOptional

Maximum disk capacity in GB, taken as the largest of the device's disks (inclusive)

number · max: 1000000Optional
or
stringOptionalPattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
battery_cycles_mininteger · max: 100000 · nullableOptional

Minimum battery cycle count (inclusive)

battery_cycles_maxinteger · max: 100000 · nullableOptional

Maximum battery cycle count (inclusive)

idsstring · uuid[] · nullableOptional

Filter by specific asset database IDs (UUIDs)

mdm_device_idstring[] · max: 250 · nullableOptional

Filter by MDM device ID(s): the device identifier reported by the asset's MDM source

searchstring · nullableOptional

Search in asset name, model, family name, serial number or CPU type

serial_numberstring · nullableOptional

Search in asset serial number

sourcestring[] · nullableOptional

Filter by asset source

enrolledboolean · nullableOptional

Filter by MDM enrolment. True returns only devices from a source-of-truth MDM, False everything else — manual and custom-script assets and enrichment-only sources such as Apple Business Manager. Omit for both. Derived from the provider classification, so a new MDM needs no caller change.

integration_idstring[] · nullableOptional

Filter by integration instance ID(s); OR-combined with 'source'

vendorstring[] · nullableOptional

Filter by asset vendor (manufacturer)

modelstring[] · nullableOptional

Filter by asset model

family_namestring[] · nullableOptional

Filter by asset family name

employee_idstring[] · nullableOptional

Filter by employee ID. Use 'N/A' for unassigned assets

assignedboolean · nullableOptional

Filter by assignment state. True returns only assets assigned to an employee, False only unassigned assets. Omit for both.

supplierstring[] · nullableOptional

Filter by supplier/vendor from purchase details

os_version_displaystring[] · nullableOptional

Filter by OS version display from device

cpu_typestring[] · nullableOptional

Filter by CPU type from device

locationstring[] · nullableOptional

Filter by location values. A bare value matches an asset's manual location or its formatted structured location (e.g., 'California, United States'). A prefix narrows the match: 'manual:' matches the manual location only, 'country:' the country name or ISO code, and 'effective:' the effective location — the manual value when set, the formatted one otherwise — which selects exactly the assets a warehouse location group counts.

employee_locationstring[] · nullableOptional

Filter by the assigned employee's location. Matches the employee's text location or structured 'State, Country' format.

for_saleboolean · nullableOptional

Filter by for-sale status

last_seen_beforestring · date-time · nullableOptional

Filter assets whose last_seen date is before this datetime. Excludes assets with NULL last_seen.

custom_field_filtersstring · nullableOptional

JSON filter by custom field values. Structure: {config_id:field_id: [values]}

limitinteger · min: 1 · max: 10000Optional

The maximum number of items to return (up to 10,000).

Default: 100
offsetintegerOptional

The index of the first item to return. Default: 0 (the first item). Use with limit to get the next results.

Default: 0
with_totalbooleanOptional

Whether to report the total number of matching assets. Counting them means visiting every match, which no page size can bound, so callers that only render the returned page — a type-ahead, say — can set this to false and get total_count as the size of that page instead.

Default: true
sort_bystring · enumOptionalDefault: last_seenPossible values:
custom_field_sort_bystring · nullableOptional

Qualified field ref (config_id:field_id) to sort by.

custom_field_sort_typestring · enum · nullableOptional

Field type hint for sort cast ('number' or 'text').

Possible values:
sort_directionstring · enumOptional

Sort direction options

Default: ascPossible values:
include_custom_fields_configbooleanOptional

Include custom field config metadata

Default: false
include_disksbooleanOptional

Include each device's disks on the row. Off by default: the disks are a second query and a device reports several, so a page that does not read them should not pay for them. Limited to 1000 rows a page — see limit.

Default: false
Responses
200

Successful Response

application/json
total_countintegerRequired

The total number of items available to return for this query.

get/api/v1/assets
GET /asset-management/api/v1/assets HTTP/1.1
Host: api.harmony.io
Authorization: YOUR_API_KEY
Accept: */*
{
  "total_count": 1,
  "items": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "asset_id": "text",
      "name": "text",
      "serial_number": "text",
      "manufacturer": "text",
      "model": "text",
      "family_name": "text",
      "asset_type": "LAPTOP",
      "status": "in_stock",
      "mdm_status": "ACTIVE",
      "retirement_sub_status": "auto_detected",
      "retirement_notes": "text",
      "ownership": "COMPANY_OWNED",
      "for_sale": false,
      "compliance": "COMPLIANT",
      "source": "text",
      "integration_id": "text",
      "device_url": "https://example.com",
      "last_seen": "2026-01-01T00:00:00.000Z",
      "created_at": "2026-01-01T00:00:00.000Z",
      "updated_at": "2026-01-01T00:00:00.000Z",
      "employee_id": "text",
      "employee_name": "text",
      "employee_location": "text",
      "former_assignee": "text",
      "location": {
        "city": "text",
        "state": "text",
        "country": "text",
        "country_code": "text",
        "region": "text",
        "region_code": "text",
        "region_type": "text",
        "manual": "text",
        "pinned": false
      },
      "purchase_number": "text",
      "purchase_date": "2026-01-01",
      "supplier": "text",
      "warranty_end_date": "2026-01-01",
      "warranty_type": "STANDARD",
      "warranty_description": "text",
      "sale_price": "text",
      "sale_price_estimated": false,
      "price": "text",
      "manual_sale_price": "text",
      "sale_price_mode": "POLICY_BASED",
      "mdm_device_id": "text",
      "os_type": "text",
      "os_version_display": "text",
      "enrollment_date": "2026-01-01T00:00:00.000Z",
      "last_restart_time": "2026-01-01T00:00:00.000Z",
      "cpu_type": "text",
      "cpu_cores": 1,
      "battery_cycles": 1,
      "battery_health": "text",
      "memory_total_gb": "text",
      "storage_total_gb": "text",
      "disks": [
        {
          "name": "text",
          "identifier": "text",
          "file_system": "text",
          "total_capacity_gb": "text",
          "available_capacity_gb": "text",
          "is_encrypted": true,
          "encryption_method": "FileVault"
        }
      ],
      "disk_encryption": "encrypted",
      "estimated_price": "text",
      "eol_date": "2026-01-01",
      "days_until_eol": 1,
      "edr_status": "active",
      "edr_provider": "SENTINELONE",
      "active_threats": 1,
      "edr_last_scan_at": "2026-01-01T00:00:00.000Z",
      "edr_agent_version": "text",
      "edr_is_outdated": true,
      "edr_url": "https://example.com",
      "custom_fields": {
        "ANY_ADDITIONAL_PROPERTY": {
          "ANY_ADDITIONAL_PROPERTY": "text"
        }
      },
      "custom_fields_with_config": {
        "ANY_ADDITIONAL_PROPERTY": {
          "ANY_ADDITIONAL_PROPERTY": {
            "value": "text",
            "label": "text",
            "type": "number",
            "required": false,
            "options": [
              "text"
            ]
          }
        }
      }
    }
  ]
}

Last updated

Was this helpful?