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

# Adding a custom LLM provider

> Create a custom provider definition in OpenWork Cloud and import it into the desktop app

Use this when the provider is not in the catalog. The Cloud dashboard stores the shared credential once and then lets desktop workspaces import it.

<Frame>
  <img src="https://mintcdn.com/differentai/sWE72uGlQLjsjnjg/images/cloud-custom-llm-provider-detail.png?fit=max&auto=format&n=sWE72uGlQLjsjnjg&q=85&s=333d04033f3b9fe99d41a18741ca0f57" alt="Custom LLM provider detail in OpenWork Cloud" width="1440" height="821" data-path="images/cloud-custom-llm-provider-detail.png" />
</Frame>

## Create the custom provider

1. Open `LLM Providers`.
2. Click `Add Provider`.
3. Switch to `Custom provider`.
4. Give it a `Name` (the `Provider ID` fills in automatically).
5. Enter the `Base URL` of the OpenAI-compatible endpoint (for Azure AI Foundry this looks like `https://my-resource.openai.azure.com/openai/v1`).
6. List the `Model IDs` the endpoint serves — on Azure AI Foundry these are your deployment names.
7. Paste the shared `API key / credential`.
8. Choose `People access` and/or `Team access`.
9. Click `Create Provider`.

That's it — no JSON required for OpenAI-compatible endpoints.

### Advanced: raw JSON config

If the provider needs more than the form covers (a different AI SDK package, per-model limits or modalities, custom options), click `Advanced: edit as JSON` and provide a models.dev-style definition. The JSON must include `id`, `name`, `npm`, `env`, and `models`; `api` is optional, but most OpenAI-compatible providers use it. The editor requires valid JSON, at least one environment variable, and at least one model.

```json theme={null}
{
  "id": "custom-provider",
  "name": "Custom Provider",
  "npm": "@ai-sdk/openai-compatible",
  "env": [
    "CUSTOM_PROVIDER_API_KEY"
  ],
  "doc": "https://example.com/docs/models",
  "api": "https://api.example.com/v1",
  "models": [
    {
      "id": "custom-provider/example-model",
      "name": "Example Model",
      "attachment": false,
      "reasoning": false,
      "tool_call": true,
      "structured_output": true,
      "temperature": true,
      "release_date": "2026-01-01",
      "last_updated": "2026-01-01",
      "open_weights": false,
      "limit": {
        "context": 128000,
        "input": 128000,
        "output": 8192
      },
      "modalities": {
        "input": [
          "text"
        ],
        "output": [
          "text"
        ]
      }
    }
  ]
}
```

## Import it into the desktop app

1. Open `Settings -> Cloud`.
2. Choose the correct `Active org`.
3. Under `Cloud providers`, click `Import`.
4. Reload the workspace when OpenWork asks.

### Functional example: an LLM gateway (Infron)

An LLM gateway is one OpenAI-compatible endpoint that fans out to many model providers. If you want to run the routing yourself, [LiteLLM](https://infron.ai/docs/frameworks-and-integrations/litellm) is a good starting point. [Infron](https://infron.ai) is the hosted option: one API key gets you every model in its [marketplace](https://infron.ai/models) with automatic provider fallbacks and a single invoice, so adding a new LLM to OpenWork is just another entry under `models`.

Grab a key from the [API Keys dashboard](https://infron.ai/dashboard/apiKeys). If you don't have an account yet, sign up at [infron.ai/login](https://infron.ai/login) and their [quickstart](https://infron.ai/docs/overview/quickstart/text) walks you through your first request.

Paste the key into `API key / credential` and use this JSON:

```json theme={null}
{
  "id": "infron",
  "name": "Infron",
  "npm": "@ai-sdk/openai-compatible",
  "env": [
    "INFRON_API_KEY"
  ],
  "doc": "https://infron.ai/docs/frameworks-and-integrations/openwork",
  "api": "https://llm.onerouter.pro/v1",
  "models": [
    {
      "id": "deepseek/deepseek-v3.2",
      "name": "DeepSeek V3.2",
      "attachment": false,
      "reasoning": true,
      "tool_call": true,
      "structured_output": true,
      "temperature": true,
      "release_date": "2025-09-29",
      "last_updated": "2025-09-29",
      "open_weights": true,
      "limit": {
        "context": 128000,
        "input": 128000,
        "output": 8192
      },
      "modalities": {
        "input": ["text"],
        "output": ["text"]
      }
    }
  ]
}
```

Once imported, Infron models show up in the Chat model picker alongside everything else:

<Frame>
  <img src="https://mintcdn.com/differentai/KaN_YBcXtcxDn1Ob/images/infron-model-picker.png?fit=max&auto=format&n=KaN_YBcXtcxDn1Ob&q=85&s=5d09c0d486e7598ce0cf2e1960d05899" alt="DeepSeek V3.2 via Infron in the OpenWork Chat model picker" width="2304" height="1587" data-path="images/infron-model-picker.png" />
</Frame>

Pick the model and it's live in the session footer:

<Frame>
  <img src="https://mintcdn.com/differentai/KaN_YBcXtcxDn1Ob/images/infron-model-active.png?fit=max&auto=format&n=KaN_YBcXtcxDn1Ob&q=85&s=9706a90be53e1b4cc1b5001f73faf0b0" alt="Infron · DeepSeek V3.2 selected in an OpenWork session" width="2304" height="1596" data-path="images/infron-model-active.png" />
</Frame>

Add more entries under `models` to expose other routes the gateway supports (e.g. `openai/gpt-5.4`, `google/gemini-2.5-flash`).

## When to use a cloud provider

Use a Cloud provider when the setup is meant to be shared across an org or team. For solo use, configuring it directly in the desktop app is simpler.
