---
title: "Claude Code: ANTHROPIC_BASE_URL and key — AI Creator API"
description: "How to connect Claude Code to AI Creator API: base URL, key, models, aliases and the background model."
url: https://llm.aicreator.app/en/docs/claude-code/
lang: en
updated: 2026-11-11
---

# Claude Code

Claude Code speaks Anthropic Messages, and we answer in kind: streaming, tools, thinking and prompt caching work as with the official API. The stream is passed through, not translated or repacked.

## Setup

Set the environment variables and run `claude`:

```bash
unset ANTHROPIC_API_KEY
export ANTHROPIC_BASE_URL=https://api.aicreator.app
export ANTHROPIC_AUTH_TOKEN=sk-aic-…
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5-5
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-5-5
export ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5-2
claude
```

- `unset ANTHROPIC_API_KEY` — required when the variable is set. Claude Code sends its value in the `x-api-key` header, which we read before `Authorization`: with an old Anthropic key in it the answer is 401.
- `ANTHROPIC_BASE_URL` — `https://api.aicreator.app`, without `/v1`: Claude Code adds the path itself.
- `ANTHROPIC_AUTH_TOKEN` — your `sk-aic-…` key.
- `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, `ANTHROPIC_DEFAULT_FABLE_MODEL` — the models behind the names Opus, Sonnet, Haiku and Fable. Claude Code turns these names into its own ids before sending, and we accept only the ids of our own list, so pin all four: if a new Claude Code version sends an id that is not on our list, the request gets a 400. Fable points at `claude-fable-5-2`; the previous `claude-fable-5-1` stays on sale under its own id.

### Settings file

A shell export lasts until the terminal closes. To make the setup hold wherever Claude Code runs, background agents included, put the same variables in the `env` block of `~/.claude/settings.json`. When a variable is set both there and in the shell, the file wins.

```json title="~/.claude/settings.json"
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aicreator.app",
    "ANTHROPIC_AUTH_TOKEN": "sk-aic-…",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5-5",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-5-5",
    "ANTHROPIC_DEFAULT_FABLE_MODEL": "claude-fable-5-2"
  }
}
```

Keep the key out of a project’s `.claude/settings.json`: that file is committed to the repository.

### Check

Run `claude` and type `/status`: the `Anthropic base URL` line should show `https://api.aicreator.app`, and the `Auth token` line should name `ANTHROPIC_AUTH_TOKEN`.

## Models

With the variables of the setup, the names in Claude Code stand for these models:

| Name in Claude Code | Model               |
| ------------------- | ------------------- |
| `opus`              | `claude-opus-5-5`   |
| `sonnet`            | `claude-sonnet-5-5` |
| `haiku`             | `claude-haiku-5-5`  |
| `fable`             | `claude-fable-5-2`  |

Other models on the Claude Code protocol take their full id: in `ANTHROPIC_MODEL` or with the `/model` command. Which models work on this protocol is in the Protocols column of the [pricing page](https://llm.aicreator.app/en/pricing/). An id that is not on our list gets 400 `model_not_available`.

To have the models of our list show up in the `/model` picker, add the variable `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1`: Claude Code will ask us for `/v1/models` at startup.

## Background model

Claude Code runs session titles and other housekeeping on its Haiku model, not on the one picked for the work. Which model that is comes from `ANTHROPIC_DEFAULT_HAIKU_MODEL`. In the setup above it is `claude-haiku-5-5`, which we carry for this role.

To run background tasks on another model, put its id in this variable: any model on the Claude Code protocol will do. What the background model spends is its own line in the stats.

## Subagents and parallel requests

One key runs up to 4 requests at a time. Claude Code with subagents easily opens more: the extra request gets 429 `concurrent_requests` with a `retry-after` header, and Claude Code retries it by itself. The work goes on, only slower.

A second ceiling counts by IP address, not by key: 60 requests per minute and 1,200 per hour from one machine. A long session with subagents can reach it; the answer is the same, a 429 with `retry-after`, and Claude Code waits by itself.

## If something is off

- 401 means the key was copied in part or revoked, or `ANTHROPIC_API_KEY` is still set in the environment.
- 400 `model_not_available` means Claude Code asked for a model id that is not on our list: pin the models with the variables of the setup.
- 402 means the balance ran out: top it up in the dashboard.
- 429 means a key, IP address or provider limit hit; Claude Code retries by itself following the `retry-after` header.

A step-by-step walk-through is in [Troubleshooting](https://llm.aicreator.app/en/docs/troubleshooting/), and every code in [Errors and limits](https://llm.aicreator.app/en/docs/errors/).
