---
title: "Provider fields"
manual: "TYPO3 LLM Extension"
version: "0.35"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:configuration-provider@0.35"
source: "Configuration/ProviderFields.rst"
modified: "2026-09-16T22:09:16+00:00"
---

# Provider fields

Providers represent API connections with credentials.

![LLM providers list with connection status](../Images/backend-providers.png)

## Required

-   **identifier**

    -   *Type:* string
    -   *Required:* true

    Unique slug for programmatic access
    (e.g., `openai-prod`, `ollama-local`).

-   **name**

    -   *Type:* string
    -   *Required:* true

    Display name shown in the backend.

-   **adapter_type**

    -   *Type:* string
    -   *Required:* true

    The protocol to use:

    -   `openai` — OpenAI API
    -   `anthropic` — Anthropic Claude API
    -   `gemini` — Google Gemini API
    -   `ollama` — Local Ollama instance
    -   `openrouter` — OpenRouter multi-model API
    -   `mistral` — Mistral AI API
    -   `groq` — Groq inference API
    -   `azure_openai` — Azure OpenAI Service
    -   `custom` — OpenAI-compatible endpoint

-   **api_key**

    -   *Type:* string

    API key for authentication. Stored as a
    [nr-vault](https://github.com/netresearch/t3x-nr-vault)
    UUID identifier (envelope encryption).
    nr-llm never stores raw API keys in the
    database. Required for cloud providers
    (OpenAI, Claude, Gemini, etc.); not required
    for local providers like Ollama.

## Optional

-   **endpoint_url**

    -   *Type:* string
    -   *Default:* (adapter default)

    Custom API endpoint URL.

-   **organization_id**

    -   *Type:* string
    -   *Default:* (empty)

    Organization ID (OpenAI, Azure). Sent as the `OpenAI-Organization`
    request header by the OpenAI-compatible adapters (`openai`,
    `azure_openai`, `together`, `fireworks`, `perplexity`, `custom`).

-   **timeout**

    -   *Type:* integer
    -   *Default:* 120

    Maximum time in seconds to wait for the complete API response. A
    configuration- or model-level timeout overrides this value per request.

-   **max_retries**

    -   *Type:* integer
    -   *Default:* 3

    Number of retries after the first failed request (0 = try once, no
    retries). Timed-out requests are not retried.

-   **options**

    -   *Type:* JSON
    -   *Default:* {}

    Additional adapter-specific options. Supported key:

    -   **`customHeaders`**

        Object mapping header names to values, sent on every API request
        (including streaming), for example:

        ```json
        {"customHeaders": {"X-Custom-Header": "value"}}
        ```

        Custom headers are applied after the adapter's own headers, so a
        colliding name overrides the adapter value — a mistyped
        `Content-Type` breaks that provider's calls.

    > [!NOTE]
    > A per-provider `proxy` is not supported; TYPO3's global HTTP proxy
    > configuration (`$GLOBALS['TYPO3_CONF_VARS']['HTTP']['proxy']`)
    > applies to all outgoing provider requests.
