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

# Create an Nvidia inference endpoint

Availability: Generally available since 9.3

## Paths

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

#### Path parameters

- `task_type` (enum) — required
  The type of the inference task that the model will perform.
NOTE: The `chat_completion` task type only supports streaming and only through the _stream API.
  Values: `chat_completion`, `completion`, `rerank`, `text_embedding`
- `nvidia_inference_id` (string) — required
  The unique identifier of the inference endpoint.

## Description

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

## Required authorization

- Cluster privileges: `manage_inference`

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

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

## Request body

`application/json`

- `chunking_settings` (object) — optional
  The chunking configuration object.
Applies only to the `text_embedding` task type.
Not applicable to the `rerank`, `completion`, or `chat_completion` task types.
  - `max_chunk_size` (number · default: 250) — optional
    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) — optional
    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) — optional
    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) — optional
    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[]) — optional
    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) — optional
    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` (enum) — required
  The type of service supported for the specified task type. In this case, `nvidia`.
  Values: `nvidia`
- `service_settings` (object) — required
  Settings used to install the inference model. These settings are specific to the `nvidia` service.
  - `api_key` (string) — required
    A valid API key for your Nvidia endpoint.
Can be found in `API Keys` section of Nvidia account settings.
  - `url` (string) — optional
    The URL of the Nvidia model endpoint. If not provided, the default endpoint URL is used depending on the task type:

* For `text_embedding` task - `https://integrate.api.nvidia.com/v1/embeddings`.
* For `completion` and `chat_completion` tasks - `https://integrate.api.nvidia.com/v1/chat/completions`.
* For `rerank` task - `https://ai.api.nvidia.com/v1/retrieval/nvidia/reranking`.
  - `model_id` (string) — required
    The name of the model to use for the inference task.
Refer to the model's documentation for the name if needed.
Service has been tested and confirmed to be working with the following models:

* For `text_embedding` task - `nvidia/llama-3.2-nv-embedqa-1b-v2`.
* For `completion` and `chat_completion` tasks - `microsoft/phi-3-mini-128k-instruct`.
* For `rerank` task - `nv-rerank-qa-mistral-4b:1`.
Service doesn't support `text_embedding` task `baai/bge-m3` and `nvidia/nvclip` models due to them not recognizing the `input_type` parameter.
  - `max_input_tokens` (number) — optional
    For a `text_embedding` task, the maximum number of tokens per input. Inputs exceeding this value are truncated prior to sending to the Nvidia API.
  - `similarity` (enum) — optional
    For a `text_embedding` task, the similarity measure. One of cosine, dot_product, l2_norm.
    Values: `cosine`, `dot_product`, `l2_norm`
  - `rate_limit` (object) — optional
    This setting helps to minimize the number of rate limit errors returned from the Nvidia API.
By default, the `nvidia` service sets the number of requests allowed per minute to 3000.
    - `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` (object) — optional
  Settings to configure the inference task.
Applies only to the `text_embedding` task type.
Not applicable to the `rerank`, `completion`, or `chat_completion` task types.
These settings are specific to the task type you specified.
  - `input_type` (enum) — optional
    For a `text_embedding` task, type of input sent to the Nvidia endpoint.
Valid values are:

* `ingest`: Mapped to Nvidia's `passage` value in request. Used when generating embeddings during indexing.
* `search`: Mapped to Nvidia's `query` value in request. Used when generating embeddings during querying.

IMPORTANT: For Nvidia endpoints, if the `input_type` field is not specified, it defaults to `query`.
    Values: `ingest`, `search`
  - `truncate` (enum) — optional
    For a `text_embedding` task, the method used by the Nvidia model to handle inputs longer than the maximum token length.
Valid values are:

* `END`: When the input exceeds the maximum input token length, the end of the input is discarded.
* `NONE`: When the input exceeds the maximum input token length, an error is returned.
* `START`: When the input exceeds the maximum input token length, the start of the input is discarded.
    Values: `END`, `NONE`, `START`

## Response

`application/json`

- `chunking_settings` (object)
  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` (object)
  Settings specific to the service
- `task_settings` (object)
  Task settings specific to the service and task type
- `inference_id` (string)
  The inference ID
- `task_type` (enum)
  The task type
  Values: `chat_completion`, `completion`, `rerank`, `text_embedding`
## Code examples

#### Console

```console
PUT _inference/text_embedding/nvidia-text-embedding
{
    "service": "nvidia",
    "service_settings": {
        "url": "nvidia-embeddings-url",
        "api_key": "nvidia-embeddings-token",
        "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2"
    }
}
```

#### JavaScript

```javascript
const response = await client.inference.put({
  task_type: "text_embedding",
  inference_id: "nvidia-text-embedding",
  inference_config: {
    service: "nvidia",
    service_settings: {
      url: "nvidia-embeddings-url",
      api_key: "nvidia-embeddings-token",
      model_id: "nvidia/llama-3.2-nv-embedqa-1b-v2",
    },
  },
});
```

#### Python

```python
resp = client.inference.put(
    task_type="text_embedding",
    inference_id="nvidia-text-embedding",
    inference_config={
        "service": "nvidia",
        "service_settings": {
            "url": "nvidia-embeddings-url",
            "api_key": "nvidia-embeddings-token",
            "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2"
        }
    },
)
```

#### curl

```curl
curl -X PUT "$ELASTICSEARCH_URL/_inference/text_embedding/nvidia-text-embedding" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "nvidia",
    "service_settings": {
      "url": "nvidia-embeddings-url",
      "api_key": "nvidia-embeddings-token",
      "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2"
    }
  }'
```

#### Java

```java
client.inference().put(p -> p
    .inferenceId("nvidia-text-embedding")
    .taskType(TaskType.TextEmbedding)
    .inferenceConfig(i -> i
        .service("nvidia")
        .serviceSettings(JsonData.fromJson("""
{"url":"nvidia-embeddings-url","api_key":"nvidia-embeddings-token","model_id":"nvidia/llama-3.2-nv-embedqa-1b-v2"}
"""))
    )
);
```

#### C#

```c#
var response = await client.Inference
    .PutAsync(new PutInferenceRequest()
    {
        InferenceId = "nvidia-text-embedding",
        TaskType = TaskType.TextEmbedding,
        InferenceConfig = new()
        {
            Service = "nvidia",
            ServiceSettings = JsonSerializer.Deserialize<JsonElement>("""
            {
              "url": "nvidia-embeddings-url",
              "api_key": "nvidia-embeddings-token",
              "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2"
            }
            """)
        }
    });
```

#### PHP

```php
$resp = $client->inference()->put([
    "task_type" => "text_embedding",
    "inference_id" => "nvidia-text-embedding",
    "body" => [
        "service" => "nvidia",
        "service_settings" => [
            "url" => "nvidia-embeddings-url",
            "api_key" => "nvidia-embeddings-token",
            "model_id" => "nvidia/llama-3.2-nv-embedqa-1b-v2",
        ],
    ],
]);
```

#### Ruby

```ruby
response = client.inference.put(
  task_type: "text_embedding",
  inference_id: "nvidia-text-embedding",
  body: {
    "service": "nvidia",
    "service_settings": {
      "url": "nvidia-embeddings-url",
      "api_key": "nvidia-embeddings-token",
      "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2"
    }
  }
)
```

## Response examples

#### A text embedding task

A successful response when creating an Nvidia `text_embedding` inference endpoint.

```json
{
  "inference_id": "nvidia-text-embedding",
  "task_type": "text_embedding",
  "service": "nvidia",
  "service_settings": {
    "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2",
    "url": "nvidia-embeddings-url",
    "rate_limit": {
      "requests_per_minute": 3000
    },
    "dimensions": 2048,
    "similarity": "dot_product"
  },
  "chunking_settings": {
    "strategy": "sentence",
    "max_chunk_size": 250,
    "sentence_overlap": 1
  }
}
```

#### A text embedding task with custom `task_settings` and no `url` parameter

A successful response when creating an Nvidia `text_embedding` inference endpoint with custom `task_settings` and no `url` parameter.

```json
{
  "inference_id": "nvidia-text-embedding",
  "task_type": "text_embedding",
  "service": "nvidia",
  "service_settings": {
    "model_id": "nvidia/llama-3.2-nv-embedqa-1b-v2",
    "rate_limit": {
      "requests_per_minute": 3000
    },
    "dimensions": 2048,
    "similarity": "dot_product"
  },
  "task_settings": {
    "input_type": "ingest",
    "truncate": "start"
  },
  "chunking_settings": {
    "strategy": "sentence",
    "max_chunk_size": 250,
    "sentence_overlap": 1
  }
}
```

#### A completion task

A successful response when creating an Nvidia `completion` inference endpoint.

```json
{
  "inference_id": "nvidia-completion",
  "task_type": "completion",
  "service": "nvidia",
  "service_settings": {
    "model_id": "microsoft/phi-3-mini-128k-instruct",
    "url": "nvidia-completion-url",
    "rate_limit": {
      "requests_per_minute": 3000
    }
  }
}
```

#### A completion task without `url` parameter

A successful response when creating an Nvidia `completion` inference endpoint without `url` parameter.

```json
{
  "inference_id": "nvidia-completion",
  "task_type": "completion",
  "service": "nvidia",
  "service_settings": {
    "model_id": "microsoft/phi-3-mini-128k-instruct",
    "rate_limit": {
      "requests_per_minute": 3000
    }
  }
}
```

#### A chat completion task

A successful response when creating an Nvidia `chat_completion` inference endpoint.

```json
{
  "inference_id": "nvidia-chat-completion",
  "task_type": "chat_completion",
  "service": "nvidia",
  "service_settings": {
    "model_id": "microsoft/phi-3-mini-128k-instruct",
    "url": "nvidia-chat-completion-url",
    "rate_limit": {
      "requests_per_minute": 3000
    }
  }
}
```

#### A chat completion task without `url` parameter

A successful response when creating an Nvidia `chat_completion` inference endpoint without `url` parameter.

```json
{
  "inference_id": "nvidia-chat-completion",
  "task_type": "chat_completion",
  "service": "nvidia",
  "service_settings": {
    "model_id": "microsoft/phi-3-mini-128k-instruct",
    "rate_limit": {
      "requests_per_minute": 3000
    }
  }
}
```

#### A rerank task

A successful response when creating an Nvidia `rerank` inference endpoint.

```json
{
  "inference_id": "nvidia-rerank",
  "task_type": "rerank",
  "service": "nvidia",
  "service_settings": {
    "model_id": "nv-rerank-qa-mistral-4b:1",
    "url": "nvidia-rerank-url",
    "rate_limit": {
      "requests_per_minute": 3000
    }
  }
}
```

#### A rerank task without `url` parameter

A successful response when creating an Nvidia `rerank` inference endpoint without `url` parameter.

```json
{
  "inference_id": "nvidia-rerank",
  "task_type": "rerank",
  "service": "nvidia",
  "service_settings": {
    "model_id": "nv-rerank-qa-mistral-4b:1",
    "rate_limit": {
      "requests_per_minute": 3000
    }
  }
}
```

