Running Claude Code Without KYC: Pointing It at the Aggregator When You Have No Vendor Account
A conceptual walkthrough for developers who have no Anthropic account and want to run Claude Code entirely through an aggregator key: what the base URL override does, how model aliases map, and which Claude Code features stop working when you are not talking to the vendor directly.
Who this guide is for
You want to use Claude Code as your terminal coding agent, but you do not have (and do not want) an Anthropic account. Instead you hold a single API key from an aggregator that fronts many models behind one OpenAI- or Anthropic-compatible endpoint, funded with USDC on Base and no KYC.
This is possible, but it is a compatibility setup, not a native setup. Understand the difference before you start, because some Claude Code behavior assumes it is talking to the vendor.
The two pieces of configuration
Almost every client, including Claude Code, resolves requests from environment variables. You generally need to set two things:
- A base URL — the aggregator's API endpoint, replacing the vendor's default host.
- An API key (or auth token) — your aggregator key, replacing any vendor credential.
Claude Code inherits the conventions of Anthropic-style SDKs, so the variable names usually follow the ANTHROPIC_* family. Consult your aggregator's documentation for the exact variable names and endpoint path it expects; the pattern is consistent across providers, but the literal strings differ.
A typical shape looks like:
export ANTHROPIC_BASE_URL="https://<your-aggregator-host>/<api-path>"
export ANTHROPIC_API_KEY="<your-aggregator-key>"
Set these in your shell profile so every new terminal picks them up. If your aggregator exposes an OpenAI-compatible path instead of an Anthropic-compatible one, Claude Code will not speak it natively — check the docs before assuming it works.
Model aliases: what you are actually asking for
Claude Code sends a model identifier with each request. When you point at an aggregator, that identifier is resolved by the aggregator, not by Anthropic. Two consequences follow:
- The alias must exist on the aggregator side. If Claude Code defaults to a model name your aggregator does not route, you will get an error rather than a fallback. Override the model explicitly to a name the aggregator documents.
- The name is a routing key, not a guarantee. A model served through an aggregator is the same underlying model, but the surrounding infrastructure — caching headers, beta flags, request shaping — is the aggregator's, not the vendor's.
Because you have no vendor account, you cannot cross-check a model's behavior against a first-party console. Treat the aggregator's model list as your source of truth and pin explicit model names rather than relying on defaults.
What breaks, and why
This is the part most guides skip. When Claude Code talks to the vendor directly, it can rely on vendor-specific affordances. Through an aggregator, several of these degrade or disappear:
- Account-level and console features. Usage dashboards, organization settings, and any vendor-side account state simply do not exist for you. Billing and usage live in the aggregator's dashboard instead.
- Beta headers and preview flags. Claude Code may send beta feature headers. An aggregator may pass them through, strip them, or reject them. If a feature silently misbehaves, suspect the header path first.
- Prompt caching semantics. Caching behavior depends on the endpoint honoring cache-control markers. Intermediaries may not, which changes cost and latency characteristics without changing correctness.
- Streaming edge cases. Most aggregators stream correctly, but tool-call deltas and partial JSON assembly are the usual places where a proxy diverges from the vendor. If Claude Code hangs mid-tool-call, it is often the transport, not the model.
- Error shapes. Vendor error codes carry meaning that Claude Code may interpret (for example, to decide whether to retry). An aggregator's error envelope may not map cleanly, so retries can behave differently.
None of these make the setup unusable. They make it observable — you need to know which layer to blame.
A practical sequence
- Confirm the endpoint flavor. Ask whether your aggregator exposes an Anthropic-compatible path. Do this before touching Claude Code.
- Set base URL and key in the environment. Verify with a minimal curl to the endpoint's model list or a tiny completion.
- Pin an explicit model. Avoid defaults you cannot verify.
- Run a trivial task first. A one-file edit or a short question. Confirm streaming works and the response terminates cleanly.
- Then try a tool-using task. This exercises the code path most likely to differ through a proxy.
- Watch your aggregator usage view. With no vendor console, the aggregator dashboard is your only observability surface.
Cost, stated plainly
There is no free lunch and no secret discount. On this aggregator, you pay the official model price multiplied by 1.3, settled against your USDC balance on Base. Contributors who help supply capacity are credited the official price multiplied by 1.1 (or 1.2 for premium routes) in USDC. Those are the numbers; plan accordingly rather than expecting vendor-parity pricing.
When this setup is the right call
Use the aggregator-only path when you want a single key across Claude, GPT, DeepSeek, Qwen, GLM and Kimi, when you value no-KYC onboarding funded in USDC, or when you are evaluating coding agents without committing to a vendor relationship.
Keep a vendor account if you depend on preview features, exact caching economics, or vendor-side support escalation. The honest framing: an aggregator gives you access and convenience, not vendor-identical behavior. Configure it deliberately, pin your model names, and test the tool-call path before you trust it with real work.