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

# Core concepts

> How Opper works, in one mental model: two planes, projects, and a record of every call.

Opper is one API in front of every major AI model, wrapped in a layer that governs and records every call passing through it. You write ordinary model calls. Opper routes each one to a model, applies your rules, and records what happened.

Two ideas cover almost everything: the **two planes**, and how you organize work into **projects**.

## Two planes

The [AI Gateway](/overview/gateway) is the request path. Your app calls it, it picks a model, runs the request, and returns the result. One API for [text generation](/build/gateway/drop-in-sdks), [multimodality](/build/multimodal/overview) — image, audio, and video — and [realtime voice](/build/realtime/quickstart), in front of 300+ models.

The [Control Plane](/control-plane/overview) wraps around it. It's where you decide which models can run, what content gets blocked, how responses are scored, and what you spend.

The relationship is the whole point: you configure rules in the Control Plane, and the Gateway enforces them on every call, automatically. Your application code stays clean, and the policy lives outside it. Move a function to a cheaper model, block a category of content, or cap monthly spend by editing a rule, never by shipping new code.

## Projects

Your account is an **organization**. Inside it, each app or environment is a **project** with its own API key and its own isolated data.

Control Plane rules attach at one of these two levels. An org rule applies everywhere; a project rule narrows it. You can tighten at the project level but never loosen what the org allows, so a policy like "EU providers only", set once at the org, holds across every project underneath it.

## What happens on a call

Every call runs the same path, and you can replay all of it afterward:

1. The Gateway identifies your project from the API key.
2. [Guard](/control-plane/guard) checks the input, [Comply](/control-plane/comply) checks the model is allowed, and [Route](/control-plane/route) fills in a default model if you didn't name one.
3. The model runs.
4. [Guard](/control-plane/guard) checks the output, and [Observe](/control-plane/observe) scores it.
5. The call is recorded. By default that's metadata only (model, cost, latency); with retention on, it's the full **trace**.

A trace is the full tree behind one request: the model call, any tool calls, and every rule that fired. By default Opper keeps only metadata, so to store and open full traces (with inputs and outputs) you add a [Comply](/control-plane/comply) retention rule. That's also what lets [Observe](/control-plane/observe) score a call, since it needs the content to judge.

## Where to go next

<CardGroup cols={2}>
  <Card title="AI Gateway" icon="signs-post" href="/overview/gateway">
    One API, 300+ models, routing, and EU enforcement. The request path in detail.
  </Card>

  <Card title="Control Plane" icon="shield-check" href="/control-plane/overview">
    The five tools that govern, observe, and improve what's running in production.
  </Card>
</CardGroup>
