Using LiteLLM Proxy with OpenClaw for Unified Model Access

This page explains how to route OpenClaw through the LiteLLM proxy for centralized cost tracking, logging, and virtual keys. It is intended for developers who want unified access to over 100 model providers.

Read this when

  • You want to route OpenClaw through a LiteLLM proxy
  • You need cost tracking, logging, or model routing through LiteLLM

LiteLLM is an open source LLM gateway that provides a single API for over 100 model providers. You can route OpenClaw through LiteLLM to get centralized cost tracking, logging, virtual keys with spend limits, and backend failover without modifying OpenClaw's configuration.

Quick start

Onboarding (recommended)

openclaw onboard --auth-choice litellm-api-key

For a non-interactive setup against a remote proxy, explicitly pass the proxy URL:

openclaw onboard --non-interactive --accept-risk --auth-choice litellm-api-key \
  --litellm-api-key "$LITELLM_API_KEY" --custom-base-url "https://litellm.example/v1"

Manual setup

Start LiteLLM Proxy

pip install 'litellm[proxy]'
litellm --model claude-opus-4-6

Point OpenClaw to LiteLLM

export LITELLM_API_KEY="your-litellm-key"
openclaw

Configuration

{
  models: {
    providers: {
      litellm: {
        baseUrl: "http://localhost:4000",
        apiKey: "${LITELLM_API_KEY}",
        api: "openai-completions",
        models: [
          {
            id: "claude-opus-4-6",
            name: "Claude Opus 4.6",
            reasoning: true,
            input: ["text", "image"],
            contextWindow: 200000,
            maxTokens: 64000,
          },
          {
            id: "gpt-4o",
            name: "GPT-4o",
            reasoning: false,
            input: ["text", "image"],
            contextWindow: 128000,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
  agents: {
    defaults: {
      model: { primary: "litellm/claude-opus-4-6" },
    },
  },
}

The default model used during onboarding writes is litellm/claude-opus-4-6.

Image generation

LiteLLM can power the image_generate tool through OpenAI-compatible /images/generations and /images/edits routes. The default image model is gpt-image-2; you can set a different one under agents.defaults.mediaModels.image:

{
  models: {
    providers: {
      litellm: {
        baseUrl: "http://localhost:4000",
        apiKey: "${LITELLM_API_KEY}",
      },
    },
  },
  agents: {
    defaults: {
      imageGenerationModel: {
        primary: "litellm/gpt-image-2",
        timeoutMs: 180_000,
      },
    },
  },
}

Loopback LiteLLM URLs (http://localhost:4000, 127.0.0.1, ::1, host.docker.internal) work without needing a global private network override. For a proxy hosted on your LAN, set models.providers.litellm.request.allowPrivateNetwork: true because the API key is sent to that host.

Advanced

Virtual keys

Create a dedicated key for OpenClaw with spend limits:

curl -X POST "http://localhost:4000/key/generate" \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "key_alias": "openclaw",
    "max_budget": 50.00,
    "budget_duration": "monthly"
  }'

Use the generated key as LITELLM_API_KEY.

Model routing

LiteLLM can send model requests to different backends. Configure this in your LiteLLM config.yaml:

model_list:
  - model_name: claude-opus-4-6
    litellm_params:
      model: claude-opus-4-6
      api_key: os.environ/ANTHROPIC_API_KEY

  - model_name: gpt-4o
    litellm_params:
      model: gpt-4o
      api_key: os.environ/OPENAI_API_KEY

OpenClaw keeps requesting claude-opus-4-6; LiteLLM handles the routing.

Viewing usage

# Key info
curl "http://localhost:4000/key/info" \
  -H "Authorization: Bearer sk-litellm-key"

# Spend logs
curl "http://localhost:4000/spend/logs" \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"

Proxy behavior notes

  • LiteLLM runs on http://localhost:4000 by default.
  • OpenClaw connects through LiteLLM's proxy-style OpenAI-compatible /v1 endpoint.
  • Native-OpenAI-only request shaping does not apply when using a configured LiteLLM base URL: no service_tier, no Responses store, no prompt-cache hints, and no OpenAI reasoning-effort payload shaping.
  • Hidden OpenClaw attribution headers (originator, version, User-Agent) are only sent to verified native OpenAI endpoints, so they are not injected on a custom LiteLLM base URL.

Note

For general provider configuration and failover behavior, see Model Providers.