App attribution
Send one header and your app appears in the public javinfo rankings with request counts, user counts and a provider breakdown. Free, opt-in, takes a minute.
Add a referer header to your API calls and javinfo starts keeping a public page for your app: total requests, how many accounts call through it, which provider answers most often. Your app shows up on the rankings at javinfo.dev.
It costs nothing. Attributed calls are billed exactly like unattributed ones and the headers do not touch your rate limit. Skip them and nothing happens: no page, no ranking, no record.
The headers
| Header | Required | What it does |
|---|---|---|
HTTP-Referer | yes | Your app's URL. This is the identity of the app. No URL, no app page. |
Referer | – | Browsers set this for you. Used as a fallback when HTTP-Referer is absent. |
x-javinfo-title | no | Display name. Defaults to the hostname of your URL. |
x-javinfo-categories | no | Comma-separated tags, up to 10. Lowercased for you. |
HTTP-Referer is the OpenRouter convention and it exists because plain Referer is a
forbidden header in
browsers: JavaScript cannot set it. From a server you can set either. From the browser you get
Referer for free and set the rest yourself.
curl "https://api.javinfo.dev/movie?q=SSIS-001" \
-H "x-javinfo-key: jvi_your_key_here" \
-H "HTTP-Referer: https://myapp.example.com" \
-H "x-javinfo-title: My App" \
-H "x-javinfo-categories: search-ui, metadata"const res = await fetch('https://api.javinfo.dev/query?q=SSIS', {
headers: {
'x-javinfo-key': 'jvi_your_key_here',
'HTTP-Referer': 'https://myapp.example.com',
'x-javinfo-title': 'My App',
},
});Set them once in your HTTP client's default headers and forget about them.
The URL you send becomes a public link on javinfo.dev. Send the page you want people to click, not an internal admin panel or a staging host.
Which endpoints count
/movie, /query and /random. Every successful call through one of those with a valid referer
adds one request to your app's total. /stats and /health are not attributed.
Recording happens on a background queue after your response is already on the wire, so it adds no latency and a Redis hiccup can never fail a request that otherwise worked.
What gets stored
The URL is normalized to origin plus path. Query strings and fragments are dropped, and a bare root path collapses to the origin:
https://myapp.example.com/?ref=hn → https://myapp.example.com
https://myapp.example.com/search?q=x → https://myapp.example.com/searchDifferent paths are different apps. Pick one canonical URL and stay on it, or your traffic splits across two rows in the rankings.
Title and categories are only updated when you send them. Leave them off and whatever you sent last time stays put.
What gets ignored
Attribution is dropped silently in all of these cases. The API call itself still succeeds.
- No
HTTP-Refererand noReferer. - A referer that is not a valid URL.
- Anything that is not
httporhttps. Nofile://, no custom schemes. localhost,127.0.0.1,::1. Local development never pollutes the rankings.javinfo.devandapp.javinfo.dev. We do not rank ourselves.- URLs longer than 500 characters.
- A title without a URL.
x-javinfo-titleon its own creates nothing.
Categories beyond the first 10 are cut. There is no fixed category list, so use whatever describes
your app: search-ui, discord-bot, cli, scraper, mobile-app.
Your app page
The first attributed request creates the entry and it goes live immediately. From then on the
rankings show your app sorted by all-time requests, and clicking through to javinfo.dev/apps/{id}
gives you:
- Total requests, all time.
- Distinct javinfo accounts that have called through your URL. Counted per account, not per call, so it is a real user count rather than a visit count wearing a user-count label.
- Provider split: how many of your lookups were answered by FANZA, DMM, javdb, missav, javdatabase or javlibrary. See Providers for what that ordering means.
The same data is readable without a key:
curl "https://api.javinfo.dev/v1/apps/rankings?limit=20"
curl "https://api.javinfo.dev/v1/apps/{id}"Rankings are earned, never sold. Paid placements exist elsewhere on javinfo.dev and are labeled as such; they cannot buy a position in this table.
Removing your app
Stop sending the header and your entry stops growing, though the historical numbers stay. Want the page gone entirely? Mail [email protected] from an address on the same domain as the URL and we will delete it.