---
type: api
title: Get async search results
description: Retrieve the results of a previously submitted asynchronous search request.
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v8/operation/operation-async-search-get
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v8/operation/operation-async-search-get
products:
  - Elasticsearch
---

# Get async search results

Availability: 7.7+

## Paths

- `GET` `/_async_search/{id}`

- [Api key auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v8/authentication#apikeyauth)
- [Basic auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v8/authentication#basicauth)
- [Bearer auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v8/authentication#bearerauth)

#### Path Parameters

- `id` (string Id)
  A unique identifier for the async search.

## Description

Retrieve the results of a previously submitted asynchronous search request.
If the Elasticsearch security features are enabled, access to the results of a specific async search is restricted to the user or API key that submitted it.

## Query String Parameters

- `keep_alive` (string Duration)
  The length of time that the async search should be available in the cluster.
When not specified, the `keep_alive` set with the corresponding submit async request will be used.
Otherwise, it is possible to override the value and extend the validity of the request.
When this period expires, the search, if still running, is cancelled.
If the search is completed, its saved results are deleted.
- `typed_keys` (boolean)
  Specify whether aggregation and suggester names should be prefixed by their respective types in the response
- `wait_for_completion_timeout` (string Duration)
  Specifies to wait for the search to be completed up until the provided timeout.
Final results will be returned if available before the timeout expires, otherwise the currently available results will be returned once the timeout expires.
By default no timeout is set meaning that the currently available results will be returned without any additional wait.

## Response

`application/json`

- `id` (string Id)
- `is_partial` (boolean)
  When the query is no longer running, this property indicates whether the search failed or was successfully completed on all shards.
While the query is running, `is_partial` is always set to `true`.
- `is_running` (boolean)
  Indicates whether the search is still running or has completed.

> info
> If the search failed after some shards returned their results or the node that is coordinating the async search dies, results may be partial even though `is_running` is `false`.
- `expiration_time` (DateTime)
  Indicates when the async search will expire.
- `expiration_time_in_millis` (EpochTimeUnitMillis)
- `start_time` (DateTime)
- `start_time_in_millis` (EpochTimeUnitMillis)
- `completion_time` (DateTime)
  Indicates when the async search completed.
It is present only when the search has completed.
- `completion_time_in_millis` (EpochTimeUnitMillis)
- `error` ({} ErrorCause)
  - `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` ({} ErrorCause) — recursive
    Same fields as `error`
  - `root_cause` ([] ErrorCause) — recursive
    Same fields as `error`
  - `suppressed` ([] ErrorCause) — recursive
    Same fields as `error`
- `response` ({} AsyncSearch)
  - `aggregations` (map string to {} Aggregate)
    Partial aggregations results, coming from the shards that have already completed running the query.
    See [Aggregate](https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v8/types/_types-aggregations-aggregate)
  - `_clusters` ({} ClusterStatistics)
    - `skipped` (number)
    - `successful` (number)
    - `total` (number)
    - `running` (number)
    - `partial` (number)
    - `failed` (number)
    - `details` (map string to ClusterDetails)
      Map values ({} ClusterDetails)
      - `status` (enum ClusterSearchStatus)
        Values: `running`, `successful`, `partial`, `skipped`, `failed`
      - `indices` (string)
      - `took` (DurationValueUnitMillis)
      - `timed_out` (boolean)
      - `_shards` ({} ShardStatistics)
        - `failed` (number uint)
          The number of shards the operation or search attempted to run on but failed.
        - `successful` (number uint)
          The number of shards the operation or search succeeded on.
        - `total` (number uint)
          The number of shards the operation or search will run on overall.
        - `failures` ([] ShardFailure)
          - `index` (string IndexName)
          - `node` (string)
          - `reason` ({} ErrorCause)
            - `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` ({} ErrorCause) — recursive
              Same fields as `reason` in `failures`
            - `root_cause` ([] ErrorCause) — recursive
              Same fields as `reason` in `failures`
            - `suppressed` ([] ErrorCause) — recursive
              Same fields as `reason` in `failures`
          - `shard` (number)
          - `status` (string)
          - `primary` (boolean)
        - `skipped` (number uint)
      - `failures` ([] ShardFailure)
        Same fields as `failures` in `_shards`
  - `fields` (map string to object)
  - `hits` ({} HitsMetadata)
    - `total` (union oneOf)
      Total hit count information, present only if `track_total_hits` wasn't `false` in the search request.
      - **TotalHits**
        - `relation` (enum TotalHitsRelation)
          

Supported values include:
  - `eq`: Accurate
  - `gte`: Lower bound, including returned events or sequences
          Values: `eq`, `gte`
        - `value` (number)
      - **number**
    - `hits` ([] Hit)
      - `_index` (string IndexName)
      - `_id` (string Id)
      - `_score` (union number | string) — nullable
      - `_explanation` ({} Explanation)
        - `description` (string)
        - `details` ([] ExplanationDetail)
          - `description` (string)
          - `details` ([] ExplanationDetail) — recursive
            Same fields as `details` in `_explanation`
          - `value` (number)
        - `value` (number)
      - `fields` (map string to object)
      - `highlight` (map string to string)
      - `inner_hits` (map string to InnerHitsResult)
        Map values ({} InnerHitsResult)
        - `hits` ({} HitsMetadata) — recursive
          Same fields as `hits` in `response`
      - `matched_queries` (union oneOf)
        One of: `string[]` or `string to number`
      - `_nested` ({} NestedIdentity)
        - `field` (string Field)
        - `offset` (number)
        - `_nested` ({} NestedIdentity) — recursive
          Same fields as `_nested` in `hits`
      - `_ignored` ([] string)
      - `ignored_field_values` (map string to FieldValue)
      - `_shard` (string)
      - `_node` (string)
      - `_routing` (string)
      - `_source` (object)
      - `_rank` (number)
      - `_seq_no` (number SequenceNumber)
      - `_primary_term` (number)
      - `_version` (number VersionNumber)
      - `sort` (SortResults)
    - `max_score` (union number | string) — nullable
  - `max_score` (number)
  - `num_reduce_phases` (number)
    Indicates how many reductions of the results have been performed.
If this number increases compared to the last retrieved results for a get asynch search request, you can expect additional results included in the search response.
  - `profile` ({} Profile)
    - `shards` ([] ShardProfile)
      - `aggregations` ([] AggregationProfile)
        - `breakdown` ({} AggregationBreakdown)
          - `build_aggregation` (number)
          - `build_aggregation_count` (number)
          - `build_leaf_collector` (number)
          - `build_leaf_collector_count` (number)
          - `collect` (number)
          - `collect_count` (number)
          - `initialize` (number)
          - `initialize_count` (number)
          - `post_collection` (number)
          - `post_collection_count` (number)
          - `reduce` (number)
          - `reduce_count` (number)
        - `description` (string)
        - `time_in_nanos` (DurationValueUnitNanos)
        - `type` (string)
        - `debug` ({} AggregationProfileDebug)
          - `segments_with_multi_valued_ords` (number)
          - `collection_strategy` (string)
          - `segments_with_single_valued_ords` (number)
          - `total_buckets` (number)
          - `built_buckets` (number)
          - `result_strategy` (string)
          - `has_filter` (boolean)
          - `delegate` (string)
          - `delegate_debug` ({} AggregationProfileDebug) — recursive
            Same fields as `debug` in `aggregations`
          - `chars_fetched` (number)
          - `extract_count` (number)
          - `extract_ns` (number)
          - `values_fetched` (number)
          - `collect_analyzed_ns` (number)
          - `collect_analyzed_count` (number)
          - `surviving_buckets` (number)
          - `ordinals_collectors_used` (number)
          - `ordinals_collectors_overhead_too_high` (number)
          - `string_hashing_collectors_used` (number)
          - `numeric_collectors_used` (number)
          - `empty_collectors_used` (number)
          - `deferred_aggregators` ([] string)
          - `segments_with_doc_count_field` (number)
          - `segments_with_deleted_docs` (number)
          - `filters` ([] AggregationProfileDelegateDebugFilter)
            - `results_from_metadata` (number)
            - `query` (string)
            - `specialized_for` (string)
            - `segments_counted_in_constant_time` (number)
          - `segments_counted` (number)
          - `segments_collected` (number)
          - `map_reducer` (string)
          - `brute_force_used` (number)
          - `dynamic_pruning_attempted` (number)
          - `dynamic_pruning_used` (number)
          - `skipped_due_to_no_data` (number)
        - `children` ([] AggregationProfile) — recursive
          Same fields as `aggregations` in `shards`
      - `cluster` (string)
      - `dfs` ({} DfsProfile)
        - `statistics` ({} DfsStatisticsProfile)
          - `type` (string)
          - `description` (string)
          - `time` (string Duration)
          - `time_in_nanos` (DurationValueUnitNanos)
          - `breakdown` ({} DfsStatisticsBreakdown)
            - `collection_statistics` (number)
            - `collection_statistics_count` (number)
            - `create_weight` (number)
            - `create_weight_count` (number)
            - `rewrite` (number)
            - `rewrite_count` (number)
            - `term_statistics` (number)
            - `term_statistics_count` (number)
          - `debug` (map string to object)
          - `children` ([] DfsStatisticsProfile) — recursive
            Same fields as `statistics` in `dfs`
        - `knn` ([] DfsKnnProfile)
          - `vector_operations_count` (number)
          - `query` ([] KnnQueryProfileResult)
            - `type` (string)
            - `description` (string)
            - `time` (string Duration)
            - `time_in_nanos` (DurationValueUnitNanos)
            - `breakdown` ({} KnnQueryProfileBreakdown)
              - `advance` (number)
              - `advance_count` (number)
              - `build_scorer` (number)
              - `build_scorer_count` (number)
              - `compute_max_score` (number)
              - `compute_max_score_count` (number)
              - `count_weight` (number)
              - `count_weight_count` (number)
              - `create_weight` (number)
              - `create_weight_count` (number)
              - `match` (number)
              - `match_count` (number)
              - `next_doc` (number)
              - `next_doc_count` (number)
              - `score` (number)
              - `score_count` (number)
              - `set_min_competitive_score` (number)
              - `set_min_competitive_score_count` (number)
              - `shallow_advance` (number)
              - `shallow_advance_count` (number)
            - `debug` (map string to object)
            - `children` ([] KnnQueryProfileResult) — recursive
              Same fields as `query` in `knn`
          - `rewrite_time` (number)
          - `collector` ([] KnnCollectorResult)
            - `name` (string)
            - `reason` (string)
            - `time` (string Duration)
            - `time_in_nanos` (DurationValueUnitNanos)
            - `children` ([] KnnCollectorResult) — recursive
              Same fields as `collector` in `knn`
      - `fetch` ({} FetchProfile)
        - `type` (string)
        - `description` (string)
        - `time_in_nanos` (DurationValueUnitNanos)
        - `breakdown` ({} FetchProfileBreakdown)
          - `load_source` (number)
          - `load_source_count` (number)
          - `load_stored_fields` (number)
          - `load_stored_fields_count` (number)
          - `next_reader` (number)
          - `next_reader_count` (number)
          - `process_count` (number)
          - `process` (number)
        - `debug` ({} FetchProfileDebug)
          - `stored_fields` ([] string)
          - `fast_path` (number)
        - `children` ([] FetchProfile) — recursive
          Same fields as `fetch` in `shards`
      - `id` (string)
      - `index` (string IndexName)
      - `node_id` (string)
      - `searches` ([] SearchProfile)
        - `collector` ([] Collector)
          - `name` (string)
          - `reason` (string)
          - `time_in_nanos` (DurationValueUnitNanos)
          - `children` ([] Collector) — recursive
            Same fields as `collector` in `searches`
        - `query` ([] QueryProfile)
          - `breakdown` ({} QueryBreakdown)
            - `advance` (number)
            - `advance_count` (number)
            - `build_scorer` (number)
            - `build_scorer_count` (number)
            - `create_weight` (number)
            - `create_weight_count` (number)
            - `match` (number)
            - `match_count` (number)
            - `shallow_advance` (number)
            - `shallow_advance_count` (number)
            - `next_doc` (number)
            - `next_doc_count` (number)
            - `score` (number)
            - `score_count` (number)
            - `compute_max_score` (number)
            - `compute_max_score_count` (number)
            - `count_weight` (number)
            - `count_weight_count` (number)
            - `set_min_competitive_score` (number)
            - `set_min_competitive_score_count` (number)
          - `description` (string)
          - `time_in_nanos` (DurationValueUnitNanos)
          - `type` (string)
          - `children` ([] QueryProfile) — recursive
            Same fields as `query` in `searches`
        - `rewrite_time` (number)
      - `shard_id` (number)
  - `pit_id` (string Id)
  - `_scroll_id` (string ScrollId)
  - `_shards` ({} ShardStatistics)
    Indicates how many shards have run the query.
Note that in order for shard results to be included in the search response, they need to be reduced first.
    Same fields as `_shards` in `details`
  - `suggest` (map string to Suggest)
  - `terminated_early` (boolean)
  - `timed_out` (boolean)
  - `took` (number)
## Code Examples

#### Console

```console
GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
```

#### JavaScript

```javascript
const response = await client.asyncSearch.get({
  id: "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
});
```

#### Python

```python
resp = client.async_search.get(
    id="FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
)
```

#### curl

```curl
curl -X GET "$ELASTICSEARCH_URL/_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY"
```

#### Java

```java
client.asyncSearch().get(g -> g
    .id("FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=")
);
```

#### C#

```c#
var response = await client.AsyncSearch.GetAsync<MyDocument>(id: "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=");
```

#### PHP

```php
$resp = $client->asyncSearch()->get([
    "id" => "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
]);
```

#### Ruby

```ruby
response = client.async_search.get(
  id: "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc="
)
```

## Response Examples

#### Async search get response example1

A succesful response from `GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=`.

```json
{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
  "is_partial" : false, 
  "is_running" : false, 
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986, 
  "completion_time_in_millis" : 1583945903130, 
  "response" : {
    "took" : 12144,
    "timed_out" : false,
    "num_reduce_phases" : 46, 
    "_shards" : {
      "total" : 562,
      "successful" : 188, 
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 456433,
        "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
    },
    "aggregations" : { 
      "sale_date" :  {
        "buckets" : []
      }
    }
  }
}
```

