Assets API
ISO 55000-aligned asset lifecycle management, maintenance tracking, and calibration.
Assets API
The Asset Pulse module provides ISO 55000-aligned lifecycle management for physical assets including equipment, instruments, facilities, IT systems, and vehicles. Track assets from registration through decommissioning with preventive, corrective, calibration, and inspection maintenance records.
Asset Lifecycle
operational --> maintenance --> operational
| |
v v
calibration_due --> operational decommissioned (end of life)
Asset Categories
| Category | Examples |
|---|---|
equipment | Tablet press, bioreactor, packaging line |
instrument | HPLC, pH meter, balance |
facility | Cleanroom, warehouse, cold storage |
it_system | LIMS, MES, ERP server |
vehicle | Forklift, delivery truck, AGV |
Endpoints
POST /api/v1/assets
Register a new asset in the organization. The asset tag must be unique within the organization (enforced by DB constraint).
tRPC: assetPulse.create
Auth: Bearer token required (scope: write:items) or session cookie
Org context: Required
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable asset name (e.g., “Tablet Press TP-401”) |
assetTag | string | Yes | Unique tag/identifier matching physical label (e.g., “TP-401”) |
category | string | No | equipment, instrument, facility, it_system, vehicle (default: equipment) |
location | string | No | Physical location (e.g., “Building A, Floor 2, Room 203”) |
status | string | No | operational, maintenance, decommissioned, calibration_due (default: operational) |
specifications | object | No | Flexible JSONB specs (manufacturer, model, serial, etc.) |
Example:
curl -X POST -H "Authorization: Bearer probeya_sk_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"HPLC System 007","assetTag":"HPLC-007","category":"instrument","location":"QC Lab B, Bench 3"}' \
"https://acme.probeya.com/api/v1/assets"
Response:
{
"data": {
"id": "clx9as001",
"name": "HPLC System 007",
"assetTag": "HPLC-007",
"category": "instrument",
"location": "QC Lab B, Bench 3",
"status": "operational",
"specifications": {},
"createdAt": "2026-04-01T10:00:00.000Z"
}
}
Side effects:
- Logs
asset.createdactivity event for audit trail
GET /api/v1/assets
Paginated asset listing with filtering by category, status, location, and full-text search on name and asset tag.
tRPC: assetPulse.list
Auth: Bearer token required (scope: read:items) or session cookie
Org context: Required
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
category | string (query) | No | Filter by asset category |
status | string (query) | No | Filter by operational status |
location | string (query) | No | Filter by exact location |
search | string (query) | No | Case-insensitive search on name and assetTag |
page | number (query) | No | Page number, 1-based (default: 1) |
limit | number (query) | No | Items per page (default: 25, max: 100) |
Response:
{
"items": [...],
"total": 156,
"page": 1,
"limit": 25,
"totalPages": 7
}
GET /api/v1/assets/:id
Retrieve a single asset with the 10 most recent maintenance log entries.
tRPC: assetPulse.getById
Auth: Bearer token required (scope: read:items) or session cookie
Org context: Required
Response:
{
"data": {
"id": "clx9as001",
"name": "HPLC System 007",
"assetTag": "HPLC-007",
"category": "instrument",
"status": "operational",
"specifications": { "manufacturer": "Agilent", "model": "1260 Infinity II" },
"maintenanceLogs": [
{
"id": "clx9ml001",
"type": "calibration",
"description": "Annual calibration per SOP-QC-042",
"performedAt": "2026-03-15T08:00:00.000Z",
"performedBy": { "id": "clx9us003", "name": "Jane Doe" }
}
]
}
}
PATCH /api/v1/assets/:id
Partial update of asset fields including status transitions, location changes, and maintenance schedule updates.
tRPC: assetPulse.update
Auth: Bearer token required (scope: write:items) or session cookie
Org context: Required
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Asset ID to update |
name | string | No | Updated name |
assetTag | string | No | Updated tag |
category | string | No | Updated category |
location | string | No | Updated location (null to clear) |
status | string | No | Updated operational status |
lastMaintenanceAt | string | No | ISO 8601 datetime (null to clear) |
nextMaintenanceAt | string | No | ISO 8601 datetime (null to clear) |
specifications | object | No | Updated JSONB specifications |
DELETE /api/v1/assets/:id
Remove an asset. Associated maintenance logs are automatically deleted via cascade.
tRPC: assetPulse.delete
Auth: Bearer token required (scope: write:items) or session cookie
Org context: Required
POST /api/v1/assets/:id/maintenance
Record a maintenance event against an asset. Verifies the asset belongs to the current organization before logging.
tRPC: assetPulse.logMaintenance
Auth: Bearer token required (scope: write:items) or session cookie
Org context: Required
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
assetId | string | Yes | The asset this maintenance event applies to |
type | string | Yes | preventive, corrective, calibration, inspection |
description | string | No | Details of the maintenance performed |
performedAt | string | No | ISO 8601 datetime (default: now) |
cost | number | No | Cost of the maintenance event |
notes | string | No | Additional notes |
GET /api/v1/assets/:id/maintenance
Paginated maintenance history for a specific asset.
tRPC: assetPulse.listMaintenanceLogs
Auth: Bearer token required (scope: read:items) or session cookie
Org context: Required
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
assetId | string | Yes | Asset ID |
type | string (query) | No | Filter by maintenance type |
limit | number (query) | No | Results per page (default: 20, max: 100) |
offset | number (query) | No | Pagination offset (default: 0) |
Error Codes
| Code | Description |
|---|---|
| 400 | Invalid input (e.g., unknown category or status) |
| 401 | Missing or invalid authentication |
| 404 | Asset not found in this organization |
| 409 | Duplicate asset tag within the organization |
Was this page helpful?