Ground truth for niche fashion.
Verified records on 60 fashion subcultures, from Goth Ninja to Ura-Hara: years, key brands, iconic pieces, where to buy, a price range, and a warning about what each one must not be confused with.
Models rarely invent. They blend.
Ask a strong model about a niche aesthetic and the answer sounds right. The errors are real brands borrowed from the style next door, so nothing flags them at a glance.
American workwear, not the Japanese repro-denim scene it was recommended for.
Techwear. The 2009-2014 forum look is draped and soft, not tactical.
High-street. The whole point of the style is the brands it is not.
| Same question, 15 subcultures | From memory | With the record |
|---|---|---|
| Recommends a brand from a neighbouring style | 8 of 15 | 1 of 15 |
| Years match the record (within 2 years) | 13 of 15 | 15 of 15 |
| Record's key brands named | 71% | 98% |
30 fresh Claude Opus chats, no web search, October 2026. All answers, the scoring script and the hand judgements are public: eval/.
One record, free.
This is the live response of GET /api/sample, in exactly the shape of the paid endpoint. The WARNING line is the field that does most of the work.
Goth Ninja
Internet-born aesthetic mixing dark drapery, drop-crotch proportions, and artisanal boots.
Key brands
Iconic items
Where to buy
Price range
Every subculture covered.
The list is free at GET /api/catalog; use the slug to fetch a record.
Two ways in.
Payments use the open x402 protocol: the API answers 402 with the price, your client signs a USDC authorization and retries. An unknown slug returns 404 before any payment is requested.
Claude, via MCP
Three tools: the catalog and the sample are free, records cost $0.01 from a wallet key you set, with a hard cap per call. Use a dedicated wallet with a few dollars in it.
claude mcp add underindex -e UNDERINDEX_PRIVATE_KEY=0x... -- npx -y underindex-mcp
Claude Desktop config, full setup:
"underindex": {
"command": "npx",
"args": ["-y", "underindex-mcp"],
"env": { "UNDERINDEX_PRIVATE_KEY": "0x..." }
}
Any x402 client
Works with @x402/fetch, Coinbase AgentKit and any agent that speaks x402.
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls({ maxAmountPerPayment: "$0.05" });
registerExactEvmScheme(client, {
signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY),
});
const pay = wrapFetchWithPayment(fetch, client);
const res = await pay(
"https://underindex-api.onrender.com/api/subculture/acubi-style"
);
console.log(await res.json());
Reference.
GET /api/catalogfreeEvery slug with its name and years, plus the dataset version and price.GET /api/samplefreeOne complete record (Goth Ninja), in the paid shape.GET /api/subculture/{slug}$0.01The full record. Also served as/api/subculture?name={slug}.GET /openapi.jsonfreeOpenAPI 3.1 with x402 payment info and every valid slug.