> ## 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 connects model calls, projects, rules, and traces.

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.

Three ideas cover almost everything: the **Gateway** runs model calls,
**projects** organize your applications, and **Rules** define what those calls
may do.

## Gateway and Rules

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.

In [Rules](/control-plane/rules/overview), you decide which models can run, what
content gets blocked, how responses are scored, how long call content is kept,
and what the organization can spend.

The Gateway enforces those rules automatically, so policy stays outside your
application code. You can block a category of content, restrict a project to EU
providers, or cap monthly spend without shipping a new version of your app.

## 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.

Rules apply at one of these two levels. An organization rule applies everywhere;
a project rule narrows it. You can tighten a policy for one project but never
loosen what the organization allows, so a rule such as “EU providers only”
continues to hold across every project.

## 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. [Checks](/control-plane/rules/checks) inspect the input, [model access](/control-plane/rules/model-access) confirms 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. [Checks](/control-plane/rules/checks) inspect the output, and a score check grades it afterwards.
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 [retention rule](/control-plane/rules/retention). That's also what lets a [score check](/control-plane/rules/checks#score-checks) grade 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="Observe & Control" icon="shield-check" href="/control-plane/overview">
    Inspect traces and manage the rules applied in production.
  </Card>
</CardGroup>
