---
type: api
title: Create an enrich policy
description: Creates an enrich policy.
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-enrich-put-policy
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-enrich-put-policy
products:
  - Elasticsearch
---

# Create an enrich policy

Availability: 7.5+

## Paths

- `PUT` `/_enrich/policy/{name}`

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

#### Path Parameters

- `name` (string Name)
  Name of the enrich policy to create or update.

## Description

Creates an enrich policy.

## Query String Parameters

- `master_timeout` (string Duration · default: 30s)
  Period to wait for a connection to the master node.

## Request Body

`application/json`

- `geo_match` ({} Policy) — optional
  Matches enrich data to incoming documents based on a `geo_shape` query.
  - `enrich_fields` (string Fields) — required
  - `indices` (string Indices) — required
  - `match_field` (string Field) — required
  - `query` ({} QueryContainer) — optional
    See [QueryContainer](https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/types/_types-query_dsl-querycontainer)
  - `name` (string Name) — optional
  - `elasticsearch_version` (string) — optional
- `match` ({} Policy) — optional
  Matches enrich data to incoming documents based on a `term` query.
  - `enrich_fields` (string Fields) — required
  - `indices` (string Indices) — required
  - `match_field` (string Field) — required
  - `query` ({} QueryContainer) — optional
    See [QueryContainer](https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/types/_types-query_dsl-querycontainer)
  - `name` (string Name) — optional
  - `elasticsearch_version` (string) — optional
- `range` ({} Policy) — optional
  Matches a number, date, or IP address in incoming documents to a range in the enrich index based on a `term` query.
  - `enrich_fields` (string Fields) — required
  - `indices` (string Indices) — required
  - `match_field` (string Field) — required
  - `query` ({} QueryContainer) — optional
    See [QueryContainer](https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/types/_types-query_dsl-querycontainer)
  - `name` (string Name) — optional
  - `elasticsearch_version` (string) — optional

## Response

`application/json`

- `acknowledged` (boolean)
  For a successful response, this value is always true. On failure, an exception is returned instead.
## Code Examples

#### Console

```console
PUT /_enrich/policy/postal_policy
{
  "geo_match": {
    "indices": "postal_codes",
    "match_field": "location",
    "enrich_fields": [ "location", "postal_code" ]
  }
}
```

#### JavaScript

```javascript
const response = await client.enrich.putPolicy({
  name: "postal_policy",
  geo_match: {
    indices: "postal_codes",
    match_field: "location",
    enrich_fields: ["location", "postal_code"],
  },
});
```

#### Python

```python
resp = client.enrich.put_policy(
    name="postal_policy",
    geo_match={
        "indices": "postal_codes",
        "match_field": "location",
        "enrich_fields": [
            "location",
            "postal_code"
        ]
    },
)
```

#### curl

```curl
curl -X PUT "$ELASTICSEARCH_URL/_enrich/policy/postal_policy" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "geo_match": {
      "indices": "postal_codes",
      "match_field": "location",
      "enrich_fields": [
        "location",
        "postal_code"
      ]
    }
  }'
```

#### Java

```java
client.enrich().putPolicy(p -> p
    .geoMatch(g -> g
        .enrichFields(List.of("location","postal_code"))
        .indices("postal_codes")
        .matchField("location")
    )
    .name("postal_policy")
);
```

#### C#

```c#
var response = await client.Enrich
    .PutPolicyAsync(name: "postal_policy", d1 => d1
        .GeoMatch(d2 => d2
            .EnrichFields(x => x.Location, x => x.PostalCode)
            .Indices(new[] { "postal_codes" })
            .MatchField(x => x.Location)
        )
    );
```

#### PHP

```php
$resp = $client->enrich()->putPolicy([
    "name" => "postal_policy",
    "body" => [
        "geo_match" => [
            "indices" => "postal_codes",
            "match_field" => "location",
            "enrich_fields" => array(
                "location",
                "postal_code",
            ),
        ],
    ],
]);
```

#### Ruby

```ruby
response = client.enrich.put_policy(
  name: "postal_policy",
  body: {
    "geo_match": {
      "indices": "postal_codes",
      "match_field": "location",
      "enrich_fields": [
        "location",
        "postal_code"
      ]
    }
  }
)
```

