Use these REST APIs to force Couchbase Server to encrypt existing data.
Description
When you enable encryption at rest for a bucket or a type of data, Couchbase Server begins encrypting newly written data. However, it does not encrypt existing data. These APIs let you force Couchbase Server to encrypt existing data in a bucket or all data of a specific type. See Native Encryption at Rest for more information about encryption at rest.
This method is similar to the /controller/dropEncryptionAtRestDeks endpoint, but it does not rotate the data encryption keys (DEKs) nor does it re-encrypt already-encrypted data.
|
Force Encryption of Unencrypted Bucket Data
Force the unencrypted data in a bucket to be encrypted immediately.
POST /controller/forceEncryptionAtRest/bucket/{BUCKET_NAME}
BUCKET_NAME-
The name of the bucket whose unencrypted data you want to encrypt. This bucket must already have encryption at rest enabled.
curl Syntax
curl -sS -u $USER:$PASSWORD \
-X POST 'http[s]://<hostname>:{PORT}/controller/forceEncryptionAtRest/bucket/{BUCKET_NAME}'
USER-
The name of a user who has one of the roles listed in Required Privileges.
PASSWORD-
The password for the
user. HOST-
Hostname or IP address of a Couchbase Server.
PORT-
Port number for the REST API. Defaults are 8091 for unencrypted and 18901 for encrypted connections.
BUCKET_NAME-
The name of the bucket whose unencrypted data you want to encrypt. This bucket must already have encryption at rest enabled for this method to have an effect.
Required Privileges
You must have at least one of the following roles:
-
Bucket Admin that has privileges on the bucket to be encrypted.
Responses
200 OK-
The request was successful and Couchbase Server starts encrypting the data. Returns a JSON object with a timestamp of when Couchbase Server started encrypting the data. See the example in the next section for an example of the response.
This endpoint also returns 200 OKfor buckets that do not have encryption at rest enabled. In this case, the request does not encrypt any data. 400 Bad Request-
The request was malformed or Couchbase Server could not process it.
401 Unauthorized-
The user credentials you supplied were not valid.
403 Forbidden-
Your user account does not have one of the required roles to call this endpoint.
404 Not Found-
The bucket named in the
BUCKET_NAMEpath parameter does not exist.
Example
The following example demonstrates how to force Couchbase Server to encrypt the unencrypted data in a bucket named travel-sample:
curl -v -u Administrator:password
-X POST http://localhost:8091/controller/forceEncryptionAtRest/bucket/travel-sample
| jq
The result of request is a JSON object with a forceEncryptionDate attribute that contains the date and time when Couchbase Server started encrypting the data:
{
"forceEncryptionDate": "2025-08-04T17:58:39Z"
}
Force Encryption of a Type of Non-bucket Data
Force the encryption of unencrypted data of one of the following types:
-
Audit
-
Configuration
-
Logging
POST /controller/forceEncryptionAtRest/{TYPE}
TYPE-
The type of data to encrypt. Can be one of the following values:
-
audit: Encrypts unencrypted audit data. -
config: Encrypts unencrypted configuration data. -
log: Encrypts unencrypted log data.
-
curl Syntax
curl -sS -u $USER:$PASSWORD \
-X POST 'http://localhost:8091/controller/forceEncryptionAtRest/{TYPE}'
USER-
The name of a user who has one of the roles listed in Required Privileges.
PASSWORD-
The password for the
user. HOST-
Hostname or IP address of a Couchbase Server.
PORT-
Port number for the REST API. Defaults are 8091 for unencrypted and 18901 for encrypted connections.
TYPE-
The type of data to encrypt. Must be one of the following values:
-
audit: Encrypts unencrypted audit data. -
config: Encrypts unencrypted configuration data. -
log: Encrypts unencrypted log data.
-
Responses
200 OK-
The request was successful and Couchbase Server starts encrypting the data. Returns a JSON object with a timestamp of when Couchbase Server started encrypting the data. See the example in the next section for an example of the response.
This endpoint also returns 200 OKif you have not enabled encryption at rest for the type of data set by theTYPEpath parameter. In this case, the request does not encrypt any data. 400 Bad Request-
The request was malformed or Couchbase Server could not process it.
401 Unauthorized-
The user credentials you supplied were not valid.
403 Forbidden-
Your user account does not have one of the required roles to call this endpoint.
404 Not Found-
The
TYPEpath did not contain one of the valid values:audit,config, orlog.
Example
The following example demonstrates how to force Couchbase Server to encrypt unencrypted log data:
curl -sS -u Administrator:password -X POST \
http://localhost:8091/controller/forceEncryptionAtRest/log \
| jq
The result of request is a JSON object with a forceEncryptionDate attribute that contains the date and time when Couchbase Server started encrypting the data:
{
"forceEncryptionDate": "2025-08-05T13:18:34Z"
}