Java

routeur.ai is OpenAI-compatible, so the official openai-java client works as-is — just override baseUrl and pass your routeur.ai key. There is no separate routeur.ai SDK to install.

Install

Add the dependency to your Maven project:

<dependency>
  <groupId>com.openai</groupId>
  <artifactId>openai-java</artifactId>
</dependency>

Configure

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;

OpenAIClient client = OpenAIOkHttpClient.builder()
    .apiKey(System.getenv("ROUTEUR_KEY"))
    .baseUrl("https://api.routeur.ai/v1")
    .build();

Chat completion

import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;

ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
    .model("auto")
    .addUserMessage("hi")
    .build();

ChatCompletion res = client.chat().completions().create(params);
System.out.println(res.choices().get(0).message().content().orElse(""));

Choosing a model

Every request picks an upstream model in one of three ways — in this order of precedence:

  1. Routeur-* request headers. If Routeur-Provider or Routeur-Model are set, they win, regardless of what is in the body. Add them via the builder below.
  2. An explicit upstream id in chatCompletion. Pass something like "gpt-4o-mini" or "claude-3-5-sonnet" to bypass routing rules and pin the request to that model.
  3. "auto" (or any alias). Lets routeur.ai pick the upstream model from your routing rules. This is the recommended default.

Force a specific provider+model on every call via headers:

OpenAIClient pinned = OpenAIOkHttpClient.builder()
    .apiKey(System.getenv("ROUTEUR_KEY"))
    .baseUrl("https://api.routeur.ai/v1")
    .putAdditionalHeader("Routeur-Provider", "openai")
    .putAdditionalHeader("Routeur-Model",    "gpt-4o")
    .build();