BI Assets Endpoint
Access asset data in a flattened format optimized for Business Intelligence tools. All fields are at the root level for direct column mapping.
Key Difference from Public API
The BI API returns a completely flat structure - no nested objects. This makes it perfect for tools that expect tabular data:
- •All fields are top-level (no nesting)
- •Arrays are converted to comma-separated strings
- •Objects are serialized as JSON strings
Available Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/bi/v1/assets | List all assets in flattened format |
| GET | /api/bi/v1/assets/count | Get total count of assets |
| GET | /api/bi/v1/assets/{assetId} | Get a specific asset by ID |
/assetsList All Assets
Returns a paginated list of assets with all fields flattened to the root level. Ideal for bulk data export to BI tools.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| status | string | Filter by asset status (e.g., ACTIVE, INACTIVE) |
| policy | string | Filter by assigned policy path name |
| page | integer | Page number (0-indexed, default: 0) |
| size | integer | Page size (default: 20, max: 100) |
| sort | string | Sort field and direction (e.g., lastSyncAt,desc) |
curl -X GET "https://api.nomid.tech/emm/api/bi/v1/assets?status=ACTIVE&page=0&size=100" \
-H "X-API-Key: nm_acme_abc123..."{
"content": [
{
"pathName": "enterprises/acme/assets/asset_abc123",
"identification": "Warehouse Scanner 01",
"name": "WH-SCANNER-001",
"description": "Main warehouse barcode scanner",
"serialNumber": "ABC123XYZ",
"imeis": "123456789012345",
"brand": "Samsung",
"model": "Galaxy Tab Active3",
"status": "ACTIVE",
"lastSyncAt": "2026-01-29T08:15:00Z",
"enrollmentTime": "2025-01-15T10:30:00Z",
"policyPathName": "enterprises/acme/policies/warehouse",
"policyDisplayName": "Warehouse Policy",
"policyGroupName": "Warehouse",
"metadata": "{\"department\":\"logistics\",\"location\":\"warehouse-a\"}",
"tags": "warehouse,scanner,critical",
"operatingSystem": "Android",
"operatingSystemVersion": "13"
}
],
"totalElements": 156,
"totalPages": 2,
"size": 100,
"number": 0
}/assets/countGet Asset Count
Returns the total count of assets matching the filter criteria. Useful for pagination calculations.
curl -X GET "https://api.nomid.tech/emm/api/bi/v1/assets/count?status=ACTIVE" \
-H "X-API-Key: nm_acme_abc123..."{
"count": 156
}/assets/{assetId}Get Specific Asset
Returns a single asset in flattened format by its asset ID.
curl -X GET "https://api.nomid.tech/emm/api/bi/v1/assets/asset_abc123" \
-H "X-API-Key: nm_acme_abc123..."BiAssetDto Schema
Each asset object follows the BiAssetDto flat structure. All fields are strings at the root level - no nested objects or arrays.
| Field | Type | Description |
|---|---|---|
| Identifiers | ||
| pathName | string | Full asset path (e.g., enterprises/acme/assets/abc123) |
| identification | string | User-friendly identifier for the asset |
| name | string | Device name |
| description | string | Device description |
| Hardware Info | ||
| serialNumber | string | Device serial number |
| imeis | string | IMEI numbers (comma-separated if multiple) |
| brand | string | Device manufacturer/brand |
| model | string | Device model name |
| Status & Timestamps | ||
| status | string | Asset status (ACTIVE, INACTIVE) |
| lastSyncAt | string | Last synchronization timestamp (ISO 8601) |
| enrollmentTime | string | Device enrollment timestamp (ISO 8601) |
| Policy Info | ||
| policyPathName | string | Full path of assigned policy |
| policyDisplayName | string | Human-readable policy name |
| policyGroupName | string | Policy group for categorization |
| Custom Data | ||
| metadata | string | Custom metadata as JSON string |
| tags | string | Tags as comma-separated string |
| Operating System | ||
| operatingSystem | string | OS name (e.g., Android) |
| operatingSystemVersion | string | OS version number |
Public API vs BI API
The main difference is the response structure. Public API uses nested objects for organization, while BI API flattens everything for easy column mapping.
Public API (Nested)
// Public API Response (nested)
{
"pathName": "enterprises/acme/assets/abc123",
"customData": {
"metadata": { "department": "logistics" },
"tags": ["warehouse", "scanner"]
},
"specifications": {
"imeis": ["123456789012345"],
"serialNumber": "ABC123XYZ",
"brand": "Samsung"
},
"managedDevice": {
"policyPathName": "enterprises/acme/policies/warehouse"
}
}BI API (Flat)
// BI API Response (flat)
{
"pathName": "enterprises/acme/assets/abc123",
"metadata": "{\"department\":\"logistics\"}",
"tags": "warehouse,scanner",
"imeis": "123456789012345",
"serialNumber": "ABC123XYZ",
"brand": "Samsung",
"policyPathName": "enterprises/acme/policies/warehouse"
}Pagination
Results are paginated using the same format as the Public API. Use page and size parameters to navigate through large datasets.
Tip: For bulk exports, use size=100 (maximum) and iterate through all pages. The Power BI and Python examples above show how to fetch all pages automatically.