Skip to main content
GET
/
devices
/
{device_id}
Look up one device
import requests

url = "https://api.1st.app/v1/devices/{device_id}"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
{
  "device_id": "8a72a1c7-3c91-4f5b-b39e-1d2c4e3f5a7b",
  "hardware_id": "dev:868050050000123",
  "display_name": "Locker Room North",
  "firmware_version": "1.4.2",
  "metadata": {
    "room": "locker_north",
    "hudl_player_id": "12345"
  },
  "status": "online",
  "last_seen_at": "2026-05-14T20:35:12Z",
  "signal": {
    "rssi_dbm": -78,
    "bars": 3
  }
}

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.

Authorizations

Authorization
string
header
required

Your API key. Create one at dashboard.1st.app/integrations/api-keys.

Path Parameters

device_id
string<uuid>
required

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.

Example:

"8a72a1c7-3c91-4f5b-b39e-1d2c4e3f5a7b"

Response

The device.

device_id
string<uuid>
required

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.

hardware_id
string
required

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.

display_name
string | null
required

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.

firmware_version
string | null
required

Which version of our firmware the device is running, like 1.4.2. Bumped automatically by over-the-air updates.

metadata
object
required

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>.

status
enum<string>
required

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.

Available options:
online,
stale,
offline
last_seen_at
string<date-time> | null
required

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).

signal
object
required

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.