# Identity Synchronization

## Setting the Subscriber's External ID

Providing a unique User ID for your subscriber allows you to later interact with that subscriber via the API.

Once a subscriber's external ID has been set you may work with our team to set up bi-directional automated data syncs. The following use cases are common ways that publishers use the external ID via server-to-server requests:

* Sending notifications to individual subscribers programmatically
* Processing unsubscribe requests
* Adding and removing profile attributes and events to subscribers

{% tabs %}
{% tab title="Dart" %}

```dart
await PushSDK.UserProfile.setExternalId('external-id');
```

{% endtab %}
{% endtabs %}

You can also check to see if the subscriber is already tagged with an External ID:

{% tabs %}
{% tab title="Dart" %}

```dart
final currentExternalId = await PushSDK.UserProfile.getExternalId();
```

{% endtab %}
{% endtabs %}

### External ID Restrictions

To prevent subscribers from being accidentally merged via External ID and to ensure integrity in  the subscriber documents, Pushly enforces the following restrictions upon External IDs:

* No empty or strings that contain white-space
* No identifiers that contain placeholder text: `[test, testing, example, guest, anon, anonymous, user, guest, visitor, n/a]`
* No common JavaScript fall-through words or keywords: \[`[Object ... ], undefined, NaN, Infinity, true, false]`
* Cannot be only punctuation/symbols, must contain alphanumeric characters: `[---, ***, -*-, -._+/=:@~]` &#x20;
* Identifiers should be between 3 and 256 characters in length

A [regex playground](https://regex101.com/r/2wEVEc/1) has been set up for testing the validity of External ID schema.
