An API gateway for coding agents.

Point Claude Code, Cursor, aider or an OpenAI SDK at ChromaLab and use any of 400+ models with one key. Your client keeps its own request format; ChromaLab translates it, trims old tool output, and meters usage per key.

Free account, no card needed

# Two variables and a model id
export ANTHROPIC_BASE_URL="https://chromalab.ink"
export ANTHROPIC_AUTH_TOKEN="chroma-..."
export ANTHROPIC_MODEL="deepseek/deepseek-v3.2"

$ claude

Five request formats, one key

Pick the format your client sends. This is a sample payload; nothing is sent.

Endpoint reference
POST/v1/messages
{
  "model": "your-model-id",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "Review the changes in this repository."
    }
  ],
  "stream": true
}

GET /v1/models returns the live catalog. Anthropic Messages is optimised first, because it is what most agent harnesses use.

What happens to a request

  1. Key checked

    Model allowlist or blocklist, a daily token budget, a cap on max_tokens, and optional tool_choice: required on any request that carries tools.

  2. Translated

    Assistant tool_use blocks become OpenAI tool_calls and back again; each tool_result becomes its own tool message. cache_control markers reach the provider intact.

  3. Old tool output compacted

    Outputs over 4,000 characters, outside the two most recent tool turns, are cut to their first 300 characters and a marker. With retrieval on, a later turn that refers to one gets the full text back.

    Example: a file read from three tool turns ago
    Received
    18,400 chars
    Sent
    300 chars
    [compacted tool output, 18,100 chars omitted, ref:…]
  4. Sent upstream

    With web search on for a key, the model gets search and fetch as ordinary tools. Economy mode, if you opt in, sends some turns to a cheaper fallback model on a fixed cadence.

  5. Metered

    Plans count against a rolling 5-hour session and a 7-day cap, and a request has to fit both. A prepaid wallet covers anything outside a plan.

Models in the docs

Full catalog
  • anthropic/claude-sonnet-4.6Claude Code main model
  • anthropic/claude-haiku-4.5Claude Code background tasks
  • deepseek/deepseek-v3.2Quick start example
  • openai/gpt-5.1-codexSDK example

Units per call, from the live catalog. Costlier models draw more from a plan's session and weekly budgets.

Setup guides for Claude Code, Cursor, OpenCode and your own loop are in the docs.

Plans

Coding units, metered over rolling 5-hour and 7-day windows. Costlier models cost more units per call; the models page lists each unit price.

Basic

$5 / month

For trying an agent on real work.

250
units per 5-hour session
3,000
units per week
  • Plan units cover models up to 15 units per call
  • 500 free-model calls a day
  • Community support
Get Basic

Plus

$10 / month

For a few agent sessions a week.

600
units per 5-hour session
7,500
units per week
  • Plan units cover models up to 50 units per call
  • Unlimited free models
  • Community support
Get Plus

Enterprise

$50 / month

For a team on one account.

5,000
units per 5-hour session
60,000
units per week
  • Plan units cover every model
  • Unlimited free models
  • Custom accommodations
  • Priority support
Get Enterprise

Every plan includes web search, economy mode and per-key limits. Wallet credits cover anything past the plan. Free accounts include a daily free-model allowance when zero-priced models are available. Plans renew through PayPal and cancel from your account.

Questions people ask before signing up

What is an OpenAI-compatible API?

It accepts the same request and response shape as OpenAI's chat completions endpoint, so any client that can talk to OpenAI can talk to it by changing two fields: the base URL and the API key. ChromaLab serves that shape at /v1/chat/completions, and also speaks Anthropic Messages, Gemini and the OpenAI Responses API on the same account.

Does it work with Claude Code?

Yes, and it is the case the gateway is tuned for. Set ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN and the harness works unchanged: tool calls stream incrementally, tool results round-trip, and the cache_control markers Claude Code sets are forwarded upstream.

What counts as one request?

One call to a 1-unit model. Costlier models cost more units per call, listed on the models page, and a request draws that many from your session and weekly budgets.

Can I cap usage per key?

Yes. A key can opt into a daily token budget on top of the request count, which suits bursty tool loops better than a day-granularity request cap on its own. Both checks have to pass for a request to go through.

Is there a free tier?

Accounts are free and include a daily allowance for zero-priced models when available. Paid models use plan units or wallet credits. No credit card is needed to create the account or the key.

Where do the models come from?

OpenRouter is the upstream provider for the catalog, with a fallback path for outages. Pricing, context length and tier are re-read from the live catalog every 15 minutes, so the models page reflects what a request actually costs.

What happens to my conversation?

Chats are collected to train Lucidity models, stored without your account or key, unless you opt out on your Account page. The memory features work on the transcript inside the request you sent, not on a stored history.

Is there a chat interface?

No. ChromaLab is only the gateway: you bring the client, it handles protocol translation, routing, context management and billing.

Put your agent on it.

Create a free account, make a key, change two environment variables.