> ## Documentation Index
> Fetch the complete documentation index at: https://eurusys-6c0957fa.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Devices

> How SDK instances register as devices, and how to manage them from the dashboard.

Every running SDK instance registers itself as a **device** against the Validation Gateway. The SDK identifies each device automatically, so you don't manage device identifiers yourself.

## Registration

A device must be registered **once** before it can open a session and validate. The SDK does this for you:

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    mbkyc.registerDevice("lobby-kiosk").getOrThrow()
    ```
  </Tab>

  <Tab title="Swift">
    ```swift theme={null}
    try await mbkyc.registerDevice(name: "lobby-kiosk")
    ```
  </Tab>

  <Tab title="C#">
    ```csharp theme={null}
    await mbkyc.RegisterDeviceAsync("lobby-kiosk");
    ```
  </Tab>

  <Tab title="TypeScript">
    ```ts theme={null}
    await client.registerDevice('lobby-kiosk');
    ```
  </Tab>
</Tabs>

Registration is authenticated with a JWT (`key_id` in the payload). The backend stores the device against your organization. You can check status at any time:

```kotlin theme={null}
val status = mbkyc.checkRegistration().getOrThrow()
// active | inactive | not_found
```

## What happens on the wire

```mermaid theme={null}
sequenceDiagram
    participant SDK
    participant VG as Validation Gateway
    SDK->>VG: POST /api/v1/register (JWT, device_name, fingerprint, meta)
    VG-->>SDK: 201 Created — device registered
    SDK->>VG: GET /api/v1/register (JWT + fingerprint)
    VG-->>SDK: 200 active / 204 not registered
```

The `meta` block carries OS, OS version, and app version so you can identify devices in the dashboard.

## Managing devices from the portal

In **Operations → Devices** you can see and manage every device registered to your organization:

| Action       | Effect                                                                                  |
| ------------ | --------------------------------------------------------------------------------------- |
| **View**     | See all registered devices, with name, OS metadata, status, and last activity.          |
| **Register** | Devices register themselves on first run via `registerDevice()`; they then appear here. |
| **Status**   | `active` devices can validate; an inactive device is rejected at handshake.             |

<Warning>
  A device that is inactive or never registered cannot complete the [handshake](/concepts/backend-protocol), so `validate` calls will fail. If you see registration errors, confirm the device shows as **active** in the portal.
</Warning>
