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

# User identity

The Gleap identify call lets you tie a user to their feedback items. It includes a unique User ID and optional meta information such as email & name.

### Identify your users

To effectively manage your contacts, we advise using `Gleap.IdentifyContactAsync()` each time a user signs in or registers. This practice ensures accurate identification of your contacts from the outset. For scenarios where contact information needs to be updated during active usage – such as when a user subscribes to a new plan or modifies their existing data – we recommend using `Gleap.UpdateContactAsync()` for seamless real-time updates.

Identify your user by calling the following method (`GleapUserProperty` lives in `GleapSDK.Models`).

```csharp theme={null}
await Gleap.IdentifyContactAsync(
    "12345",
    new GleapUserProperty
    {
        Name = "Franz",
        Email = "franz@gleap.io",
        Phone = "+1 (902) 123123",
        CompanyName = "ACME inc.",
        CompanyId = "19283",
        Plan = "Pro plan",
        Avatar = "https://.../avatar.png",
        Value = 199.95,
        CustomData = new Dictionary<string, object>
        {
            ["key1"] = "Test",
            ["key2"] = "ACME",
        },
    });
```

<Info>
  When transmitting custom data, only primitive numeric and string values are supported for later use in segment filters. Please note that you can send only 35 custom data keys with an identify call.

  We currently only allow JSON strings, numbers and boolean values as custom data.
</Info>

<Info>
  Gleap defaults to guest sessions when feedback items get reported without
  calling the identify method first. All feedback items of an existing guest
  session are merged with the user session once you've identified it.
</Info>

### Enforce identity verification

Enforce identity verification to prevent third parties from impersonating logged-in users.
[Learn how to generate the user hash](../guides/enforce-identity-verification)

```csharp theme={null}
await Gleap.IdentifyContactAsync(
    "12345",
    new GleapUserProperty
    {
        Name = "Franz",
        Email = "franz@gleap.io",
    },
    userHash: "GENERATED_USER_HASH");
```

### Update contact properties

The `UpdateContactAsync` method takes the same contact parameters as identify. Partial updates are possible.

```csharp theme={null}
await Gleap.UpdateContactAsync(
    new GleapUserProperty
    {
        Plan = "Pro plan",
        Value = 199.95,
    });
```

### Clear the identity on logout

We recommend clearing the identity once the user logs out. Clearing the identity automatically detaches the current session and creates a new guest session.

```csharp theme={null}
await Gleap.ClearIdentityAsync();
```

### Get the identification status of a user

```csharp theme={null}
Gleap.IsUserIdentified();
```

### Get the current user identity

```csharp theme={null}
Gleap.GetIdentity();
```
