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

# User Management

> Create, update, and manage CometChat users programmatically using the iOS SDK. Includes user creation, profile updates, and the User class reference.

<Accordion title="AI Integration Quick Reference">
  ```swift theme={null}
  // Create a user
  let user = User(uid: "user1", name: "Kevin")
  CometChat.createUser(user: user, apiKey: "AUTH_KEY",
      onSuccess: { user in }, onError: { error in })

  // Update a user
  let updateUser = User(uid: "user1", name: "Kevin Fernandez")
  CometChat.updateUser(user: updateUser, apiKey: "AUTH_KEY",
      onSuccess: { user in }, onError: { error in })

  // Update logged-in user (no auth key needed)
  CometChat.updateCurrentUserDetails(user: currentUser,
      onSuccess: { user in }, onError: { error in })
  ```

  **Note:** User creation/deletion should ideally happen on your backend via the [REST API](https://api-explorer.cometchat.com).
</Accordion>

Users must exist in CometChat before they can log in. This page covers creating, updating, and deleting users.

The typical flow:

1. User registers in your app → Create user in CometChat
2. User logs into your app → [Log user into CometChat](/sdk/ios/authentication-overview)

<Note>
  User deletion is only available via the [REST API](https://api-explorer.cometchat.com/reference/delete-user) — there is no client-side SDK method for it.
</Note>

## Creating a User

User creation should ideally happen on your backend via the [REST API](https://api-explorer.cometchat.com/reference/creates-user).

<Warning>
  **Security:** Never expose your `Auth Key` in client-side production code. User creation and updates using `Auth Key` should ideally happen on your backend server. Use client-side creation only for prototyping or development.
</Warning>

For client-side creation (development only), use `createUser()`:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let newUser : User = User(uid: "user1", name: "Kevin") // Replace with your uid and the name for the user to be created.
    let authKey = "AUTH_KEY" // Replace with your Auth Key.
    CometChat.createUser(user: newUser, apiKey: authKey, onSuccess: { (User) in
          print("User created successfully. \(User.stringValue())")
      }) { (error) in
         print("The error is \(String(describing: error?.description))")
    }
    ```
  </Tab>
</Tabs>

<Warning>
  UID can be alphanumeric with underscore and hyphen. Spaces, punctuation and other special characters are not allowed.
</Warning>

## Updating a User

Like creation, user updates should ideally happen on your backend via the [REST API](https://api-explorer.cometchat.com/reference/update-user).

For client-side updates (development only), use `updateUser()`:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let updateUser : User = User(uid: "user1", name: "Kevin Fernandez") // Replace with your uid and the name for the user to be created.
    let authKey = "AUTH_KEY" // Replace with your Auth Key.
    CometChat.updateUser(user: newUser1, apiKey: authKey, onSuccess: { (User) in
         print("User updated successfully. \(User.stringValue())")
     }) { (error) in
         print("The error is \(String(describing: error?.description))")
     }
    ```
  </Tab>
</Tabs>

Ensure the [`User`](/sdk/reference/entities#user) object has the correct `UID` set.

## Updating Logged-in User

Use `updateCurrentUserDetails()` to update the current user without an Auth Key. Note: You cannot update the user's role with this method.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let currentUser = User(uid: "cometchat-uid-1", name: "Andrew Joseph")
    CometChat.updateCurrentUserDetails(user: currentUser, onSuccess: { user in
    	print("Updated user object",user)
    }, onError: { error in
    	print("Update user failed with error: \(error?.errorDescription)")
    })
    ```
  </Tab>
</Tabs>

The method updates the logged-in user irrespective of the UID passed.

## Deleting a User

User deletion is only available via the [REST API](https://api-explorer.cometchat.com/reference/delete-user).

## User Class

| Field         | Editable                                            | Information                                                          |
| ------------- | --------------------------------------------------- | -------------------------------------------------------------------- |
| uid           | specified on user creation. Not editable after that | Unique identifier of the user                                        |
| name          | Yes                                                 | Display name of the user                                             |
| avatar        | Yes                                                 | URL to profile picture of the user                                   |
| link          | Yes                                                 | URL to profile page                                                  |
| role          | Yes                                                 | User role of the user for role-based access control                  |
| metadata      | Yes                                                 | Additional information about the user as Dictionary                  |
| status        | No                                                  | Status of the user. Could be either online/offline                   |
| statusMessage | Yes                                                 | Any custom status message that needs to be set for a user            |
| lastActiveAt  | No                                                  | The Unix timestamp of the time the user was last active.             |
| hasBlockedMe  | No                                                  | A boolean that determines if the user has blocked the logged in user |
| blockedByMe   | No                                                  | A boolean that determines if the logged in user has blocked the user |
| tags          | Yes                                                 | A list of tags to identify specific users                            |

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Retrieve Users" icon="users" href="/sdk/ios/retrieve-users">
    Fetch and filter user lists with pagination.
  </Card>

  <Card title="User Presence" icon="circle-dot" href="/sdk/ios/user-presence">
    Monitor real-time online/offline status.
  </Card>

  <Card title="Block Users" icon="ban" href="/sdk/ios/block-users">
    Block and unblock users.
  </Card>

  <Card title="Authentication" icon="key" href="/sdk/ios/authentication-overview">
    Log users into CometChat.
  </Card>
</CardGroup>
