# Choose an LLM API protocol

## Choose by contract, not by brand name

The gateway exposes native LLM protocols. Use `/v1/models` for public model IDs, protocol labels and declared capabilities; it does not provide an endpoint list. Before choosing an SDK or changing its base URL, consult the selected model's [current guide](/docs) for supported endpoints and request parameters. Do not infer endpoint compatibility from the protocol label alone. Cross-protocol use requires explicit model-level bridging; the body must still match the endpoint your client calls.

| Protocol | Request endpoint | Authentication | Input shape |
| --- | --- | --- | --- |
| OpenAI Chat Completions | `/v1/chat/completions` | `Authorization: Bearer API_KEY` | `model`, `messages` |
| OpenAI Responses | `/v1/responses` | `Authorization: Bearer API_KEY` | `model`, `input` |
| Claude Messages | `/v1/messages` | `x-api-key: API_KEY`, `anthropic-version: 2023-06-01` | `model`, `messages`, `max_tokens` |
| Gemini content | `/v1beta/models/{model}:generateContent` | `x-goog-api-key: API_KEY` | `contents` with `parts` |

These are gateway endpoint families, not a claim that every model supports every row. Use the platform origin shown in the model's request example; do not send the platform key to an upstream provider's hostname.

## Gemini / OpenAI protocol bridging

For an enabled Gemini model, Gemini native, Chat Completions and Responses can share one model identity, permission set and price configuration. The gateway adapts the upstream protocol. See [Gemini bridging and video analysis](/docs/llm/gemini-bridge-video) for video payloads and signature-preserving follow-up turns. Models without bridging retain their existing protocol behavior.

## Map both sides of an integration

Chat Completions commonly returns text under `choices[].message`, Claude returns content blocks, and Gemini returns candidates containing parts. Responses uses output items. Preserve the native usage object and finish/stop information; do not force all of these into a media task schema.

Tool calls are structured instructions for your application, not proof that a tool executed. Keep tool execution behind your own validation and permission boundary. Enable tools, structured outputs, images or reasoning only where the exact route declares support. An omitted capability is not an affirmative guarantee.

## Migrate one layer at a time

1. Record the current endpoint, model ID, role layout, output-limit field and parser.
2. Select an active target route and inspect its [model guide](/docs).
3. Translate the request and response adapters together. Keep optional parameters out of the first request.
4. Test a small approved sample including empty output, refusal, truncation and errors.
5. Compare task quality and total usage using the [evaluation worksheet](/docs/llm/evaluation), before changing production traffic.

SDKs may append `/v1` themselves, retry automatically or default to another endpoint. Inspect the final URL and retry configuration without logging the key. A successful SDK initialization does not test protocol compatibility.

## Where to continue

Use [first request](/docs/llm/first-request) for a minimal Chat Completions example, [Claude Opus 5.5](/docs/models/claude-opus-5-5) for Messages, or [Gemini 3.6 Flash](/docs/models/gemini-3.6-flash) for native content requests. Check current availability before running any example. Streaming has separate event formats; follow the [streaming guide](/docs/llm/streaming).
