# Create or update users
**POST /_security/user/{username}**
**All methods and paths for this operation:**
PUT
/_security/user/{username}
POST
/_security/user/{username}
Add and update users in the native realm.
A password is required for adding a new user but is optional when updating an existing user.
To change a user's password without updating any other fields, use the change password API.
## Required authorization
* Cluster privileges: `manage_security`
## Servers
- http://api.example.com: http://api.example.com ()
## Authentication methods
- Api key auth
- Basic auth
- Bearer auth
## Parameters
### Path parameters
- **username** (string)
An identifier for the user.
NOTE: Usernames must be at least 1 and no more than 507 characters.
They can contain alphanumeric characters (a-z, A-Z, 0-9), spaces, punctuation, and printable symbols in the Basic Latin (ASCII) block.
Leading or trailing whitespace is not allowed.
### Query parameters
- **refresh** (string)
Valid values are `true`, `false`, and `wait_for`.
These values have the same meaning as in the index API, but the default value for this API is true.
### Body: application/json (object)
- **username** (string)
- **email** (string | null)
The email of the user.
- **full_name** (string | null)
The full name of the user.
- **metadata** (object)
Arbitrary metadata that you want to associate with the user.
- **password** (string)
The user's password.
Passwords must be at least 6 characters long.
When adding a user, one of `password` or `password_hash` is required.
When updating an existing user, the password is optional, so that other fields on the user (such as their roles) may be updated without modifying the user's password
- **password_hash** (string)
A hash of the user's password.
This must be produced using the same hashing algorithm as has been configured for password storage.
For more details, see the explanation of the `xpack.security.authc.password_hashing.algorithm` setting in the user cache and password hash algorithm documentation.
Using this parameter allows the client to pre-hash the password for performance and/or confidentiality reasons.
The `password` parameter and the `password_hash` parameter cannot be used in the same request.
- **roles** (array[string])
A set of roles the user has.
The roles determine the user's access permissions.
To create a user without any roles, specify an empty list (`[]`).
- **enabled** (boolean)
Specifies whether the user is enabled.
## Responses
### 200
#### Body: application/json (object)
- **created** (boolean)
A successful call returns a JSON structure that shows whether the user has been created or updated.
When an existing user is updated, `created` is set to `false`.
[Powered by Bump.sh](https://bump.sh)