> ## Documentation Index
> Fetch the complete documentation index at: https://firespark.cloud/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Send kiosk heartbeat

> Report app version and optional tablet health after the device is linked.

Updates `last_seen_at`, app version, and optional health (battery, storage, network, app state). The device must already be [linked](https://firespark.cloud/docs/storefront-api/kiosk/devices/link/post.md) with status `LINKED` or `ENROLLED`, and the secret must already be bound.

> [!NOTE]
>
> Authenticates with `device_uid` and `device_secret` in the JSON body. No
> customer access token.

The dashboard **Health** tab uses these reports. The response echoes current idle and offline settings so the tablet can apply them without another link poll.

Unlike most Storefront endpoints, this response is **not** wrapped in `{ data }`.

## Request body

| Field | Required | Type | Description |
| - | - | - | - |
| `device_uid` | Yes | string | UUID from the link response. |
| `device_secret` | Yes | string | Bound tablet secret. |
| `app_version_code` | Yes | integer | Numeric build number. |
| `app_version_name` | Yes | string | Semver or display version. |
| `health` | No | object | When present, written to the health history table. |
| `health.battery_pct` | No | integer | 0–100. |
| `health.charging` | No | boolean | Whether the tablet is charging. |
| `health.storage_free_bytes` | No | integer | Free disk bytes. |
| `health.storage_total_bytes` | No | integer | Total disk bytes. |
| `health.network` | No | object | Opaque network snapshot. |
| `health.app_state` | No | string | `active` (foreground) or `background`. |

## Request

```bash theme={null}
curl -X POST "https://firespark.cloud/api/storefront/v1/kiosk/devices/me" \
  -H "Content-Type: application/json" \
  -d '{
    "device_uid":"7c8a1e2b-4d3f-4a91-9c2e-1f0b6a7d8e90",
    "device_secret":"ksec_9f86d081884c7d659a2feaa0c55ad015",
    "app_version_code":120,
    "app_version_name":"1.2.0",
    "health":{"battery_pct":81,"charging":true,"app_state":"active"}
  }'
```

## Response

| Field | Description |
| - | - |
| `ok` | Always `true` on success. |
| `idle_timeout_seconds` | Current channel idle timeout. |
| `idle_warning_seconds` | Current channel idle warning. |
| `offline_after_minutes` | Dashboard offline threshold. |

## Errors

| Status | When |
| - | - |
| `401` | Unknown `device_uid` or the secret does not match. |
| `403` | Device exists but is not `LINKED` or `ENROLLED`. |
| `400` | Body failed validation. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.