Skip to main content
POST
Create a device
Key: Write Scope: Company

Authorizations

Authorization
string
header
required

Use your Primo API key in the Authorization header as Bearer <API_KEY>.

Body

application/json
purchaseDate

Date the device was purchased, as an ISO 8601 date (YYYY-MM-DD) or datetime

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
decommissioningDate

Date the device was decommissioned, as an ISO 8601 date (YYYY-MM-DD) or datetime

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
purchasePriceNoVAT
integer | null

Purchase price excluding VAT, in cents

Required range: -9007199254740991 <= x <= 9007199254740991
serialNumber
string | null

Serial number of the device

name
string | null

Display name of the device

platform
enum<string> | null

Operating system platform (e.g. MACOS, WINDOWS, LINUX, IOS, ANDROID, CHROMEOS)

Available options:
ANDROID,
IOS,
MACOS,
WINDOWS,
LINUX,
CHROME_OS,
IPADOS,
UNKNOWN
type
enum<string> | null

Device type (LAPTOP, TABLET, SMARTPHONE)

Available options:
LAPTOP,
TABLET,
SMARTPHONE
brand
string | null

Brand or manufacturer name

modelName
string | null

Model name of the device

year
integer | null

Year the device was manufactured

Required range: -9007199254740991 <= x <= 9007199254740991
ownerId
string | null

ID of the employee to assign this device to

tags
string[]

List of tags

Response

default - application/json
id
string
required
tags
string[]
required
isEnrolled
boolean
required
createdAt
string<date-time>
required
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
updatedAt
string<date-time>
required
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
ownerId
string | null

The ID of the employee assigned to this device

name
string | null
serialNumber
string | null
computerName
string | null
deprecated

Deprecated — use name instead. This field will be removed on 2026-04-13.

type
enum<string> | null
Available options:
LAPTOP,
TABLET,
SMARTPHONE
condition
enum<string> | null

Physical condition recorded for the device

Available options:
BROKEN,
FAIR,
GOOD,
EXCELLENT
platform
enum<string> | null
Available options:
ANDROID,
IOS,
MACOS,
WINDOWS,
LINUX,
CHROME_OS,
IPADOS,
UNKNOWN
brand
string | null
manufacturer
string | null
modelName
string | null
modelIdentifier
string | null
year
number | null
osVersion
string | null
osName
string | null
buildVersion
string | null
osUpdateStatus
enum<string> | null

OS update status of the device against the company's OS update policies: UP_TO_DATE, NOT_UP_TO_DATE, or NOT_SETUP when no OS update policy targets the device. Null when unknown.

Available options:
UP_TO_DATE,
NOT_UP_TO_DATE,
NOT_SETUP
enrolledAt
string<date-time> | null
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
disenrolledAt
string<date-time> | null
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
purchaseDate
string<date-time> | null

Date the device was purchased

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
decommissioningDate
string<date-time> | null

Date the device was decommissioned

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
purchasePriceNoVAT
number · null · null

Purchase price excluding VAT, in cents

lockWipeStatus
enum<string> | null

Current lock/wipe status of the device. LOCKING/LOCKED for lock operations, UNLOCKING for unlock in progress, WIPING/WIPED for wipe operations. Null when device is in normal state.

Available options:
LOCKED,
LOCKING,
UNLOCKING,
WIPED,
WIPING
edrProvider
enum<string> | null

EDR provider protecting the device: SENTINELONE, THREATDOWN, or null when no EDR (e.g. no EDR configured, or device not yet protected).

Available options:
SENTINELONE,
THREATDOWN
connectionStatus
enum<string> | null

Device liveness: ONLINE (currently reachable), OFFLINE (not reachable but its agent is still live), INACTIVE (the agent stopped reporting — in practice no news for about a week), NOT_COMPATIBLE (iOS, iPadOS and Android have no liveness notion), or null when MDM is off for the device. INACTIVE follows from the agent being disabled, NOT from a threshold on lastSeenAt — to find devices silent for months, read lastSeenAt.

Available options:
ONLINE,
OFFLINE,
INACTIVE,
NOT_COMPATIBLE
lastSeenAt
string<date-time> | null

Last time the platform received anything from the device. The field to use for "silent for N days".

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
lastScannedAt
string<date-time> | null

Last time the device's inventory was collected. A device can be heard from without being re-scanned.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
lastRestartAt
string<date-time> | null

Last time the device rebooted

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
availableStatus
enum<string> | null

Fleet-management status of the device: IN_USE, IN_STOCK or RETIRED

Available options:
IN_USE,
IN_STOCK,
RETIRED
enrollmentType
enum<string> | null

How the device was enrolled into MDM

Available options:
MANUAL,
AUTOMATIC
assetId
string | null

Asset tag recorded by the company

privateIpAddress
string | null
publicIpAddress
string | null
ram
number | null

RAM in GB

storage
number | null

Disk size in GB

processor
string | null

Processor name, e.g. "Apple M2 Pro"

cpuType
string | null

Raw CPU type reported by the device, e.g. "arm64e" or "x86_64"

cpuArchitecture
enum<string> | null

CPU instruction-set architecture, derived from the device CPU. Use it to tell which architecture-specific software build a device can run. Null when the device has never been synced.

Available options:
ARM,
X86
inchScreenSize
number | null

Screen size in inches

keyboardLayout
enum<string> | null
Available options:
FRENCH,
US_ENGLISH,
ARABIC,
CHINESE_PINYIN,
CHINESE_ZHUYIN,
DANISH,
DUTCH,
GERMAN,
INTERNATIONAL_ENGLISH,
ITALIAN,
NORWEGIAN,
PORTUGUESE,
RUSSIAN,
SPANISH,
SPANISH_LATIN_AMERICA,
SWEDISH,
SWISS,
TURKISH,
UK_ENGLISH,
UKRAINIAN,
HEBREW,
MACEDONIAN,
JAPANESE_JIS
batteryHealth
enum<string> | null

Battery condition reported by the device: NORMAL, or SERVICE_RECOMMENDED when the battery should be serviced. Null when the device reported nothing.

Available options:
SERVICE_RECOMMENDED,
NORMAL
batteryCycleCount
number | null
diskSpaceAvailableStatus
enum<string> | null

Bucketed free-disk-space level derived from percentDiskSpaceAvailable

Available options:
LOW,
MEDIUM,
HIGH
percentDiskSpaceAvailable
number | null
bootstrapTokenEscrowed
boolean | null

Whether the macOS bootstrap token is escrowed. Null when the device reported nothing about it.

bootstrapTokenEscrowedAt
string<date-time> | null
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$