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

# OpenRouter

> Route OpenRouter requests through Inference Catalyst for full observability.

Route your OpenRouter requests through the Inference Catalyst gateway to access hundreds of models while getting full observability. OpenRouter is OpenAI-compatible, so you use the OpenAI SDK with the `x-inference-provider-url` header.

<Info>Prefer automatic setup? Run `inf instrument` to instrument your codebase in seconds. [Learn more](/integrations/install-with-ai)</Info>

## Setup

<Steps>
  <Step title="Get your API keys">
    You need two keys:

    * **Inference Catalyst project API key** — from your [dashboard](https://inference.net/dashboard) under **API Keys**
    * **OpenRouter API key** — from your [OpenRouter account](https://openrouter.ai/keys)
  </Step>

  <Step title="Set environment variables">
    <Metadata text="integrations/openrouter/env-vars" />

    ```bash theme={"system"}
    export INFERENCE_API_KEY=<your-project-api-key>
    export OPENROUTER_API_KEY=<your-openrouter-api-key>
    ```
  </Step>

  <Step title="Update your code">
    Point the SDK at the gateway. Your project API key goes in `apiKey`, and the `x-inference-provider-url` header tells the gateway to forward requests to OpenRouter.

    <CodeGroup>
      <Metadata text="integrations/openrouter/setup" />

      ```typescript TypeScript theme={"system"}
      import OpenAI from "openai";

      const client = new OpenAI({
        baseURL: "https://api.inference.net/v1",
        apiKey: process.env.INFERENCE_API_KEY,
        defaultHeaders: {
          "x-inference-provider-api-key": process.env.OPENROUTER_API_KEY,
          "x-inference-provider-url": "https://openrouter.ai/api",
          "x-inference-environment": process.env.NODE_ENV,
        },
      });

      const response = await client.chat.completions.create({
        model: "z-ai/glm-5-turbo",
        messages: [{ role: "user", content: "Hello" }],
      }, {
        headers: { "x-inference-task-id": "default" },
      });
      ```

      <Metadata text="integrations/openrouter/setup" />

      ```python Python theme={"system"}
      import os
      from openai import OpenAI

      client = OpenAI(
          base_url="https://api.inference.net/v1",
          api_key=os.environ["INFERENCE_API_KEY"],
          default_headers={
              "x-inference-provider-api-key": os.environ["OPENROUTER_API_KEY"],
              "x-inference-provider-url": "https://openrouter.ai/api",
              "x-inference-environment": env = os.getenv("APP_ENV", "development"),
          },
      )

      response = client.chat.completions.create(
          model="z-ai/glm-5-turbo",
          messages=[{"role": "user", "content": "Hello"}],
          extra_headers={"x-inference-task-id": "default"},
      )
      ```

      <Metadata text="integrations/openrouter/setup-curl" />

      ```bash cURL theme={"system"}
      curl https://api.inference.net/v1/chat/completions \
        -H "Authorization: Bearer $INFERENCE_API_KEY" \
        -H "x-inference-provider-api-key: $OPENROUTER_API_KEY" \
        -H "Content-Type: application/json" \
        -H "x-inference-provider-url: https://openrouter.ai/api" \
        -H "x-inference-environment: production" \
        -H "x-inference-task-id: default" \
        -d '{
          "model": "z-ai/glm-5-turbo",
          "messages": [{"role": "user", "content": "Hello"}]
        }'
      ```
    </CodeGroup>
  </Step>
</Steps>
