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

# Build on Opper

> One gateway, every model and modality. Bring the SDK you already use.

Everything you build runs through one gateway: a single endpoint and key in front of [300+ models](/capabilities/models), compatible with the OpenAI, Anthropic, and Google AI APIs. Pick the surface that matches what you're building — the routing, governance, and tracing are the same underneath.

## Where to start

<CardGroup cols={2}>
  <Card title="Gateway" icon="plug" href="/build/gateway/drop-in-sdks">
    Text generation through the SDK you already use. Messages, tools, structured output, streaming, and web search.
  </Card>

  <Card title="Multimodality" icon="shapes" href="/build/multimodal/overview">
    Images, audio, and video. Vision input, image generation, speech, transcription, and clips.
  </Card>

  <Card title="Realtime" icon="microphone" href="/build/realtime/quickstart">
    Two-way voice over WebSocket. OpenAI, xAI, and Gemini behind one protocol.
  </Card>

  <Card title="Roundtable" icon="users" href="/build/roundtable/overview">
    Ask several models the same question in parallel, then consolidate or compare.
  </Card>

  <Card title="Models" icon="brain" href="/capabilities/models">
    The full catalog, with EU-hosted and multimodal models marked.
  </Card>
</CardGroup>

## Pick by what you're building

<AccordionGroup>
  <Accordion title="I'm building a chatbot, assistant, or agent">
    Use the [gateway](/build/gateway/drop-in-sdks). It handles multi-turn conversations, [tool calling](/build/gateway/tools), and image inputs out of the box, and you can use the OpenAI, Anthropic, or Google AI SDK you already know.
  </Accordion>

  <Accordion title="I'm parsing receipts, invoices, PDFs, or images">
    Use [structured output](/build/gateway/structured-output). Attach the file, describe the fields you want with a JSON Schema, and get a clean, validated object back.
  </Accordion>

  <Accordion title="I'm extracting structured data or classifying things">
    Use [structured output](/build/gateway/structured-output). Describe the output shape with `response_format` and the model fills it in.
  </Accordion>

  <Accordion title="I'm migrating an existing OpenAI / Anthropic / Gemini app">
    Point your SDK at the gateway. Change the base URL and the API key, and your code keeps working — now with Opper's observability and Control Plane rules. See [Drop-in SDKs](/build/gateway/drop-in-sdks).
  </Accordion>

  <Accordion title="I'm building a voice agent">
    Use [Realtime](/build/realtime/quickstart). Open a websocket, stream microphone audio in, and stream voice out.
  </Accordion>

  <Accordion title="I'm generating video">
    Use the [Video](/build/multimodal/video) endpoint. Submit a prompt (and optionally a reference image), then poll for the result.
  </Accordion>

  <Accordion title="I want a second opinion from several models">
    Use [Roundtable](/build/roundtable/overview). Send one question to a panel of models and get back a consolidated answer or a side-by-side comparison.
  </Accordion>
</AccordionGroup>

## What's the same everywhere

Whichever surface you use:

* You can call any of the [300+ models](/capabilities/models) Opper supports.
* Your [Control Plane](/control-plane/overview) rules apply automatically.
* Every call shows up in your traces and generation history.
* Your API key is the same.

You can mix them in one app. A common setup has the gateway powering the user-facing conversation while a background structured-output call parses uploads or summarizes context.
