---
type: api
title: Validate a query
description: **All methods and paths for this operation:**
url: https://www.elastic.co/elastic/docs-builder/docs/4641/api/doc/elasticsearch/v8/operation/operation-indices-validate-query
resource: https://www.elastic.co/elastic/docs-builder/docs/4641/api/doc/elasticsearch/v8/operation/operation-indices-validate-query
products:
  - Elasticsearch
---

# Validate a query

Authentication: required

Availability: Generally available since 1.3

## Paths

- `POST` (also `GET`) `/{index}/_validate/query`
- `POST` (also `GET`) `/_validate/query`

#### Path parameters

- `index` (union string | string[]) — optional, leave it out to use `/_validate/query`
  Comma-separated list of data streams, indices, and aliases to search.
Supports wildcards (`*`).
To search all data streams or indices, omit this parameter or use `*` or `_all`.

## Description

Validates a query without running it.

## Query string parameters

- `allow_no_indices` (boolean · default: true) — optional
  If `false`, the request returns an error if any wildcard expression, index alias, or `_all` value targets only missing or closed indices.
This behavior applies even if the request targets other open indices.
- `all_shards` (boolean · default: false) — optional
  If `true`, the validation is executed on all shards instead of one random shard per index.
- `analyzer` (string) — optional
  Analyzer to use for the query string.
This parameter can only be used when the `q` query string parameter is specified.
- `analyze_wildcard` (boolean · default: false) — optional
  If `true`, wildcard and prefix queries are analyzed.
- `default_operator` (enum · default: or) — optional
  The default operator for query string query: `and` or `or`.
  Values: `and`, `AND`, `or`, `OR`
- `df` (string) — optional
  Field to use as default where no field prefix is given in the query string.
This parameter can only be used when the `q` query string parameter is specified.
- `expand_wildcards` (union oneOf · default: open) — optional
  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.
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`
- `explain` (boolean · default: false) — optional
  If `true`, the response returns detailed information if an error has occurred.
- `ignore_unavailable` (boolean · default: false) — optional
  If `false`, the request returns an error if it targets a missing or closed index.
- `lenient` (boolean · default: false) — optional
  If `true`, format-based query failures (such as providing text to a numeric field) in the query string will be ignored.
- `rewrite` (boolean · default: false) — optional
  If `true`, returns a more detailed explanation showing the actual Lucene query that will be executed.
- `q` (string) — optional
  Query in the Lucene query string syntax.

## Request body

`application/json`

- `query` ({} Query) — optional
  Query in the Lucene query string syntax.
  See [Query](https://www.elastic.co/elastic/docs-builder/docs/4641/api/doc/elasticsearch/v8/types/_types-query_dsl-querycontainer)

## Response

`application/json`

- `explanations` (object[])
  - `error` (string)
  - `explanation` (string)
  - `index` (string)
  - `shard` (number)
  - `valid` (boolean)
- `_shards` (object)
  - `failed` (number)
    The number of shards the operation or search attempted to run on but failed.
  - `successful` (number)
    The number of shards the operation or search succeeded on.
  - `total` (number)
    The number of shards the operation or search will run on overall.
  - `failures` (object[])
    - `index` (string)
    - `node` (string)
    - `reason` (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 `reason` in `failures`
      - `root_cause` (object[]) — recursive
        Same fields as `reason` in `failures`
      - `suppressed` (object[]) — recursive
        Same fields as `reason` in `failures`
    - `shard` (number)
    - `status` (string)
    - `primary` (boolean)
  - `skipped` (number)
- `valid` (boolean)
- `error` (string)
## Code examples

#### Console

```console
POST my-index-000001/_validate/query?q=user.id:kimchy
```

#### JavaScript

```javascript
const response = await client.indices.validateQuery({
  index: "my-index-000001",
  q: "user.id:kimchy",
});
```

#### Python

```python
resp = client.indices.validate_query(
    index="my-index-000001",
    q="user.id:kimchy",
)
```

#### curl

```curl
curl -X POST "$ELASTICSEARCH_URL/my-index-000001/_validate/query?q=user.id:kimchy" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY"
```

#### Java

```java
client.indices().validateQuery(v -> v
    .index("my-index-000001")
    .q("user.id:kimchy")
);
```

#### C#

```c#
var response = await client.Indices
    .ValidateQueryAsync(d1 => d1
        .Indices(new[] { "my-index-000001" })
        .QueryLuceneSyntax("user.id:kimchy")
    );
```

#### PHP

```php
$resp = $client->indices()->validateQuery([
    "index" => "my-index-000001",
    "q" => "user.id:kimchy",
]);
```

#### Ruby

```ruby
response = client.indices.validate_query(
  index: "my-index-000001",
  q: "user.id:kimchy"
)
```

## Response examples

#### 200

`application/json`

Generated from the API spec. Values are representative. Unions use the first variant; deeply nested or large bodies may omit fields.

```json
{
  "explanations": [
    {
      "error": "string",
      "explanation": "string",
      "index": "string",
      "shard": 0,
      "valid": false
    }
  ],
  "_shards": {
    "failed": 0,
    "successful": 0,
    "total": 0,
    "failures": [
      {
        "index": "string",
        "node": "string",
        "reason": {
          "type": "string",
          "reason": "string",
          "stack_trace": "string",
          "caused_by": {
            "type": "string",
            "stack_trace": "string"
          },
          "root_cause": [],
          "suppressed": []
        },
        "shard": 0,
        "status": "string",
        "primary": false
      }
    ],
    "skipped": 0
  },
  "valid": false,
  "error": "string"
}
```

