Docs/Apio IoT Platform/Platform core

Assets

The Asset resource represents complex machines, appliances, or logical entities whose state is derived from one or more connected devices. Assets provide a higher-level abstraction for managing equipment within your IoT infrastructure.

Overview

An asset represents a domain object that does not produce measurements by itself, such as a building, a production line or an electric power line. Its state is built from the properties of the devices that monitor it: for example, a building can expose the consumed energy measured by its general energy meter and the temperature measured by an indoor sensor. Assets let you model and monitor equipment as a whole instead of managing individual sensors separately.

Key Properties

Basic Information

  • name (required): A meaningful name for the asset (e.g., “Production Line A”, “HVAC System Building 1”)
  • description: Description of the asset and its purpose
  • projectId (required): The project this asset belongs to
  • assetTypeId: Reference to the asset type that describes this category of assets

Hierarchy and Organization

  • plantId: The plant where this asset is physically located
  • parentId: The parent assets, as a list of asset ids. Enables hierarchical asset structures
  • location: Geographical coordinates of the asset
  • tags: Array of tags for categorization and filtering. Each tag has at least 3 characters and contains only letters, numbers, - and _

State

  • propertyMappings: Binds asset properties to device properties. See Property mappings
  • state, stateUpdatedAt: Computed by the platform when the asset is read; not set by clients

Metadata and Custom Properties

  • metadata: Flexible key-value storage for custom attributes and properties specific to the asset

Property Mappings

Property mappings bind each property of the asset to a property of a device. In the following example, the asset is bound to two properties coming from different devices: its energy is the importedEnergy measured by an energy meter, and its temperature is the externalTemperature measured by a sensor.

JSON
{
  "projectId": "my-project-id",
  "name": "Building 1",
  "propertyMappings": {
    "energy": {
      "propertyName": "importedEnergy",
      "resourceType": "devices",
      "resourceId": "my-energy-meter-uuid"
    },
    "temperature": {
      "propertyName": "externalTemperature",
      "resourceType": "devices",
      "resourceId": "my-temperature-sensor-uuid"
    }
  }
}

Each mapping has:

  • resourceType: The kind of resource that provides the value. Currently only devices
  • resourceId: The uuid of the device
  • propertyName: The name of the device property

When you read an asset, individually or in a list, the platform adds a state object with the current value of each mapped property, and a stateUpdatedAt object with the time each value was last updated, taken from the state of the mapped devices:

GET /projects/my-project-id/assets/my-asset-uuid

JSON
{
  "projectId": "my-project-id",
  "name": "Building 1",
  "propertyMappings": {
    "energy": {
      "propertyName": "importedEnergy",
      "resourceType": "devices",
      "resourceId": "my-energy-meter-uuid"
    },
    "temperature": {
      "propertyName": "externalTemperature",
      "resourceType": "devices",
      "resourceId": "my-temperature-sensor-uuid"
    }
  },
  "state": {
    "energy": 10,
    "temperature": 22
  },
  "stateUpdatedAt": {
    "energy": "2026-10-01T10:15:00.000Z",
    "temperature": "2026-10-01T10:14:30.000Z"
  }
}

The state contains the latest values only. To read the history of an asset property, query the timeseries of the mapped device property, for example devices/my-energy-meter-uuid/importedEnergy.

Asset Hierarchies

Assets support hierarchical relationships through the parentId field, allowing you to model complex equipment structures:

Text
Manufacturing Plant (Asset)
├── Production Line A (Asset)
│   ├── Conveyor System (Asset)
│   ├── Assembly Station 1 (Asset)
│   └── Quality Control Unit (Asset)
└── Production Line B (Asset)
    ├── Packaging System (Asset)
    └── Labeling Machine (Asset)

Asset Types

The assetTypeId field links an asset to an asset type, a template that describes a category of assets: name, manufacturer, model, category and description. When you read an asset, its asset type is included in the assetType field.

Asset types can optionally define the properties of their assets, in the same way device types do. This is useful to assign a label and a unit of measurement to each property:

JSON
{
  "name": "Office building",
  "category": "Building",
  "properties": {
    "energy": {
      "displayName": "Consumed energy",
      "uom": "kWh",
      "type": "number"
    },
    "temperature": {
      "displayName": "Indoor temperature",
      "uom": "°C",
      "type": "number"
    }
  }
}

Resource Management

Base Resource Properties

All assets inherit standard resource properties:

  • uuid: Unique identifier (auto-generated if not provided)
  • createdAt: Resource creation timestamp
  • updatedAt: Last modification timestamp
  • metadata: Flexible key-value storage for custom attributes

Project Association

Every asset must be associated with a project through the projectId field, enabling:

  • Access control and permissions management
  • Resource organization and billing
  • Multi-tenant isolation

Type to search guides and API endpoints.