# Registering Push Devices

Once your app has enabled the push notifications, you can use the APIs to register user devices such as iPhones and Android phones.

<admonition type="info">

Each chat user has a limit of  **25**  unique devices. Once this limit is reached, the oldest device will be removed and replaced by the new device.

</admonition>

### Device Parameters

| name               | type    | description                                                                      | default | optional |
| ------------------ | ------- | -------------------------------------------------------------------------------- | ------- | -------- |
| user_id            | string  | The user ID for this device                                                      | -       |          |
| id                 | string  | The device ID.                                                                   | -       |          |
| push_provider      | string  | The push provider for this device. Either APN, Firebase, Huawei, or Xiaomi.      | -       |          |
| disabled           | boolean | Set if the device is disabled                                                    | -       | ✓        |
| disabled_reason    | string  | Explanation if the device is disabled                                            | -       | ✓        |
| push_provider_name | string  | The push provider name for this device if a multi-bundle configuration is added. | -       | ✓        |

### Register a Device

Registering a device associates it with a user and tells the push provider to send new message notifications to the device.

<admonition type="info">

Register the user's device for remote push notifications once your user is successfully connected to Chat.

</admonition>

<admonition type="info">

Multi-bundle configurations require that you specify a push_provider_name when registering a device that corresponds to the name of the push configuration that you've set up in the dashboard or via the API.

</admonition>

<Tabs>

```kotlin label="Kotlin"
client.addDevice(
  Device(
    token = "push-provider-token",
    pushProvider = PushProvider.FIREBASE,
    providerName = "provider_name", // Optional, if adding to multi-bundle named provider
  )
).enqueue { result ->
  if (result.isSuccess) {
    // Device was successfully registered
  } else {
    // Handle result.error()
  }
}
```

```js label="JavaScript"
const id = "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207";
const push_provider = "apn";
const user_id = "Taquito";

await client.addDevice(id, push_provider, user_id);

// if multi providers
await client.addDevice(id, push_provider, user_id, push_provider_name);
```

```python label="Python"
client.create_device(
    id="2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
    push_provider="apn",
    user_id="42",
)
```

```ruby label="Ruby"
require 'getstream_ruby'
Models = GetStream::Generated::Models

client.common.create_device(Models::CreateDeviceRequest.new(
  id: '2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207',
  push_provider: 'apn',
  user_id: '42'
))
```

```swift label="Swift"
func application(
  _ application: UIApplication,
  didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
  // Note: If you leverage mutli-bundle configuration, please provide providerName - name of your configuration
  chatClient.currentUserController().addDevice(.apn(token: deviceToken)) { error in
   if let error = error {
     print("Error adding device token.", error)
   }
  }
}
```

```bash label="Bash"
stream chat:push:device:add \
  --device_id '2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207'
  --user_id '42'
  --provider 'apn'
```

```php label="PHP"
$client->createDevice(new Models\CreateDeviceRequest(
    id: "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
    pushProvider: "apn",
    userID: "elon",
));
```

```dart label="Dart"
// register the device with APN (Apple only)
  await client.addDevice("device-token", "apn");

  // register the device with Firebase (Android only)
  await client.addDevice("device-token", "firebase");
```

```go label="Go"
client.CreateDevice(ctx, &getstream.CreateDeviceRequest{
  ID:           "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
  PushProvider: "apn",
  UserID:       getstream.PtrTo("elon"),
})
```

```cpp label="Unreal"
// register the device with APN (Apple only)
Client->AddDevice(TEXT("device-token"), EPushProvider::Apn);

// register the device with Firebase (Android only)
Client->AddDevice(TEXT("device-token"), EPushProvider::Firebase);
```

```csharp label="C#"
await client.CreateDeviceAsync(new CreateDeviceRequest
{
    ID = "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
    PushProvider = "apn",
    UserID = "<user_id>",
});
```

```csharp label="Unity"
await Client.DeviceApi.AddDeviceAsync(new CreateDeviceRequest
{
  //Device ID provided by the notifications provider e.g. Token provided by Firebase Messaging SDK
  Id = "unique-device-id",
  PushProvider = PushProviderType.Firebase,
});
```

</Tabs>

### Unregister a Device

Unregistering a device removes the device from the user and stops further new message notifications.

<Tabs>

```kotlin label="Kotlin"
client.deleteDevice(
  Device(
    token = "push-provider-token",
    pushProvider = PushProvider.FIREBASE,
    providerName = "custom_name", // Optional, if added to multi-bundle named provider
  )
).enqueue { result ->
  if (result.isSuccess) {
    // Device was successfully unregistered
  } else {
    // Handle result.error()
  }
}
```

```js label="JavaScript"
const id = "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207";
const user_id = "Taquito";

await chatClient.removeDevice(id, user_id);
```

```python label="Python"
client.delete_device(
    id="2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
    user_id="42",
)
```

```ruby label="Ruby"
require 'getstream_ruby'
Models = GetStream::Generated::Models

client.common.delete_device(
  '2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207',
  '42'
)
```

```swift label="Swift"
let currentUserController = chatClient.currentUserController()

guard let device = currentUserController.currentUser?.currentDevice else {
  // No device to remove
}

currentUserController.removeDevice(id: device.id) { error in
  if let error = error {
    print("Error removing the device", error)
  }
}
```

```bash label="Bash"
stream chat:push:device:delete \
  --device_id '2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207'
  --user_id '42'
```

```php label="PHP"
$client->deleteDevice("2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207", "elon");
```

```dart label="Dart"
await client.removeDevice("device-token");
```

```go label="Go"
client.DeleteDevice(ctx, &getstream.DeleteDeviceRequest{
  ID:     "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
  UserID: getstream.PtrTo("elon"),
})
```

```cpp label="Unreal"
Client->RemoveDevice(TEXT("device-token"));
```

```csharp label="C#"
await client.DeleteDeviceAsync(
    "2ffca4ad6599adc9b5202d15a5286d33c19547d472cd09de44219cda5ac30207",
    "Taquito"
);
```

```csharp label="Unity"
await Client.DeviceApi.RemoveDeviceAsync(deviceId, Client.UserId);
```

</Tabs>

### List Devices

Provides a list of all devices associated with a user.

<Tabs>

```kotlin label="Kotlin"
client.getDevices().enqueue { result ->
  if (result.isSuccess) {
    val devices: List<Device> = result.data()
  } else {
    // Handle result.error()
  }
}
```

```js label="JavaScript"
const user_id = "Taquito";

await chatClient.getDevices(user_id);
```

```python label="Python"
client.list_devices(user_id=user_id)
```

```ruby label="Ruby"
require 'getstream_ruby'

client.common.list_devices(user_id)
```

```php label="PHP"
$response = $client->listDevices($userID);
```

```go label="Go"
client.ListDevices(ctx, &getstream.ListDevicesRequest{UserID: getstream.PtrTo(userID)})
```

```bash label="Bash"
stream chat:push:device:get --user_id '42'
```

```swift label="Swift"
let currentUserController = chatClient.currentUserController()

currentUserController.synchronizeDevices { error in
  guard error == nil else {
    print("Error getting the list of devices")
    return
  }

  let devices = currentUserController.currentUser?.devices
}
```

```cpp label="Unreal"
Client->ListDevices(
  [](const TArray<FDevice> Devices)
  {
    // Do something with Devices
  });
```

```csharp label="C#"
await client.ListDevicesAsync(userId);
```

```csharp label="Unity"
var response = await Client.DeviceApi.ListDevicesAsync(Client.UserId);
foreach (var userDevice in response.Devices)
{
  Debug.Log(userDevice.Id); // Unique Device ID provided by push notifications provider
  Debug.Log(userDevice.CreatedAt);
  Debug.Log(userDevice.PushProvider); //E.g. Firebase
  Debug.Log(userDevice.Disabled);
  Debug.Log(userDevice.DisabledReason);
}
```

</Tabs>


---

This page was last updated at 2026-05-22T16:32:17.992Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/flutter-dart/push-devices/](https://getstream.io/chat/docs/flutter-dart/push-devices/).