# Adding Users

This endpoint allows you to insert a new user.

| Name | Type   | Description                                                                                                                                              |
| ---- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id   | string | The unique identifier for the new user (eg. username, user id, etc.). The value is restricted to alphanumeric characters, dashes and underscore symbols. |
| data | object | The data related to the user.                                                                                                                            |

<Tabs>

```csharp label="C#"
// create a new user, if the user already exists an error is returned
const userData = new Dictionary<string, object>
{
  {"name", "John Doe" },
  {"occupation", "Software Engineer"},
  {"gender", "male"},
};

await client.Users.AddAsync("john-doe", userData);

// get or create a new user, if the user already exists the user is returned
await client.Users.AddAsync("john-doe", userData, true);
```

```js label="JavaScript"
// create a new user, if the user already exists an error is returned
client.user("john-doe").create({
  name: "John Doe",
  occupation: "Software Engineer",
  gender: "male",
});

// get or create a new user, if the user already exists the user is returned
client.user("john-doe").getOrCreate({
  name: "John Doe",
  occupation: "Software Engineer",
  gender: "male",
});
```

```python label="Python"
# create a new user, if the user already exists an error is returned
client.users.add(
  "john-doe",
  {"name": "John Doe", "occupation": "Software Engineer", "gender": "male"},
)

# get or create a new user, if the user already exists the user is returned
client.users.add(
  "john-doe",
  {"name": "John Doe", "occupation": "Software Engineer", "gender": "male"},
  get_or_create=True,
)
```

```ruby label="Ruby"
# create a new user, if the user already exists, an error is returned
client.users.add(
  "john-doe",
  :data => {:name => "John Doe", :occupation => "Software Engineer", :gender => "male"},
)

# get or create a new user, if the user already exists, the user is returned
client.users.add(
  "john-doe",
  :data => {:name => "John Doe", :occupation => "Software Engineer", :gender => "male"},
  :get_or_create => true,
)
```

```php label="PHP"
// create a new user with the name in userdata
$user = $client->users()->add('42', array('name' => 'Arthur Dent'));
// get OR create the user
$user = $client->users()->add('42', array('name' => 'Arthur Dent'), true);
```

```java label="Java"
// create a new user, if the user already exists an error is returned
client.user("john-doe").create(new Data()
    .set("name", "John Doe")
    .set("occupation", "Software Engineer")
    .set("gender", "male")).join();

// get or create a new user, if the user already exists the user is returned
client.user("john-doe").getOrCreate(new Data()
    .set("name", "John Doe")
    .set("occupation", "Software Engineer")
    .set("gender", "male")).join();
```

```go label="Go"
// create a new user, if the user already exist an error is returned
	userData := stream.User{
		ID: "123",
		Data: map[string]any{
			"name":    "John Doe",
			"occupation": "Software Engineer",
			"gender":   "male",
		},
	}
	resp, err := client.Users().Add(context.TODO(), userData, false)
	if err != nil {
		panic(err)
	}

	// get or create a new user, if the user already exist the user is returned
	resp, err := client.Users().Add(context.TODO(), userData, true)
	if err != nil {
		panic(err)
	}
```

</Tabs>


---

This page was last updated at 2026-05-22T16:31:50.120Z.

For the most recent version of this documentation, visit [https://getstream.io/activity-feeds/docs/javascript/v2/users-create/](https://getstream.io/activity-feeds/docs/javascript/v2/users-create/).