App attribution
Two optional headers put your application’s name in the activity log.
X-OpenRouter-Title: Your App
HTTP-Referer: https://yourapp.exampleSend them on any request to /v1/* and the App column names your application instead of guessing from the user agent. They are OpenRouter’s header names, deliberately, so a client already instrumented for OpenRouter is attributed here without a code change.
Headers
| Parameter | Type | Description |
|---|---|---|
X-OpenRouter-Title | string | Your application’s name, as you want it displayed. Truncated at 128 characters. The older spelling X-Title is accepted and treated identically; if both are present, X-OpenRouter-Title wins. |
HTTP-Referer | string | Your application’s URL. Truncated at 512 characters and shown as plain text, never as a link. Referer and Origin are accepted as fallbacks, in that order. |
What happens without them
We fall back to your HTTP client’s user agent, which identifies the SDK rather than the application. An agent harness built on the OpenAI SDK arrives as OpenAI/Python or OpenAI/JS — true, and useless for telling one of your integrations from another.
The App column shows, in order of preference:
- The title you sent, in full colour.
- The host from your referer, muted.
- A shortened user agent, muted.
The weaker two are deliberately greyed. A declared title is a claim, a user agent is a guess, and the display should never imply more certainty than it has.
Examples
curl
curl https://api.infersia.com/v1/chat/completions \
-H "Authorization: Bearer $INFERSIA_API_KEY" \
-H "X-OpenRouter-Title: Your App" \
-H "HTTP-Referer: https://yourapp.example" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek/deepseek-v4-flash-0731","messages":[{"role":"user","content":"hi"}]}'Python
from openai import OpenAI
client = OpenAI(
base_url="https://api.infersia.com/v1",
api_key="isk-v1-your-key-here",
default_headers={
"X-OpenRouter-Title": "Your App",
"HTTP-Referer": "https://yourapp.example",
},
)TypeScript
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.infersia.com/v1',
apiKey: process.env.INFERSIA_API_KEY,
defaultHeaders: {
'X-OpenRouter-Title': 'Your App',
'HTTP-Referer': 'https://yourapp.example',
},
});For client authors
If you build an agent, an IDE extension or a CLI that can point at an OpenAI-compatible endpoint, this section is the one that matters. Everything above describes what a user can configure; what follows is what we ask you to send by default, so that none of them has to.
Send X-OpenRouter-Title with your product name and HTTP-Referer with your homepage on every request to a host matching api.infersia.com. That is the whole integration. There is nothing to register, no key to obtain, and no agreement to sign.
Scope it to this host
Attribution headers should be applied per provider, not globally — an unrecognised endpoint may reject unexpected headers, and sending a referer to an arbitrary host is a leak of the kind nobody wants shipped on their behalf. Match on the hostname api.infersia.com the same way you already match the providers you support.
Stability
- These header names are stable. They are OpenRouter’s, they are read by the gateway on every
/v1route, and changing them would break every client already sending them. - Unrecognised headers are ignored, never rejected. Sending attribution to this endpoint cannot break a request.
- Neither header affects routing, pricing, rate limits or model selection. Attribution is a display concern and nothing else.
/transparency. These headers travel beside your request, not inside it.Attribution and the partner programme
The same header drives partner rebates: traffic carrying a registered title is matched to a partner account and earns a share of what it spends. Attribution is the mechanism, so a client that sends it is already integrated — see /partners.