Assets
Assets are the machines your erasure devices have booted — one row per physical machine per account, each carrying a promoted summary of its hardware plus the complete raw fingerprint behind it. These are the endpoints an integration polls to keep an external system in sync with your inventory.
The asset model
An asset is one row per physical machine per account. The erasure engine reports a hardware fingerprint on every boot, and AVERASE keys the machine by its DMI identity — system UUID plus serial number — so booting the same laptop ten times updates one row rather than creating ten. Each repeat boot refreshes the stored fingerprint and the promoted summary columns, and bumps both updated_at and audited_at.
That upsert behavior is what makes incremental sync work: updated_at moves every time a machine is seen again, so polling with since catches re-audited machines as well as brand-new ones.
Every asset has two layers:
- The summary — a flat object of promoted fields (manufacturer, model, serial, CPU, memory, storage, battery health, firmware details, and more), returned by the list endpoint. Enough for most integrations.
- The fingerprint — the complete raw hardware document as reported by the engine, returned only by the detail endpoint.
Summary fields
- Name
id- Type
- string
- Description
Unique identifier for the asset (
asset_…). This is your upsert key — it is stable across boots, so store it and update in place.
- Name
account_id- Type
- string
- Description
The owning account, in prefixed form (
acct_…).
- Name
record_id- Type
- string
- Description
The identifier of the most recent boot report from this machine (e.g.
CW-20260727-001519). Changes on every boot.
- Name
manufacturer- Type
- string
- Description
System manufacturer from the DMI tables (e.g.
Dell Inc.).
- Name
model- Type
- string
- Description
System product name (e.g.
Latitude 5540).
- Name
serial_number- Type
- string
- Description
The machine's serial number.
- Name
asset_tag- Type
- string
- Description
The machine's asset tag, when the firmware carries one.
- Name
cpu_model- Type
- string
- Description
Full CPU model string.
- Name
memory_total_bytes- Type
- integer
- Description
Total installed memory, in bytes.
- Name
storage_summary- Type
- string
- Description
Human-readable summary of the machine's internal drives.
- Name
storage_serials- Type
- string
- Description
Serial numbers of the machine's internal drives — useful for matching wipe results back to their source machine.
- Name
battery_health_pct- Type
- integer
- Description
Battery health percentage. On machines with more than one battery, this is the minimum across them.
- Name
tpm_version- Type
- string
- Description
TPM version (e.g.
2.0).
- Name
firmware_mode- Type
- string
- Description
Firmware mode, e.g.
UEFI.
- Name
secure_boot- Type
- boolean
- Description
Whether Secure Boot was enabled at the time of the last boot.
- Name
bios_version- Type
- string
- Description
BIOS/firmware version string.
- Name
engine_version- Type
- string
- Description
Version of the erasure engine that produced the most recent report.
- Name
technician- Type
- string
- Description
Name of the user who first reported the machine — the technician whose device token booted it first.
- Name
notes- Type
- string
- Description
Operator notes attached from the kiosk.
- Name
test_results- Type
- object
- Description
Hardware test outcomes, keyed by test id (
keyboard,display,usb_ports,battery,wifi_adapter,bluetooth,webcam,audio,touchscreen), each with a status (passed,failed,not_started,not_applicable,detected) and optional detail. Empty ({}) when no tests have been run.
- Name
first_seen_at- Type
- timestamp
- Description
When this machine was first reported to the account.
- Name
audited_at- Type
- timestamp
- Description
When the machine last booted an erasure device — the timestamp of its most recent hardware audit.
- Name
updated_at- Type
- timestamp
- Description
When the row last changed. This is the field the
sinceparameter filters on.
Any field can be null. Hardware reporting is best-effort — a desktop has no
battery, older firmware may omit the asset tag or TPM version, and so on.
Treat every field as optional except id.
List assets
Returns the account's assets as summary objects, paginated, newest first — ordered by updated_at descending, so the most recently seen machines lead the list.
Optional query parameters
- Name
account_id- Type
- string
- Description
Cross-check against the token's account. Both the numeric account id and the prefixed
acct_…form are accepted. Sending any other account's id returns404— the scope is never silently widened to the token's own account.
- Name
since- Type
- timestamp
- Description
ISO-8601 timestamp; returns only assets with
updated_atat or after it. This is the incremental-sync cursor. A malformed value returns422.
- Name
serial- Type
- string
- Description
Exact-match filter on
serial_number— look up one machine by its serial.
- Name
page- Type
- integer
- Description
Page number. Walk pages until
pageequalspagesin the response.
Response envelope
- Name
assets- Type
- array
- Description
The page of asset summary objects.
- Name
page- Type
- integer
- Description
The current page number.
- Name
pages- Type
- integer
- Description
Total number of pages for this query.
- Name
count- Type
- integer
- Description
Total number of matching assets across all pages.
Errors
| Status | Body | Meaning |
|---|---|---|
401 | (empty) | Missing or invalid token |
404 | {"error": "Asset not found"} | account_id names an account outside the token's scope |
422 | see right | Malformed since value |
Request
curl -G https://averase.com/api/v1/assets \
-H "Authorization: Bearer $TOKEN" \
-d account_id=acct_bzXq9KrLEMm32iAnOP0xGDYk \
-d since=2026-07-26T00:00:00Z \
-d page=1
Response
{
"assets": [
{
"id": "asset_Mlrnd05DOeK6qILJp1gE9bN3",
"account_id": "acct_bzXq9KrLEMm32iAnOP0xGDYk",
"record_id": "CW-20260727-001519",
"manufacturer": "Dell Inc.",
"model": "Latitude 5540",
"serial_number": "74HRKY3",
"asset_tag": null,
"cpu_model": "13th Gen Intel(R) Core(TM) i5-1335U",
"memory_total_bytes": 17179869184,
"storage_summary": "PM9B1 NVMe Samsung 512GB 512 GB",
"storage_serials": "S6MZNF1WA04527",
"battery_health_pct": 75,
"tpm_version": "2.0",
"firmware_mode": "UEFI",
"secure_boot": false,
"bios_version": "1.21.0",
"engine_version": "1.0.0",
"technician": "Jane Smith",
"notes": null,
"test_results": {},
"first_seen_at": "2026-07-27T00:15:39.574Z",
"audited_at": "2026-07-27T00:15:39.574Z",
"updated_at": "2026-07-27T00:15:39.583Z"
}
],
"page": 1,
"pages": 1,
"count": 42
}
422 (malformed since)
{
"error": "invalid `since` — use ISO-8601, e.g. 2026-07-26T00:00:00Z"
}
Retrieve an asset
Returns a single asset: the same summary object as the list endpoint, plus fingerprint — the complete raw hardware document exactly as the engine reported it on the machine's most recent boot.
The fingerprint's sections (present when the hardware has them):
system— DMI identity: manufacturer, product, serial, UUIDcpumemorystorage— per-drive detail including SMART data: power-on hours, wear, reallocated sectors, temperaturestorage_controllersgpusnetworkwifi_adaptersaudio_devicesbatteriesdisplays— EDID data, including the panel serialusbusb_versionportshdmibluetoothraid_controllersthermalsfanspower_adapterstouchscreenworld_facing_camera
Newer engine versions add sections over time (storage_controllers, ports, usb_version, and hdmi are recent additions), so treat the set as open-ended and every section as optional.
Errors
| Status | Body | Meaning |
|---|---|---|
401 | (empty) | Missing or invalid token |
404 | {"error": "Asset not found"} | Unknown id, or an asset belonging to another account — the two are indistinguishable by design |
Request
curl https://averase.com/api/v1/assets/asset_Mlrnd05DOeK6qILJp1gE9bN3 \
-H "Authorization: Bearer $TOKEN"
Response (abridged)
{
"id": "asset_Mlrnd05DOeK6qILJp1gE9bN3",
"account_id": "acct_bzXq9KrLEMm32iAnOP0xGDYk",
"record_id": "CW-20260727-001519",
"manufacturer": "Dell Inc.",
"model": "Latitude 5540",
"serial_number": "74HRKY3",
"updated_at": "2026-07-27T00:15:39.583Z",
"fingerprint": {
"system": {
"manufacturer": "Dell Inc.",
"product": "Latitude 5540",
"serial": "74HRKY3",
"uuid": "4c4c4544-0034-4810-8052-b4c04f4b5933"
},
"cpu": { "...": "..." },
"memory": { "...": "..." },
"storage": { "...": "..." },
"batteries": { "...": "..." },
"displays": { "...": "..." }
}
}
Not found
{ "error": "Asset not found" }
Fetch fingerprints lazily. The fingerprint is large, and most integrations only need the summary — call the detail endpoint on demand (when a user drills into a machine, or for the handful of fields you actually map) rather than for every asset on every sync run.
Incremental sync
The pattern the API is designed around:
Sync loop
cursor = timestamp of your last successful run's START
every run:
run_started_at = now
page = 1
loop:
GET /api/v1/assets?account_id={account_id}&since={cursor}&page={page}
upsert each asset into your system by its "id"
(optionally GET /api/v1/assets/{id} for the full fingerprint)
stop when page == pages
page += 1
persist cursor = run_started_at
Three details make it robust:
- Upsert by
id. The id is stable across boots, so a machine that boots again arrives as an update to the row you already have, not a duplicate. - Advance the cursor to the run's start, not its end. An asset updated while your run was in flight lands after your
sinceon the next run instead of falling into the gap. Re-fetching a few rows is free; missing one is not. - Remember the ordering. Results come newest-first by
updated_at, so page 1 of an un-filtered query is also a quick "what changed lately" view.
Any polling frequency is fine — the API is read-only, and since keeps each run proportional to what actually changed.