--- layout: api page_title: /sys/namespaces - HTTP API description: The `/sys/namespaces` endpoint is used manage namespaces in Vault. --- # `/sys/namespaces` @include 'alerts/enterprise-only.mdx' The `/sys/namespaces` endpoint is used manage namespaces in Vault. ## List namespaces This endpoints lists all the namespaces. | Method | Path | | :----- | :---------------- | | `LIST` | `/sys/namespaces` | ### Sample request ```shell-session $ curl \ --header "X-Vault-Token: ..." \ -X LIST \ http://127.0.0.1:8200/v1/sys/namespaces ``` ### Sample response ```json { "data": { "key_info": { "bar/": { "custom_metadata": {}, "id": "HWmNL", "path": "bar/" }, "foo/": { "custom_metadata": {}, "id": "5q39x", "path": "foo/" } }, "keys": [ "bar/", "foo/" ] } } ``` ## Create namespace This endpoint creates a namespace at the given path. | Method | Path | | :----- | :---------------------- | | `POST` | `/sys/namespaces/:path` | ### Parameters - `path` `(string: )` – Specifies the path where the namespace will be created. - `custom_metadata` `(map: nil)` - A map of arbitrary string to string valued user-provided metadata meant to describe the namespace. ### Sample payload ```json { "custom_metadata": { "foo": "abc", "bar": "123" } } ``` ### Sample request ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --request POST \ --data @payload.json \ http://127.0.0.1:8200/v1/sys/namespaces/ns1 ``` ## Patch namespace This endpoint patches an existing namespace at the specified path. | Method | Path | | :------- | :---------------------- | | `PATCH` | `/sys/namespaces/:path` | ### Parameters - `path` `(string: )` – Specifies the path of the existing namespace. - `custom_metadata` `(map: nil)` - A map of arbitrary string to string valued user-provided metadata meant to describe the namespace. ### Sample payload ```json { "custom_metadata": { "foo": "abc", "bar": "123" } } ``` ### Sample request ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --header "Content-Type: application/merge-patch+json" --request PATCH \ --data @payload.json \ http://127.0.0.1:8200/v1/sys/namespaces/ns1 ``` ## Delete namespace This endpoint deletes a namespace at the specified path. | Method | Path | | :------- | :---------------------- | | `DELETE` | `/sys/namespaces/:path` | ### Sample request ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --request DELETE \ http://127.0.0.1:8200/v1/sys/namespaces/ns1 ``` ## Read namespace information This endpoint gets the metadata for the given namespace path. | Method | Path | | :----- | :---------------------- | | `GET` | `/sys/namespaces/:path` | ### Sample request ```shell-session $ curl \ --header "X-Vault-Token: ..." \ http://127.0.0.1:8200/v1/sys/namespaces/ns1 ``` ### Sample response ```json { "id": "gsudj", "path": "ns1/", "custom_metadata": { "foo": "abc", "bar": "123" } } ``` ## Lock namespace This endpoint locks the API for the current namespace path or optional subpath. The behavior when interacting with Vault from a locked namespace is described in [API Locked Response](/vault/docs/concepts/namespace-api-lock#api-locked-response). | Method | Path | | :----- | :---------------------- | | `POST` | `/sys/namespaces/api-lock/lock/:subpath` | ### Sample request - current namespace ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --request POST \ http://127.0.0.1:8200/v1/sys/namespaces/api-lock/lock ``` ### Sample response - current namespace ```json { "unlock_key": "" } ``` ### Sample request - X-Vault-Namespace ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --header "X-Vault-Namespace: some/path --request POST \ http://127.0.0.1:8200/v1/sys/namespaces/api-lock/lock ``` ### Sample response - X-Vault-Namespace ```json { "unlock_key": "" } ``` ### Sample request - descendant of current namespace ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --request POST \ http://127.0.0.1:8200/v1/sys/namespaces/api-lock/lock/some/descendant/subpath ``` ### Sample response - descendant of current namespace ```json { "unlock_key": "" } ``` ## Unlock namespace This endpoint unlocks the api for the current namespace path or optional subpath. | Method | Path | | :----- | :---------------------- | | `POST` | `/sys/namespaces/api-lock/unlock/:subpath` | ### Sample payload - current namespace Non-Root ```json { "unlock_key": "" } ``` ### Sample request - current namespace Non-Root ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --request POST \ --data @payload.json \ http://127.0.0.1:8200/v1/sys/namespaces/api-lock/unlock ``` ### Sample request - current namespace root ```shell-session $ curl \ --header "X-Vault-Token: " \ --request POST \ http://127.0.0.1:8200/v1/sys/namespaces/api-lock/unlock ``` ### Sample payload - descendant namespace Non-Root ```json { "unlock_key": "" } ``` ### Sample request - descendant namespace Non-Root ```shell-session $ curl \ --header "X-Vault-Token: ..." \ --request POST \ --data @payload.json \ http://127.0.0.1:8200/v1/sys/namespaces/api-lock/unlock/some/descendant/path ```