javinfo

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

HeaderRequiredWhat it does
HTTP-RefereryesYour app's URL. This is the identity of the app. No URL, no app page.
RefererBrowsers set this for you. Used as a fallback when HTTP-Referer is absent.
x-javinfo-titlenoDisplay name. Defaults to the hostname of your URL.
x-javinfo-categoriesnoComma-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
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"
JavaScript (fetch)
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/search

Different 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-Referer and no Referer.
  • A referer that is not a valid URL.
  • Anything that is not http or https. No file://, no custom schemes.
  • localhost, 127.0.0.1, ::1. Local development never pollutes the rankings.
  • javinfo.dev and app.javinfo.dev. We do not rank ourselves.
  • URLs longer than 500 characters.
  • A title without a URL. x-javinfo-title on 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.

On this page