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

# Integration paths

> Four ways to get your LLM traffic into Omnia — route through the gateway, keep your provider key, point your OpenTelemetry at us, or add the tracing SDK. Every path ends in the same place: gradeable traffic.

Everything downstream (grading, judges, comparisons, training) runs on
**captured traffic**. Capture is the only integration step there is, and
there are four paths in, sized to what your codebase already does. Whichever
path you take, the result is identical: your traffic lands as a gradeable
population you can grade, calibrate a judge against, and run comparisons on.

## Choose a path

| Your situation                                                                                           | Path                                                                                        | Go to                                               |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| Your app calls an OpenAI-compatible API and can use Omnia's model catalog                                | **Gateway**: point your client at `https://gateway.omnia-voice.com/v1`                      | [The gateway](/concepts/gateway)                    |
| You run a closed provider (OpenAI / Anthropic / Gemini / xAI / Mistral) and intend to keep it            | **Your provider key (BYOK)**: same base-URL swap, your provider's key, your provider's bill | [Bring your own key](/reference/bring-your-own-key) |
| Your app already emits OpenTelemetry traces (Vercel AI SDK telemetry, Pydantic AI, an existing OTel SDK) | **OpenTelemetry**: no packages, no code, three environment variables                        | [OTLP trace ingest](/reference/otlp-ingest)         |
| No OTel yet, and your inference must not move                                                            | **Tracing SDK**: one package, one line, standard OpenTelemetry underneath                   | [Tracing SDK](/reference/tracing-sdk)               |

The Gateway and BYOK paths put Omnia **in the request path**, so you also get
caching, fallbacks, and per-request observability. The OpenTelemetry and
Tracing SDK paths are **telemetry only**: your inference keeps going exactly
where it goes today, and only trace data flows to Omnia. BYOK, OpenTelemetry,
and the Tracing SDK all capture traffic **before a single inference decision
changes**.

<Note>
  Whichever path you take, model-call **content** (prompts and completions) is
  stored only if your workspace has [request logging](/reference/request-logging)
  enabled, under your retention window, with the same scrubbing and size caps
  everywhere. Span and request structure is kept either way.
</Note>

## Set up with a coding agent

Omnia publishes one canonical setup prompt that Claude Code, Cursor, or any
coding agent with repository access can follow end to end: it inspects your
repo, picks the right integration path, makes the edits, and verifies the
result:

```bash theme={null}
curl -fsSL https://platform.omnia-voice.com/agent-setup.md
```

See [Set up with your coding agent](/guides/setup-with-your-coding-agent).

## Verify

The same check for every path:

```bash theme={null}
OMNIA_API_KEY=sk_... sh -c "$(curl -fsSL https://platform.omnia-voice.com/setup.sh)"
```

It proves the key works, confirms traffic is landing, and names your one next
step. An integration that isn't sending traffic fails the check explicitly
instead of failing silently.

## Start from a log export

You can run your first comparison from a **JSONL export** of the traffic you
already have, without integrating anything: see
[Import logs](/capture/import-logs).
