> ## Documentation Index
> Fetch the complete documentation index at: https://docs.2501.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# LLM Provider

> MDX frontmatter reference for LLM provider resources

**Subdirectory:** `llm_providers/` · **Body:** must be empty

Declares an LLM endpoint the engine can call, matching what you'd otherwise configure at **Settings → Providers**. See [Providers](/0.11/configure/providers) for the concepts behind each field.

## Frontmatter

| Field                | Type           | Required                       | Default | Description                                                                                                                                                  |
| -------------------- | -------------- | ------------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `org`                | string \| null | No                             | tenant  | Organization name. Omit (or `null`) for a tenant-wide provider available to every org.                                                                       |
| `key`                | string         | **Yes**                        | -       | Short identifier, unique within your tenant.                                                                                                                 |
| `kind`               | string         | **Yes**                        | -       | Provider type: `openai`, `anthropic`, `mistral`, `deepseek`, `cohere`, `openrouter`, `togetherai`, `openai-compatible`, `anthropic-compatible`, or `azure`.  |
| `requires_auth`      | boolean        | No                             | `true`  | Turn off for endpoints with no key (e.g. self-hosted on a private network).                                                                                  |
| `api_key_credential` | string \| null | When `requires_auth` is `true` | -       | Name of the [Credential](/0.11/configure/resources/credentials) holding the API key.                                                                         |
| `base_url`           | string \| null | Compatible & Azure kinds       | -       | Endpoint root. Required for `openai-compatible`, `anthropic-compatible`, and `azure`; leave unset for native kinds.                                          |
| `provider_args`      | object         | No                             | -       | Kind-specific options. For `kind: azure`: `apiVersion` (default `2025-04-01-preview`) and `apiMode` (`chat` \| `responses` \| `completion`, default `chat`). |
| `enabled`            | boolean        | No                             | `true`  | Disabling makes all of its models unavailable without deleting anything.                                                                                     |

## Fields NOT supported

* `id`, `tenant_id`, `created_at`, `updated_at` - system-set
* `auth_header_name` - configure that from Command Center; not yet part of the CLI schema

## Example

```mdx llm_providers/openai.mdx theme={null}
---
key: openai
kind: openai
requires_auth: true
api_key_credential: openai-api-key
enabled: true
---
```

```mdx llm_providers/self-hosted-vllm.mdx theme={null}
---
key: internal-vllm
kind: openai-compatible
base_url: https://vllm.internal.example.com/v1
requires_auth: false
enabled: true
---
```

## Gotchas

* **Body must be empty.** The provider has no long-form text - everything is frontmatter.
* **A tenant-wide provider needs a tenant-scoped credential.** If `org` is unset, `api_key_credential` must resolve to a credential that is also tenant-scoped (unset `org`) - an org-scoped credential of the same name won't be found.
* **Adding a new `kind` requires a 2501 release.** The set of supported provider kinds is fixed; configuring an existing kind is pure MDX.
* **A provider that still has models can't be pruned.** Remove or reassign its [models](/0.11/configure/resources/models) first, or sync with `enabled: false` instead.
