Update a device’s display name, or tag it with metadata you control (player IDs from your AMS, room codes, anything).
This is the only mutating endpoint. It needs a key with
read_write scope. A read-only key gets a 403.
Both fields are optional, but the body must have at least one.
Pass display_name: null to clear the name. Pass metadata: null
to clear all tags.
Sending {"metadata": {"player_id": "42"}} removes any
other metadata that was set before. To preserve other tags,
fetch the device first, merge your new keys client-side, and
send the full set back.
For production code, include an Idempotency-Key header. If
your request times out and you retry with the same key, you
get back the original response instead of accidentally
applying the update twice. Cache lives for 24 hours.
display_name: max 200 charsmetadata: max 20 keysString(playerId))Documentation Index
Fetch the complete documentation index at: https://dev.1st.app/llms.txt
Use this file to discover all available pages before exploring further.
Your API key. Create one at dashboard.1st.app/integrations/api-keys.
Optional but recommended. A unique string you generate (a UUID works well) so that if your code retries after a network error, the second call gets back the original response instead of changing the device twice.
Same value + same body returns the cached response. Same value + different body returns a 422 (we assume you reused the key by mistake). We cache for 24 hours.
255"550e8400-e29b-41d4-a716-446655440000"
The UUID of the device you want. You get a device's ID from
GET /v1/devices (look at the device_id field) or by
copying it from the dashboard URL.
"8a72a1c7-3c91-4f5b-b39e-1d2c4e3f5a7b"
The updated device.
The device's permanent ID. Use this anywhere the API asks
for a device_id. It stays the same across firmware
updates and hardware swaps.
The serial number on the physical device, looks like
dev:868050050000123. Most integrations can ignore this.
We surface it so you can cross-reference against your
own inventory spreadsheet if you keep one. You can't
pass hardware_id anywhere in the API; everywhere we
ask for an ID, it wants device_id.
The friendly name shown in the dashboard, like "Locker
Room. North". You set this with
PATCH /v1/devices/{id}. null if you haven't named it
yet.
Which version of our firmware the device is running, like
1.4.2. Bumped automatically by over-the-air updates.
Your own tags on this device, player IDs, room numbers,
position codes, whatever you need to link the device back
to your own systems. You set these with
PATCH /v1/devices/{id}, and you filter /v1/devices
with ?metadata.<key>=<value>.
How fresh the device's data is.
online, sent data in the last hour.
stale, last data was 1–24 hours ago.
offline, over 24 hours since last data, or the device
has never reported.
online, stale, offline When the device last uploaded data, in UTC. null if the
device has never reported (e.g. you registered it but
never plugged it in).
How strong the device's cellular signal was on its last upload. A weak signal doesn't drop readings, the device buffers locally, but it does mean data lands later.