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

# Onboarding Guide

> Set up your account, route traffic reliably, and get production-ready on Concentrate

This guide takes you from your [first request](https://concentrate.ai/docs/getting-started/quickstart.md) to production. Each section covers one part of the platform: what we recommend and how to set it up.

> [card] [Set up your account](#set-up-your-account)
>
> Organization, teams, API keys, and billing

> [card] [Send traffic](#send-traffic)
>
> Models, routing, fallback, BYOK, and coding tools

> [card] [Secure your data](#secure-your-data)
>
> Data retention, logging, and redaction

> [card] [Monitor usage and activity](#monitor-usage-and-activity)
>
> Logs, errors, audit log, and alerts

> [card] [Go to production](#go-to-production)
>
> Best practices, capacity, cost, and latency

> [card] [Launch checklist](#launch-checklist)
>
> Everything in one list

## Set up your account

Every account starts as a personal account. For a company, create an **organization**: it holds a shared balance, members, teams, and API keys. Switch between your personal account and your organizations from the account menu at the bottom of the sidebar.

### Create your organization

**1. Create it**

Open the account menu at the bottom of the sidebar, click **Create an Organization**, enter the organization name, and click **Create Organization**.

![Account menu open at the bottom of the sidebar, with Create an Organization highlighted](https://mintcdn.com/concentrateai-8b9c0315/JJ6M1etqOTpweVrq/images/onboarding/create-organization.png?fit=max\&auto=format\&n=JJ6M1etqOTpweVrq\&q=85\&s=b2fac1312ed24b470922500d8454ed29)

**2. Invite your team**

Go to **Members**, click **Invite Member**, enter one or more email addresses, choose a role for each person, and click **Send Invitation**. Only Owners can choose a role other than the default; Admins invite with the default role.

![Invite Members dialog with one email address added and the role picker open, showing Admin, Member, Billing, and Owner](https://mintcdn.com/concentrateai-8b9c0315/JJ6M1etqOTpweVrq/images/onboarding/invite-member.png?fit=max\&auto=format\&n=JJ6M1etqOTpweVrq\&q=85\&s=6b1ec6fee088fb98a265209479410862)

Every member has a role:

| Role | Can do by default | Typically given to |
| - | - | - |
| **Owner** | Everything, including organization settings, SSO, roles, billing, BYOK keys, and the audit log | The head of IT, CTO, or founder |
| **Admin** | Invite and remove members, manage API keys, view all logs, and view and create teams. Can't change roles or see billing | IT or platform admins and engineering managers |
| **Billing** | Manage billing and API keys, view all logs, and view teams | Finance and procurement |
| **Member** | Uses their own and their teams' keys, and sees those keys' logs | Developers and everyone else who sends requests |

> [!TIP]
>
> **Recommended:** keep one **Owner** and make the other operators **Admins** or **Members**. If the built-in roles don't fit, Owners can create custom roles: go to **Roles** (under **Members** in the sidebar) and click **New Role**, then pick the permissions the role grants.

### Create teams

Teams group people and API keys, for example by department (engineering, product, marketing, HR), by environment (production, development), or by workload. A team can have its own spend limits, rate limits, routing, and data retention settings, and new keys on the team start from those settings.

**1. Create a team**

Go to **Teams** and click **Create Team** (**Create your first team** if you have none). Enter a name, optionally add members, and set the team's limits and settings. Owners and Admins can create teams.

![Create Team panel with the team name Engineering, an optional member list, and the team spend limit](https://mintcdn.com/concentrateai-8b9c0315/JJ6M1etqOTpweVrq/images/onboarding/create-team.png?fit=max\&auto=format\&n=JJ6M1etqOTpweVrq\&q=85\&s=2c840792646d4307a37ee0067c47ece2)

**2. Add people**

Open the team's **Members** tab, pick the people to add, and click **Add to team**.

### Create API keys

Create a separate key for each environment and major workload, so you can limit, monitor, and revoke each one on its own.

**1. Create the key**

Go to **API Keys** and click **Create key**. Give it a name and, in an organization, choose its **Owner**: the organization or one of your teams. The owner can't be changed later.

To give someone temporary access, such as a contractor or a candidate on a work trial, set an **Expiration Date**. The key stops working after that date. Leave it empty and the key never expires.

**2. Set its limits and settings**

The key starts with a copy of its owner's settings. Adjust them for this key:

* **Spend Limits**: a **Total Spend Limit** that never renews, and a **Recurring Spend Limit** that renews daily, weekly, monthly, or every N days.
* **Routing & Rate Limits**: preferred, allowed, and blocked models and providers, plus tokens-per-minute and requests-per-minute limits, overall or per model.
* **Data Retention**: Zero Data Retention and request logging. See [Secure your data](#secure-your-data).

![Create API key panel with a key name, the Owner selector, an expiration date, and spend limit and routing settings](https://mintcdn.com/concentrateai-8b9c0315/JJ6M1etqOTpweVrq/images/onboarding/create-api-key.png?fit=max\&auto=format\&n=JJ6M1etqOTpweVrq\&q=85\&s=b2f32662670177307ac14050a3cd9bea)

**3. Copy the key**

Copy the key right away. You won't be able to see it again.

> [!TIP]
>
> **Recommended:** set a spend limit on every production key, and turn on the [key exhaustion alert](https://concentrate.ai/docs/alerts/key-exhaustion.md) so you hear about it before a key hits its limit.

> [!NOTE]
>
> Owners can **Enforce** a setting for the whole organization in **Settings**, and team managers for a team in the team's **Settings** tab. Enforced Zero Data Retention and logging are locked on every key underneath. Enforced routing, rate limits, and spend limits become a ceiling that keys can tighten but not loosen.

### Add credits and auto top-up

Requests are paid from your prepaid balance (except [BYOK](#bring-your-own-keys-byok) traffic, which your provider bills directly). Owners and members with the Billing role can manage billing.

**1. Buy credits**

Go to **Billing**, click **Buy Credits**, enter an amount, and click **Continue to Payment**.

**2. Turn on email or text notifications**

Automatic top-up needs a way to reach you. Switch to your personal account from the account menu, open **Settings**, and under **Notifications** turn on email or text notifications.

**3. Turn on automatic top-up**

On the [**Billing**](https://concentrate.ai/billing) page, click **Set up** next to automatic top-up. Add a payment card, turn on the switch, set **When balance drops below** (at least \$5) and **Add this much** (at least \$25, and no less than the threshold), and click **Turn on**.

![Automatic Top-up dialog listing the two steps to turn it on: add a payment card, and turn on email or text notifications](https://mintcdn.com/concentrateai-8b9c0315/JJ6M1etqOTpweVrq/images/onboarding/auto-top-up.png?fit=max\&auto=format\&n=JJ6M1etqOTpweVrq\&q=85\&s=5e8d77f865ae8168b3396c1b1f5e92e5)

> [!TIP]
>
> **Recommended:** for production traffic, top up when your balance drops below about \$1,000, and add \$5,000 each time.

For longer-term agreements we prefer invoice billing. [Contact us](mailto:support@concentrate.ai) to set it up.

**Usage** (under **Billing** in the sidebar) breaks down spend by key and model for any date range, and you can download it as CSV.

## Send traffic

### Use the Responses API and OpenAI format

Concentrate is OpenAI-compatible, so keep your code in the standard OpenAI format and point it at Concentrate. We recommend the OpenAI SDK with the [Responses API](https://concentrate.ai/docs/api-reference/endpoint/create-response.md) (`/v1/responses`). The [Quickstart](https://concentrate.ai/docs/getting-started/quickstart.md) has copy-paste examples.

Already on Chat Completions or the Anthropic Messages format? Both work too: see [Chat Completions](https://concentrate.ai/docs/api-reference/endpoint/chat-completions.md) and [Messages](https://concentrate.ai/docs/api-reference/endpoint/create-message.md).

### Choose models with model slugs

The `model` field accepts three forms:

| You send | What happens |
| - | - |
| `gpt-6.1-terra` (model slug) | Routed to any provider serving the model, with automatic fallback |
| `openai/gpt-6.1-terra` (provider slug) | Sent only to that provider |
| `auto` | Concentrate picks a model from a curated pool |

> [!TIP]
>
> **Recommended:** send model slugs. Pin a provider only when you have a specific reason to send traffic there, such as a compliance requirement.

Find every slug, with pricing and the providers that serve it, on the [models page](https://concentrate.ai/models) or from [`GET /v1/models`](https://concentrate.ai/docs/api-reference/endpoint/list-models).

### Routing and fallback

Most models are served by more than one provider. When you send a model slug, Concentrate picks a provider for each request and fails over when one has a problem:

1. **Match.** Only providers that support the essentials your request uses (streaming, tools, structured output, and so on) are considered. Optional parameters a provider can't honor, such as sampling settings, may be dropped rather than failing the request.
2. **Rank.** Providers you list in `routing.provider.fallbacks` come first, in your order, then providers you hold a [BYOK](#bring-your-own-keys-byok) key for, then the rest, ordered by your `routing.provider.sort` preference (`performance` by default).
3. **Fall back.** If a provider is degraded, rate-limited, or unavailable, the request moves to the next provider serving the same model instead of failing. For streaming requests, fallback happens only if a provider fails before its stream starts.

You don't need to configure anything to get fallback. To tune routing for every request on a key, team, or organization, set it in the dashboard under **Routing & Rate Limits**: preferred (**Fallbacks**), **Allowed**, and **Blocked** models and providers, and how to **Prioritize** providers (performance, cost, latency, or uptime).

To tune a single request, add a `routing` object to it:

```json Cheapest provider theme={null}
{
  "model": "gpt-6.1-terra",
  "input": "Summarize this text",
  "routing": {
    "provider": { "sort": "cost" }
  }
}
```

```json Fastest provider theme={null}
{
  "model": "gpt-6.1-terra",
  "input": "Translate to Spanish: Hello",
  "routing": {
    "provider": { "sort": "p50_latency" }
  }
}
```

```json Fall back to another model theme={null}
{
  "model": "gpt-6.1-terra",
  "input": "Summarize this text",
  "routing": {
    "model": { "fallbacks": ["claude-sonnet-5-5"] }
  }
}
```

```json Restrict providers theme={null}
{
  "model": "gpt-6.1-terra",
  "input": "Process this data",
  "routing": {
    "provider": { "whitelist": ["openai", "azure"] }
  }
}
```

A pinned `provider/model` request doesn't fall back to other providers unless `routing.provider.fallbacks` or `routing.provider.whitelist` is set, on the request or on the key.

[Auto routing & fallback](https://concentrate.ai/docs/api-reference/endpoint/auto-routing.md) covers every option.

### Bring your own keys (BYOK)

If you have credits with OpenAI, Anthropic, AWS Bedrock, Google Vertex, Azure, or another provider, add those keys to Concentrate. Requests routed to that provider then run on your key:

* Your provider bills you directly, so nothing is taken from your Concentrate balance.
* Your Concentrate token limits don't apply, only your provider's. Your requests-per-minute limits still do.
* Usage still appears in your logs and dashboard, marked as BYOK.

If every one of your keys for a provider fails or is rate-limited, the request falls back to Concentrate-managed capacity, so one bad key doesn't fail the request.

**1. Open BYOK**

Go to **BYOK** in the dashboard. Keys you add while viewing your organization apply to the whole organization. Only Owners, or roles granted **Manage provider keys**, can manage them.

**2. Add a key**

Pick a provider, enter a name and the credential, and click **Save key**.

> [!TIP]
>
> **Recommended:** keep your Concentrate balance funded even with BYOK. Fallback traffic is billed to your balance.

See [BYOK](https://concentrate.ai/docs/api-reference/endpoint/byok.md) for supported providers and setup details.

### Use coding tools

Claude Code, Codex, OpenCode, and Pi all run on Concentrate. The [Concentrate CLI](https://concentrate.ai/docs/integrations/cli.md) (beta) sets them up with one command and doesn't change the tools' own settings:

```bash theme={null}
curl -fsSL https://concentrate.ai/scripts/install-cli.sh | bash
cn setup     # save your API key
cn claude    # or: cn codex, cn opencode, cn pi
```

If `cn` isn't found after installing, add `~/.local/bin` to your `PATH` with the line the installer printed, then open a new terminal.

Setting up Claude Code without the CLI:

* Run the setup script from the [Claude Code guide](https://concentrate.ai/docs/integrations/claude-code.md).
* If you were logged in to Anthropic in Claude Code before, run `/logout` first.
* Run `/status` in Claude Code. It should show `https://api.concentrate.ai` as the API endpoint.

Claude Code works largely the same on Claude and other capable models. You can try open-source models too; Claude Code may compact the conversation before it reaches their full context window.

## Secure your data

### Zero Data Retention and request logging

Both are set per API key, and can be enforced across a team or your whole organization.

* **Zero Data Retention (ZDR)** sends requests only to providers that support zero data retention. ZDR belongs to a model-and-provider pair, so turning it on means fewer providers are available for some models.
* **Request logging** is off by default. Turn it on to store each request's prompt and response so you can read them in **Logs** when debugging. Every request's status, tokens, latency, and cost appear in **Logs** either way. The [Model Optimizer](https://concentrate.ai/docs/optimizer/overview.md) also needs logging on, because it tests models on the prompts and responses in your logs.

**1. Per key**

Go to **API Keys**, create or edit a key, and under **Data Retention** set **Zero Data Retention (Providers)** and **Enable customer-controlled logs**.

**2. Across the organization (optional)**

As an Owner, go to **Settings** in your organization. Under **Data Retention**, click **Enforce** on **Zero Data Retention**, **Logging**, or both, confirm, and click **Save changes**. Enforced settings are locked on every key in the organization.

You can also make a single request stricter by sending `"zdr": { "enabled": true }` in the request body. See [Zero Data Retention & Logging](https://concentrate.ai/docs/api-reference/endpoint/zero-data-retention.md).

### Guardrails and redaction

Guardrails mask sensitive data, such as personal, payment, health, and credential data, automatically on every request made with a key.

**1. Open Guardrails**

Go to **Guardrails** in the dashboard and select an API key.

**2. Configure redaction**

Enable redaction, choose the target (`input`, `output`, or `both`), and select the entity types to redact. Save your changes.

> [!WARNING]
>
> Output redaction isn't applied to streamed responses. Use non-streamed requests if you need output redaction.

See [Guardrails & Redaction](https://concentrate.ai/docs/api-reference/endpoint/guardrails-redaction.md) for every entity type.

## Monitor usage and activity

### Logs, errors, and the dashboard

* **Dashboard** shows your spend, requests, tokens, and errors, plus your balance if your role can view billing.
* **Logs** lists every request you have access to, with its status, model, key, tokens, and cost. Filter by date, status, model, provider, or key, open a request to see its details, or export to CSV. Request and response content is shown only for keys with logging turned on.
* **Errors** (under **Logs** in the sidebar) shows failed requests across all your keys: the error rate, the most common errors, and whether they concentrate on one key, model, or provider.

### Audit log

**Audit Logs** records who created, changed, or deleted keys, teams, users, BYOK keys, and other settings. Owners see the whole organization's log by default; everyone else sees their own actions.

### Alerts

Alerts flag something that needs attention on your dashboard, and by email or text if you turn on notifications. Turn these on before you ramp up:

| Alert | Tells you | Example setup |
| - | - | - |
| [Low balance](https://concentrate.ai/docs/alerts/low-balance.md) | Your balance dropped below a threshold | Text me the moment the balance is at or below \$500 |
| [Balance depletion](https://concentrate.ai/docs/alerts/balance-depletion.md) | Your balance is trending toward zero | Check **daily** and warn me if the organization's balance will run out within **7 days** at the current pace |
| [Key exhaustion](https://concentrate.ai/docs/alerts/key-exhaustion.md) | A key is trending toward its spend limit | Check **hourly** and warn me if any production key will hit its limit within **24 hours** |
| [Error rate spike](https://concentrate.ai/docs/alerts/error-rate-spike.md) | Your error rate jumped, including rate limiting (`429`) | Check **every minute** and alert me if more than **5%** of requests fail. Add a second alert with `429` selected to catch rate limiting |

Set them up on the [Alerts page](https://concentrate.ai/alerts). Alerts reach you by email or text, which you turn on in your personal account's **Settings**, under **Notifications**.

![Alerts page with the Balance Depletion alert expanded and its forecast window set to 7 days](https://mintcdn.com/concentrateai-8b9c0315/JJ6M1etqOTpweVrq/images/onboarding/alerts.png?fit=max\&auto=format\&n=JJ6M1etqOTpweVrq\&q=85\&s=2cf84817e870fd7d8ef2362268a13cc8)

Alerts are per person. Turning one on subscribes only you, so each teammate who wants a notification turns it on for themselves.

See [Alerts](https://concentrate.ai/docs/alerts/overview.md) for every alert type.

## Go to production

### Build for production

> [accordion] Read your key from the environment
>
> Never hardcode API keys or commit them to version control.
>
> ```python theme={null}
> import os
>
> api_key = os.environ["CONCENTRATE_API_KEY"]
> ```

> [accordion] Cap response length
>
> Set `max_output_tokens` to limit response length and cost:
>
> ```json theme={null}
> {
>   "model": "gpt-6.1-terra",
>   "input": "Your prompt",
>   "max_output_tokens": 500
> }
> ```

> [accordion] Retry with backoff
>
> Concentrate already fails over between providers, but your client should still retry `424`, `429`, `500`, `503`, and `504` responses with exponential backoff. When a `Retry-After` header is present, wait at least that long. A `504` may have been partly processed upstream, so check before retrying work that shouldn't run twice. Don't retry other `4xx` errors: fix the request instead.
>
> See [Errors](https://concentrate.ai/docs/api-reference/endpoint/errors.md) for every status code.

> [accordion] Track usage and cost
>
> Every response includes token `usage` and its `cost`, so you can track spend per request. For BYOK requests, `cost.byok` is `true` and the cost isn't charged to your balance.
>
> ```python theme={null}
> # response from client.responses.create(...)
> print(response.usage.total_tokens, response.cost["total"])
> ```

### Plan capacity with us

See your current rate limits in the dashboard under **Routing & Rate Limits**. If you need more capacity, [contact support](mailto:support@concentrate.ai) and we'll work with you to raise your limits.

* Before you launch, tell us your expected TPM and RPM, your mix of frontier and open-source models, which models you'll use, and how bursty your traffic is.
* Once your limits are raised and you need much higher capacity, ramp very large workloads gradually, adding 10–25M TPM every 5–10 minutes, rather than going from zero to 100M+ TPM at once.

Traffic on your own [BYOK](#bring-your-own-keys-byok) keys uses your provider's token limits instead.

### Optimize cost and latency

> [card] [Model Optimizer (beta)](https://concentrate.ai/docs/optimizer/overview.md)
>
> Find cheaper models for the jobs your agents repeat, tested on your own conversations

> [card] [Prompt caching](https://concentrate.ai/docs/api-reference/endpoint/prompt-caching.md)
>
> Reuse cached prompts to cut cost and latency

> [card] [Service tiers](https://concentrate.ai/docs/api-reference/endpoint/service-tiers.md)
>
> Trade cost against latency with `flex`, `priority`, and `fast`

> [card] [Web search](https://concentrate.ai/docs/api-reference/endpoint/web-search.md)
>
> Native provider search, or our Exa integration for any model

## Launch checklist

Before you send production traffic:

* [ ] Your organization is created, with one Owner and everyone else as Admins, Billing, or Members
* [ ] Separate API keys for production, development, and each major workload, each with a spend limit, and an expiration date on temporary keys
* [ ] Credits added and automatic top-up turned on
* [ ] Requests send model slugs, not `provider/model`, unless you have a reason to pin
* [ ] BYOK keys added for any provider you have credits with
* [ ] Zero Data Retention, logging, and redaction set where you need them
* [ ] Low balance, balance depletion, key exhaustion, and error rate spike alerts turned on
* [ ] Your code reads the key from the environment, sets `max_output_tokens`, and retries `424`, `429`, `500`, `503`, and `504`
* [ ] For large workloads: capacity planned with us, and a gradual ramp-up

## Need help?

Email [support@concentrate.ai](mailto:support@concentrate.ai), or ask in your shared Slack channel if you have one.
