---
type: api
title: Create an Contextual AI inference endpoint
description: Create an inference endpoint to perform an inference task with the `contexualai` service.
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-inference-put-contextualai
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-inference-put-contextualai
products:
  - Elasticsearch
---

# Create an Contextual AI inference endpoint

Availability: 9.2+

## Paths

- `PUT` `/_inference/{task_type}/{contextualai_inference_id}`

- [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

- `task_type` (enum TaskTypeContextualAI)
  The type of the inference task that the model will perform.
  Values: `rerank`
- `contextualai_inference_id` (string Id)
  The unique identifier of the inference endpoint.

## Description

Create an inference endpoint to perform an inference task with the `contexualai` service.

To review the available `rerank` models, refer to <https://docs.contextual.ai/api-reference/rerank/rerank#body-model>.

## Required authorization

* Cluster privileges: `manage_inference`

## Query String Parameters

- `timeout` (string Duration · default: 30s)
  Specifies the amount of time to wait for the inference endpoint to be created.

## Request Body

`application/json`

- `service` (enum ContextualAIServiceType) — required
  The type of service supported for the specified task type. In this case, `contextualai`.
  Values: `contextualai`
- `service_settings` ({} ContextualAIServiceSettings) — required
  Settings used to install the inference model. These settings are specific to the `contextualai` service.
  - `api_key` (string) — required
    A valid API key for your Contexutual AI account.

IMPORTANT: You need to provide the API key only once, during the inference model creation.
The get inference endpoint API does not retrieve your API key.
  - `model_id` (string) — required
    The name of the model to use for the inference task.
Refer to the Contextual AI documentation for the list of available rerank models.
  - `rate_limit` ({} RateLimitSetting) — optional
    This setting helps to minimize the number of rate limit errors returned from Contextual AI.
The `contextualai` service sets a default number of requests allowed per minute depending on the task type.
For `rerank`, it is set to `1000`.
    - `requests_per_minute` (number) — optional
      The number of requests allowed per minute.
By default, the number of requests allowed per minute is set by each service as follows:

* `alibabacloud-ai-search` service: `1000`
* `amazonbedrock` service: `240`
* `anthropic` service: `50`
* `azureaistudio` service: `240`
* `azureopenai` service and task type `text_embedding`: `1440`
* `azureopenai` service and task types `completion` or `chat_completion`: `120`
* `cohere` service: `10000`
* `contextualai` service: `1000`
* `elastic` service and task type `chat_completion`: `240`
* `fireworksai` service: `6000`
* `googleaistudio` service: `360`
* `googlevertexai` service: `30000`
* `hugging_face` service: `3000`
* `jinaai` service: `2000`
* `llama` service: `3000`
* `mistral` service: `240`
* `openai` service and task type `text_embedding`: `3000`
* `openai` service and task type `completion`: `500`
* `openshift_ai` service: `3000`
* `voyageai` service: `2000`
* `watsonxai` service: `120`
- `task_settings` ({} ContextualAITaskSettings) — optional
  Settings to configure the inference task.
These settings are specific to the task type you specified.
  - `instruction` (string) — optional
    Instructions for the reranking model. Refer to <https://docs.contextual.ai/api-reference/rerank/rerank#body-instruction>
Only for the `rerank` task type.
  - `top_k` (number) — optional
    The number of most relevant documents to return.
If not specified, the reranking results of all documents will be returned.
Only for the `rerank` task type.

## Response

`application/json`

- `chunking_settings` ({} InferenceChunkingSettings)
  The chunking configuration object.
Applies only to the `embedding`, `sparse_embedding` and `text_embedding` task types.
Not applicable to the `rerank`, `completion`, or `chat_completion` task types.
  - `max_chunk_size` (number · default: 250)
    The maximum size of a chunk in words.
This value cannot be lower than `20` (for `sentence` strategy) or `10` (for `word` strategy).
This value should not exceed the window size for the associated model.
  - `overlap` (number · default: 100)
    The number of overlapping words for chunks.
It is applicable only to a `word` chunking strategy.
This value cannot be higher than half the `max_chunk_size` value.
  - `sentence_overlap` (number · default: 1)
    The number of overlapping sentences for chunks.
It is applicable only for a `sentence` chunking strategy.
It can be either `1` or `0`.
  - `separator_group` (string)
    Only applicable to the `recursive` strategy and required when using it.

Sets a predefined list of separators in the saved chunking settings based on the selected text type.
Values can be `markdown` or `plaintext`.

Using this parameter is an alternative to manually specifying a custom `separators` list.
  - `separators` ([] string)
    Only applicable to the `recursive` strategy and required when using it.

A list of strings used as possible split points when chunking text.

Each string can be a plain string or a regular expression (regex) pattern.
The system tries each separator in order to split the text, starting from the first item in the list.

After splitting, it attempts to recombine smaller pieces into larger chunks that stay within
the `max_chunk_size` limit, to reduce the total number of chunks generated.
  - `strategy` (string · default: sentence)
    The chunking strategy: `sentence`, `word`, `none` or `recursive`.

 * If `strategy` is set to `recursive`, you must also specify:

- `max_chunk_size`
- either `separators` or`separator_group`

Learn more about different chunking strategies in the linked documentation.
- `service` (string)
  The service type
- `service_settings` (ServiceSettings)
  Settings specific to the service
- `task_settings` (TaskSettings)
  Task settings specific to the service and task type
- `inference_id` (string)
  The inference Id
- `task_type` (enum TaskTypeContextualAI)
  The task type
  Values: `rerank`
## Code Examples

#### Console

```console
PUT _inference/rerank/contextualai-rerank
{
    "service": "contextualai",
    "service_settings": {
        "api_key": "ContextualAI-Api-key",
        "model_id": "ctxl-rerank-v2-instruct-multilingual-mini"
    },
    "task_settings": {
        "instruction": "Rerank the following documents based on their relevance to the query.",
        "top_k": 3
    }
}
```

#### JavaScript

```javascript
const response = await client.inference.put({
  task_type: "rerank",
  inference_id: "contextualai-rerank",
  inference_config: {
    service: "contextualai",
    service_settings: {
      api_key: "ContextualAI-Api-key",
      model_id: "ctxl-rerank-v2-instruct-multilingual-mini",
    },
    task_settings: {
      instruction:
        "Rerank the following documents based on their relevance to the query.",
      top_k: 3,
    },
  },
});
```

#### Python

```python
resp = client.inference.put(
    task_type="rerank",
    inference_id="contextualai-rerank",
    inference_config={
        "service": "contextualai",
        "service_settings": {
            "api_key": "ContextualAI-Api-key",
            "model_id": "ctxl-rerank-v2-instruct-multilingual-mini"
        },
        "task_settings": {
            "instruction": "Rerank the following documents based on their relevance to the query.",
            "top_k": 3
        }
    },
)
```

#### curl

```curl
curl -X PUT "$ELASTICSEARCH_URL/_inference/rerank/contextualai-rerank" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "contextualai",
    "service_settings": {
      "api_key": "ContextualAI-Api-key",
      "model_id": "ctxl-rerank-v2-instruct-multilingual-mini"
    },
    "task_settings": {
      "instruction": "Rerank the following documents based on their relevance to the query.",
      "top_k": 3
    }
  }'
```

#### Java

```java
client.inference().put(p -> p
    .inferenceId("contextualai-rerank")
    .taskType(TaskType.Rerank)
    .inferenceConfig(i -> i
        .service("contextualai")
        .serviceSettings(JsonData.fromJson("""
{"api_key":"ContextualAI-Api-key","model_id":"ctxl-rerank-v2-instruct-multilingual-mini"}
"""))
        .taskSettings(JsonData.fromJson("""
{"instruction":"Rerank the following documents based on their relevance to the query.","top_k":3}
"""))
    )
);
```

#### C#

```c#
var response = await client.Inference
    .PutAsync(new PutInferenceRequest()
    {
        InferenceId = "contextualai-rerank",
        TaskType = TaskType.Rerank,
        InferenceConfig = new()
        {
            Service = "contextualai",
            ServiceSettings = JsonSerializer.Deserialize<JsonElement>("""
            {
              "api_key": "ContextualAI-Api-key",
              "model_id": "ctxl-rerank-v2-instruct-multilingual-mini"
            }
            """),
            TaskSettings = JsonSerializer.Deserialize<JsonElement>("""
            {
              "instruction": "Rerank the following documents based on their relevance to the query.",
              "top_k": 3
            }
            """)
        }
    });
```

#### PHP

```php
$resp = $client->inference()->put([
    "task_type" => "rerank",
    "inference_id" => "contextualai-rerank",
    "body" => [
        "service" => "contextualai",
        "service_settings" => [
            "api_key" => "ContextualAI-Api-key",
            "model_id" => "ctxl-rerank-v2-instruct-multilingual-mini",
        ],
        "task_settings" => [
            "instruction" => "Rerank the following documents based on their relevance to the query.",
            "top_k" => 3,
        ],
    ],
]);
```

#### Ruby

```ruby
response = client.inference.put(
  task_type: "rerank",
  inference_id: "contextualai-rerank",
  body: {
    "service": "contextualai",
    "service_settings": {
      "api_key": "ContextualAI-Api-key",
      "model_id": "ctxl-rerank-v2-instruct-multilingual-mini"
    },
    "task_settings": {
      "instruction": "Rerank the following documents based on their relevance to the query.",
      "top_k": 3
    }
  }
)
```

