<!-- source: https://modelux.ai/docs/concepts/projects -->

> Projects, API keys, and access control.

# Projects & API Keys

A **project** is a logical grouping of API keys, routing configs, and usage
analytics within an organization. Typical pattern: one project per app, one
project per environment (prod/staging), or one project per customer.

## Projects

Projects give you:

- **Scoped API keys** — each key belongs to exactly one project
- **Scoped routing configs** — configs are created within a project
- **Scoped analytics** — request logs, cost, and latency filterable per project
- **Scoped budgets** — spend caps can apply to a single project

## API keys

Modelux API keys use the prefix `mlx_sk_`. They're shown once at creation
time — copy it somewhere safe. We store a SHA-256 hash, so we can't show you
the key again later.

Each key can have:

- **Name** — for humans (e.g., "staging-server")
- **Optional expiry** — auto-revoke after N days
- **Optional rate limit** — requests per minute
- **Revoked** status — revoke at any time without rotating other keys

## Using an API key

Pass it as a Bearer token:

```bash
Authorization: Bearer mlx_sk_xxxxxxxxxxxx
```

Or via the OpenAI SDK:

```python
client = OpenAI(
    base_url="https://api.modelux.ai/v1",
    api_key="mlx_sk_...",
)
```

## Project-scoped routing

Routing configs belong to a project, but their slug (`@production`) is unique
within the project. A request authenticated with a project's API key can only
reference routing configs from that project.
