--- Title: Modules requests alwaysopen: false categories: - docs - operate - rs description: Redis modules requests headerRange: '[1-2]' hideListLinks: true linkTitle: modules weight: $weight url: '/operate/rs/7.8/references/rest-api/requests/modules/' --- | Method | Path | Description | |--------|------|-------------| | [GET](#list-modules) | `/v1/modules` | List available modules | | [GET](#get-module) | `/v1/modules/{uid}` | Get a specific module | | [POST](#post-module) | `/v1/modules` | Upload a new module (deprecated) | | [POST](#post-module-v2) | `/v2/modules` | Upload a new module | | [DELETE](#delete-module) | `/v1/modules/{uid}` | Delete a module (deprecated) | | [DELETE](#delete-module-v2) | `/v2/modules/{uid}` | Delete a module | ## List modules {#list-modules} ```sh GET /v1/modules ``` List available modules, i.e. modules stored within the CCS. #### Permissions | Permission name | Roles | |-----------------|-------| | [view_cluster_modules]({{< relref "/operate/rs/7.8/references/rest-api/permissions#view_cluster_modules" >}}) | admin
cluster_member
cluster_viewer
db_member
db_viewer
user_manager | ### Request {#list-request} #### Example HTTP request ```sh GET /v1/modules ``` #### Headers | Key | Value | Description | |-----|-------|-------------| | Host | 127.0.0.1:9443 | Domain name | | Accept | \*/\* | Accepted media type | ### Response {#list-response} Returns a JSON array of [module objects]({{< relref "/operate/rs/7.8/references/rest-api/objects/module" >}}). #### Status codes {#list-status-codes} | Code | Description | |------|-------------| | [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | No error | ## Get module {#get-module} ```sh GET /v1/modules/{string: uid} ``` Get specific available modules, i.e. modules stored within the CCS. #### Permissions | Permission name | Roles | |-----------------|-------| | [view_cluster_modules]({{< relref "/operate/rs/7.8/references/rest-api/permissions#view_cluster_modules" >}}) | admin
cluster_member
cluster_viewer
db_member
db_viewer
user_manager | ### Request {#get-request} #### Example HTTP request ```sh GET /v1/modules/1 ``` #### Headers | Key | Value | Description | |-----|-------|-------------| | Host | 127.0.0.1:9443 | Domain name | | Accept | \*/\* | Accepted media type | #### URL parameters | Field | Type | Description | |-------|------|-------------| | uid | integer | The module's unique ID. | ### Response {#get-response} Returns a [module object]({{< relref "/operate/rs/7.8/references/rest-api/objects/module" >}}). ### Status codes {#get-status-codes} | Code | Description | |------|-------------| | [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | No error | | [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Module does not exist. | ## Upload module v1 {#post-module} ```sh POST /v1/modules ``` {{}} `POST /v1/modules` is deprecated as of Redis Enterprise Software version 7.2. Use [`POST /v2/modules`](#post-module-v2) instead. {{}} Uploads a new module to the cluster. The request must contain a Redis module, bundled using [RedisModule Packer](https://github.com/RedisLabs/RAMP). For modules in Redis Stack, download the module from the [download center](https://redis.io/downloads/). See [Install a module on a cluster]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/add-module-to-cluster#rest-api-method" >}}) for more information. #### Permissions | Permission name | Roles | |-----------------|-------| | [update_cluster]({{< relref "/operate/rs/7.8/references/rest-api/permissions#update_cluster" >}}) | admin | ### Request {#post-request} #### Example HTTP request ```sh POST /v1/modules ``` #### Headers | Key | Value | Description | |-----|-------|-------------| | Host | string | Domain name | | Accept | \*/\* | Accepted media type | | Content-Length | integer | Length of the request body in octets | | Expect | 100-continue | Requires particular server behaviors | | Content-Type | multipart/form-data | Media type of request/response body | ### Response {#post-response} Returns a status code. If an error occurs, the response body may include an error code and message with more details. #### Error codes {#post-error-codes} The server may return a JSON object with `error_code` and `message` fields that provide additional information. The following are possible `error_code` values: | Code | Description | |------|-------------| | no_module | Module wasn't provided or could not be found | | invalid_module | Module either corrupted or packaged files are wrong | | module_exists | Module already in system | | min_redis_pack_version | Module isn't supported yet in this Redis pack | | unsupported_module_capabilities | The module does not support required capabilities| | os_not_supported | This module is not supported for this operating system | | dependencies_not_supported | This endpoint does not support dependencies, see v2 | #### Status codes {#post-status-codes} | Code | Description | |------|-------------| | [400 Bad Request](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1) | Either missing module file or an invalid module file. | ### Examples #### cURL ```sh $ curl -k -u "[username]:[password]" -X POST -F "module=@/tmp/rejson.Linux-ubuntu18.04-x86_64.2.0.8.zip" https://[host][:port]/v1/modules ``` #### Python ```python import requests url = "https://[host][:port]/v1/modules" files=[ ('module', ('rejson.Linux-ubuntu18.04-x86_64.2.0.8.zip', open('/tmp/rejson.Linux-ubuntu18.04-x86_64.2.0.8.zip','rb'), 'application/zip') ) ] auth=("[username]", "[password]") response = requests.request("POST", url, auth=auth, files=files, verify=False) print(response.text) ``` ## Upload module v2 {#post-module-v2} ```sh POST /v2/modules ``` Asynchronously uploads a new module to the cluster. The request must contain a Redis module bundled using [RedisModule Packer](https://github.com/RedisLabs/RAMP). For modules in Redis Stack, download the module from the [download center](https://redis.io/downloads/). See [Install a module on a cluster]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/add-module-to-cluster#rest-api-method" >}}) for more information. #### Permissions | Permission name | Roles | |-----------------|-------| | [update_cluster]({{< relref "/operate/rs/7.8/references/rest-api/permissions#update_cluster" >}}) | admin | ### Request {#post-request-v2} #### Example HTTP request ```sh POST /v2/modules ``` #### Headers | Key | Value | Description | |-----|-------|-------------| | Host | string| Domain name | | Accept | \*/\* | Accepted media type | | Content-Length | integer | Length of the request body in octets | | Expect | 100-continue | Requires particular server behaviors | | Content-Type | multipart/form-data; | Media type of request/response body | ### Response {#post-response-v2} Returns a [module object]({{< relref "/operate/rs/7.8/references/rest-api/objects/module" >}}) with an additional `action_uid` field. You can use the `action_uid` to track the progress of the module upload. #### Example JSON body ```json { "action_uid":"dfc0152c-8449-4b1c-9184-480ea7cb526c", "author":"RedisLabs", "capabilities":[ "types", "crdb", "failover_migrate", "persistence_aof", "persistence_rdb", "clustering", "backup_restore" ], "command_line_args":"Plugin gears_python CreateVenv 1", "config_command":"RG.CONFIGSET", "dependencies":{ "gears_jvm":{ "sha256":"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9", "url":"http://example.com/redisgears_plugins/jvm_plugin/gears-jvm.linux-centos7-x64.0.1.0.tgz" }, "gears_python":{ "sha256":"22dca9cd75484cb15b8130db37f5284e22e3759002154361f72f6d2db46ee682", "url":"http://example.com/redisgears-python.linux-centos7-x64.1.2.1.tgz" } }, "description":"Dynamic execution framework for your Redis data", "display_name":"RedisGears", "email":"user@example.com", "homepage":"http://redisgears.io", "is_bundled":false, "license":"Redis Source Available License Agreement", "min_redis_pack_version":"6.0.0", "min_redis_version":"6.0.0", "module_name":"rg", "semantic_version":"1.2.1", "sha256":"2935ea53611803c8acf0015253c5ae1cd81391bbacb23e14598841e1edd8d28b", "uid":"98f255d5d33704c8e4e97897fd92e32d", "version":10201 } ``` ### Error codes {#post-error-codes-v2} The server may return a JSON object with `error_code` and `message` fields that provide additional information. Possible `error_code` values include [`/v1/modules` error codes](#post-error-codes) and the following: | Code | Description | |------|-------------| | invalid_dependency_data | Provided dependencies have an unexpected format | ### Status codes {#post-status-codes-v2} | Code | Description | |------|-------------| | [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | Success, scheduled module upload. | | [400 Bad Request](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1) | Module name or version does not exist. | | [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Dependency not found. | | [500 Internal Server Error](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1) | Failed to get dependency. | ## Delete module v1 {#delete-module} ```sh DELETE /v1/modules/{string: uid} ``` {{}} `DELETE /v1/modules` is deprecated as of Redis Enterprise Software version 7.2. Use [`DELETE /v2/modules`](#delete-module-v2) instead. {{}} Delete a module. #### Permissions | Permission name | Roles | |-----------------|-------| | [update_cluster]({{< relref "/operate/rs/7.8/references/rest-api/permissions#update_cluster" >}}) | admin | ### Request {#delete-request} #### Example HTTP request ```sh DELETE /v1/modules/1 ``` #### Headers | Key | Value | Description | |-----|-------|-------------| | Host | cnm.cluster.fqdn | Domain name | | Accept | application/json | Accepted media type | #### URL parameters | Field | Type | Description | |-------|------|-------------| | uid | integer | The module's unique ID. | ### Response {#delete-response} Returns a status code to indicate module deletion success or failure. #### Error codes {#delete-error-codes} | Code | Description | |------|-------------| | dependencies_not_supported | You can use the following API endpoint to delete this module with its dependencies: [`/v2/modules/`](#delete-module-v2) | #### Status codes {#delete-status-codes} | Code | Description | |------|-------------| | [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | Success, the module is deleted. | | [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Attempting to delete a nonexistent module. | | [406 Not Acceptable](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7) | The request is not acceptable. | ## Delete module v2 {#delete-module-v2} ```sh DELETE /v2/modules/{string: uid} ``` Delete a module. #### Permissions | Permission name | Roles | |-----------------|-------| | [update_cluster]({{< relref "/operate/rs/7.8/references/rest-api/permissions#update_cluster" >}}) | admin | ### Request {#delete-request-v2} #### Example HTTP request ```sh DELETE /v2/modules/1 ``` #### Headers | Key | Value | Description | |-----|-------|-------------| | Host | cnm.cluster.fqdn | Domain name | | Accept | application/json | Accepted media type | #### URL parameters | Field | Type | Description | |-------|------|-------------| | uid | integer | The module's unique ID. | ### Response {#delete-response-v2} Returns a JSON object with an `action_uid` that allows you to track the progress of module deletion. #### Status codes {#delete-status-codes-v2} | Code | Description | |------|-------------| | [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | Success, scheduled module deletion. | | [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Attempting to delete a nonexistent module. |