---
type: api
title: Remove an index block
description: Remove an index block from an index.
url: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/operation/operation-indices-remove-block
resource: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/operation/operation-indices-remove-block
products:
  - Elasticsearch
---

# Remove an index block

Availability: Generally available since 9.1

## Paths

- `DELETE` `/{index}/_block/{block}`

#### Path parameters

- `index` (union string | string[]) — required
  A comma-separated list or wildcard expression of index names used to limit the request.
By default, you must explicitly name the indices you are removing blocks from.
To allow the removal of blocks from indices with `_all`, `*`, or other wildcard expressions, change the `action.destructive_requires_name` setting to `false`.
You can update this setting in the `elasticsearch.yml` file or by using the cluster update settings API.
- `block` (enum) — required
  The block type to remove from the index.

Supported values include:
  - `metadata`: Disable metadata changes, such as closing the index.
  - `read`: Disable read operations.
  - `read_only`: Disable write operations and metadata changes.
  - `write`: Disable write operations. However, metadata changes are still allowed.
  Values: `metadata`, `read`, `read_only`, `write`

## Description

Remove an index block from an index.
Index blocks limit the operations allowed on an index by blocking specific operation types.

## Required authorization

- Index privileges: `manage`

## Authentication

- Api key: `Authorization: <value>`
  Elasticsearch APIs support key-based authentication.
  You must create an API key and use the encoded value in the request header.
  For example:
  
  
  ```
  curl -X GET "${ES_URL}/_cat/indices?v=true" \
    -H "Authorization: ApiKey ${API_KEY}"
  ```
  
  To get API keys, use the `/_security/api_key` APIs.
- Basic: `Authorization: Basic <credentials>`
- Bearer: `Authorization: Bearer <token>`
  Elasticsearch APIs support the use of bearer tokens in the `Authorization` HTTP header to authenticate with the API.
  For examples, refer to [Token-based authentication services](https://www.elastic.co/docs/deploy-manage/users-roles/cluster-or-deployment-auth/token-based-authentication-services)

## Query string parameters

- `allow_no_indices` (boolean · default: true) — optional
  A setting that does two separate checks on the index expression.
If `false`, the request returns an error (1) if any wildcard expression
(including `_all` and `*`) resolves to zero matching indices or (2) if the
complete set of resolved indices, aliases or data streams is empty after all
expressions are evaluated. If `true`, index expressions that resolve to no
indices are allowed and the request returns an empty result.
- `expand_wildcards` (string · default: open) — optional
  The type of index that wildcard patterns can match.
If the request can target data streams, this argument determines whether wildcard expressions match hidden data streams.
It supports comma-separated values, such as `open,hidden`.

Supported values include:
  - `all`: Match any data stream or index, including hidden ones.
  - `open`: Match open, non-hidden indices. Also matches any non-hidden data stream.
  - `closed`: Match closed, non-hidden indices. Also matches any non-hidden data stream. Data streams cannot be closed.
  - `hidden`: Match hidden data streams and hidden indices. Must be combined with `open`, `closed`, or `both`.
  - `none`: Wildcard expressions are not accepted.
  Values: `all`, `open`, `closed`, `hidden`, `none`
- `ignore_unavailable` (boolean · default: false) — optional
  If `false`, the request returns an error if it targets a concrete (non-wildcarded)
index, alias, or data stream that is missing, closed, or otherwise unavailable.
If `true`, unavailable concrete targets are silently ignored.
- `master_timeout` (string · default: 30s) — optional
  The period to wait for the master node.
If the master node is not available before the timeout expires, the request fails and returns an error.
It can also be set to `-1` to indicate that the request should never timeout.
- `timeout` (string · default: 30s) — optional
  The period to wait for a response from all relevant nodes in the cluster after updating the cluster metadata.
If no response is received before the timeout expires, the cluster metadata update still applies but the response will indicate that it was not completely acknowledged.
It can also be set to `-1` to indicate that the request should never timeout.

## Response

`application/json`

- `acknowledged` (boolean)
- `indices` (object[])
  - `name` (string)
  - `unblocked` (boolean)
  - `exception` (object)
    - `type` (string)
      The type of error
    - `reason` (union string) — nullable
      A human-readable explanation of the error, in English.
      One of: `string`
    - `stack_trace` (string)
      The server stack trace. Present only if the `error_trace=true` parameter was sent with the request.
    - `caused_by` (object) — recursive
      Same fields as `exception` in `indices`
    - `root_cause` (object[]) — recursive
      Same fields as `exception` in `indices`
    - `suppressed` (object[]) — recursive
      Same fields as `exception` in `indices`
## Code examples

#### Console

```console
DELETE /my-index-000001/_block/write
```

#### JavaScript

```javascript
const response = await client.indices.removeBlock({
  index: "my-index-000001",
  block: "write",
});
```

#### Python

```python
resp = client.indices.remove_block(
    index="my-index-000001",
    block="write",
)
```

#### curl

```curl
curl -X DELETE "$ELASTICSEARCH_URL/my-index-000001/_block/write" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY"
```

#### Java

```java
client.indices().removeBlock(r -> r
    .block(IndicesBlockOptions.Write)
    .index("my-index-000001")
);
```

#### C#

```c#
var response = await client.Indices.RemoveBlockAsync(indices: new[] { "my-index-000001" }, block: IndicesBlockOptions.Write);
```

#### PHP

```php
$resp = $client->indices()->removeBlock([
    "index" => "my-index-000001",
    "block" => "write",
]);
```

#### Ruby

```ruby
response = client.indices.remove_block(
  index: "my-index-000001",
  block: "write"
)
```

## Response examples

#### Indices remove block response example1

A successful response from `DELETE /my-index-000001/_block/write`, which removes an index block from an index.'

```json
{
  "acknowledged" : true,
  "indices" : [ {
    "name" : "my-index-000001",
    "unblocked" : true
  } ]
}
```

