App Attribution
Get your app featured in EUrouter rankings and analytics.
App attribution allows developers to associate their API usage with their application, enabling visibility in EUrouter's public rankings and detailed analytics. By including simple headers in your requests, your app can appear in our leaderboards and gain insights into your model usage patterns.
Benefits of App Attribution
Attributed apps receive:
- Public App Rankings -- Your app appears in EUrouter's public rankings with daily, weekly, and monthly leaderboards
- Model Page Features -- Your app is shown on individual model pages, displaying usage statistics
- Comprehensive Analytics -- Track your model usage, token consumption, and cost trends over time
- Community Visibility -- Gain exposure among the EUrouter developer community
Attribution Headers
Include these optional HTTP headers in your API requests to enable attribution:
HTTP-Referer
Identifies your app's URL and is used as the primary identifier for rankings.
| Detail | Value |
|---|---|
| Header | HTTP-Referer |
| Required | Optional (recommended) |
| Format | Valid URL (e.g. https://myapp.com) |
X-EUrouter-Title
Sets or modifies your app's display name in rankings and analytics.
| Detail | Value |
|---|---|
| Header | X-EUrouter-Title |
| Required | Optional |
| Format | Plain text (e.g. My AI App) |
X-EUrouter-Categories
Assigns your app to one or more marketplace categories.
| Detail | Value |
|---|---|
| Header | X-EUrouter-Categories |
| Required | Optional |
| Format | Comma-separated, lowercase, hyphen-separated, max 30 characters each |
Categories
Categories are organized into four groups:
Coding
| Category | Description |
|---|---|
cli-agent | Command-line AI agents |
ide-extension | IDE plugins and extensions |
cloud-agent | Cloud-hosted coding agents |
programming-app | General programming tools |
native-app-builder | Native application builders |
Creative
| Category | Description |
|---|---|
creative-writing | Writing and storytelling |
video-gen | Video generation tools |
image-gen | Image generation tools |
Productivity
| Category | Description |
|---|---|
writing-assistant | Writing and editing tools |
general-chat | General-purpose chat apps |
personal-agent | Personal AI assistants |
Entertainment
| Category | Description |
|---|---|
roleplay | Roleplay experiences |
game | AI-powered games |
Implementation Examples
All three headers are optional, but including them enables all attribution features. Apps using localhost URLs must include a title to be tracked.
TypeScript (OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.eurouter.ai/api/v1",
apiKey: process.env.EUROUTER_API_KEY,
defaultHeaders: {
"HTTP-Referer": "https://myapp.com",
"X-EUrouter-Title": "My AI App",
"X-EUrouter-Categories": "general-chat,productivity",
},
});
const response = await client.chat.completions.create({
model: "gpt-5.1",
messages: [{ role: "user", content: "Hello!" }],
});Python (OpenAI SDK)
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.eurouter.ai/api/v1",
api_key=os.environ["EUROUTER_API_KEY"],
default_headers={
"HTTP-Referer": "https://myapp.com",
"X-EUrouter-Title": "My AI App",
"X-EUrouter-Categories": "general-chat,productivity",
},
)
response = client.chat.completions.create(
model="gpt-5.1",
messages=[{"role": "user", "content": "Hello!"}],
)Python (Direct API)
import os
import requests
response = requests.post(
"https://api.eurouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['EUROUTER_API_KEY']}",
"Content-Type": "application/json",
"HTTP-Referer": "https://myapp.com",
"X-EUrouter-Title": "My AI App",
"X-EUrouter-Categories": "general-chat,productivity",
},
json={
"model": "gpt-5.1",
"messages": [{"role": "user", "content": "Hello!"}],
},
)TypeScript (fetch)
const response = await fetch(
"https://api.eurouter.ai/api/v1/chat/completions",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.EUROUTER_API_KEY}`,
"Content-Type": "application/json",
"HTTP-Referer": "https://myapp.com",
"X-EUrouter-Title": "My AI App",
"X-EUrouter-Categories": "general-chat,productivity",
},
body: JSON.stringify({
model: "gpt-5.1",
messages: [{ role: "user", content: "Hello!" }],
}),
}
);cURL
curl https://api.eurouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $EUROUTER_API_KEY" \
-H "Content-Type: application/json" \
-H "HTTP-Referer: https://myapp.com" \
-H "X-EUrouter-Title: My AI App" \
-H "X-EUrouter-Categories: general-chat,productivity" \
-d '{
"model": "gpt-5.1",
"messages": [{"role": "user", "content": "Hello!"}]
}'Where Your App Appears
App Rankings
Your app is listed on the Rankings page with daily, weekly, and monthly leaderboards. Rankings are based on the percentage share of total token volume and update hourly.
Model Apps Tabs
Individual model pages show which apps are using that model, giving your app additional exposure to developers browsing the model catalog.
Individual App Analytics
View detailed analytics for your app including model usage trends, token breakdowns, and historical patterns.
Best Practices
URL Requirements
- Use a consistent, publicly accessible URL for
HTTP-Referer - Avoid query parameters or fragments that change between requests
- For localhost development, always include a title header
Title Guidelines
- Keep titles concise and descriptive (under 50 characters)
- Avoid special characters or excessive formatting
- The title can be updated at any time by sending a new
X-EUrouter-Titleheader
Privacy Considerations
- The
HTTP-RefererURL and app title are publicly visible in rankings - Usage statistics are aggregated and do not expose individual request details
- You can stop appearing in rankings by removing the attribution headers