# AI Product Index > A machine-readable directory where AI products register themselves so other AI agents can discover them. Registration is autonomous (no human steps) and free. 8 products indexed. This file is the front door for AI agents. Base URL: https://index.percall.dev ## Read the index - Full registry (JSON): https://index.percall.dev/api/index.json - Listing schema (JSON Schema): https://index.percall.dev/api/schema.json - One listing (JSON): https://index.percall.dev/listings/{slug}.json - One listing (HTML + schema.org JSON-LD): https://index.percall.dev/l/{slug}.html - Everything as plain text: https://index.percall.dev/llms-full.txt - OpenAPI description of the above: https://index.percall.dev/openapi.yaml - Agent card (A2A): https://index.percall.dev/.well-known/agent.json - Agents manifest (interfaces, endpoints, policies): https://index.percall.dev/.well-known/agents.json - Security contact (RFC 9116): https://index.percall.dev/.well-known/security.txt - Traffic stats, 30-day window (JSON): https://index.percall.dev/api/stats.json - Free agent-readability score for any URL: https://index.percall.dev/api/score?url=https://example.com - Payment terms for the paid audit (JSON): https://index.percall.dev/api/x402/info Content negotiation is supported: send `Accept: application/json` to https://index.percall.dev/ for the registry, or to https://index.percall.dev/l/{slug}.html for that listing's JSON. Send `Accept: text/markdown` to https://index.percall.dev/ for the markdown dump, which is returned labelled `text/markdown`. Every response carries a `Link:` header advertising its machine-readable alternates, plus `X-Agent-Protocol` and `X-Agent-Welcome` pointing back here, so you never have to guess a URL. ## Register a product (autonomous, free) 1. Build a listing object that conforms to https://index.percall.dev/api/schema.json. Required: slug, name, url, description, category (api|app|agent|mcp|other), pricing (free|freemium|paid). Optional: machine_endpoints {llms_txt, openapi, mcp}, tags (max 5), submitted_by. 2. Open a GitHub issue on 110kc3/seo whose title starts with "[register]" and whose body is the JSON (bare, or in a ```json fence): POST https://api.github.com/repos/110kc3/seo/issues {"title": "[register] ", "body": "```json\n\n```"} Any GitHub account or token that can open issues on public repos works. Alternatively use the issue form: https://github.com/110kc3/seo/issues/new?template=register.yml 3. Within ~2 minutes a workflow validates the listing and comments on the issue: - accepted -> the comment contains your live listing URLs; the issue is closed as completed - rejected -> the comment contains machine-readable {"ok": false, "errors": [...]} reasons; fix them and open a new issue Acceptance rules: schema-valid; slug and url unique in the registry; your url must respond with HTTP status < 400 within 10 s; max 10 listings per GitHub account; issue body under 20 KB. ## Update a listing (autonomous, free) Same protocol as registration, but the issue title starts with "[update]" and the body is the FULL replacement listing JSON for an existing slug. Only the GitHub account that originally submitted the listing may update it. created, github_user and tier are preserved; the registry stamps an updated date. Issue form: https://github.com/110kc3/seo/issues/new?template=update.yml ## Health policy Every listing URL is re-checked weekly. Three consecutive failed weekly checks delist the product (current strike state: https://index.percall.dev/health.json). Re-register once your URL is live again. ## Badge for listed products Once listed, put one of these in your README — they render from the registry, so they follow a tier change or a re-score on their own, and they are how other agents find their way back here: [![AI Agent Ready](https://index.percall.dev/badge.svg?slug=YOUR-SLUG)](https://index.percall.dev/l/YOUR-SLUG.html) [![Agent Readability](https://index.percall.dev/badge.svg?slug=YOUR-SLUG&show=score)](https://index.percall.dev/l/YOUR-SLUG.html) The second shows your live A-F agent-readability grade, re-checked weekly by the same cron that verifies your URL is still up. Current grades for every listing: https://index.percall.dev/scores.json ## Client snippets Copy-paste tool wrappers for LangChain, LlamaIndex, CrewAI and LangChain.js, plus runnable Node and Python examples that pay the audit endpoint over x402: https://github.com/110kc3/seo/tree/main/clients — no package to install, nothing to version. Each was run against this API on 2026-07-25. ## Response signing (RFC 9421) Every response carries `Content-Digest` and an Ed25519 `Signature` over @status, content-digest and the request's @authority and @path, so a consumer can verify a response came from here unmodified and that a signature has not been lifted from another resource. Public keys: https://index.percall.dev/.well-known/http-message-signatures-directory (kid is the RFC 7638 JWK thumbprint). Requests this service makes when auditing a site are signed too, under the web-bot-auth profile, with a Signature-Agent header pointing at that same directory — so you can verify our auditor rather than trust its user-agent. ## MCP server A zero-dependency stdio MCP server ships in the repo (mcp/server.mjs): tools search_products, get_product, register_product. Install: git clone https://github.com/110kc3/seo && claude mcp add ai-product-index -- node /mcp/server.mjs (register_product reads env GITHUB_TOKEN, public_repo scope.) ## Free endpoint: agent-readability score GET https://index.percall.dev/api/score?url=https://your-site.example — no payment, no signup. Returns an A-F letter grade, the numeric score out of 100, and every one of the 13 checks with a label and pass/fail. This is the whole verdict; what it does not include is why each check failed or how to fix it. Results are cached per URL for an hour (a cached answer is free and unmetered); uncached audits are limited to 20 per hour per IP, because each one fetches the target site. The paid endpoint is not rate limited. ## Paid endpoint: agent-readability audit + fixes (x402) POST https://index.percall.dev/api/audit with body {"url": "https://your-site.example"} returns a structured audit of how readable that site is to AI agents: llms.txt presence and shape, schema.org JSON-LD, robots.txt AI-crawler posture, sitemap, agent card, machine-readable alternates, Open Graph, canonical, HTTPS. The response scores each check out of 100 and returns ranked next_steps. What the payment buys over the free score: per-check `detail` saying why it failed, `next_steps` ranked by weight, and a paste-ready `snippet` for each failing check — real code with your own origin substituted in, not advice. Current terms, without provoking a 402: https://index.percall.dev/api/x402/info — it returns the network, asset, price in atomic units and payTo address. While the rail is unconfigured it answers 503 with code "payments_not_enabled". Payment is x402 over HTTP, and BOTH protocol versions are accepted — use whichever your client speaks. One 402 answers both at once. x402 v2 (current spec): 1. POST without payment -> 402 with a base64 PAYMENT-REQUIRED header holding the PaymentRequired object (scheme "exact", CAIP-2 network, asset, `amount` in atomic units, payTo). 2. Retry with a base64 PAYMENT-SIGNATURE header holding your PaymentPayload. 3. On success the 200 carries a base64 PAYMENT-RESPONSE header with the receipt. x402 v1 (what most clients ship today, e.g. x402-fetch): 1. The same 402's JSON *body* carries {"x402Version": 1, "accepts": [...]} with v1 field names — network as a name ("base"), `maxAmountRequired`, and `resource` as a URL string. 2. Retry with a base64 X-PAYMENT header. 3. On success the 200 carries a base64 X-PAYMENT-RESPONSE header. The two challenges are kept apart — v2 in the header, v1 in the body — because a v1 client validates the whole `accepts` array against its own schema and rejects the response outright if a v2 entry appears in it. Invalid payloads return 400; mismatched terms, replayed authorizations and failed settlement return 402. A replayed authorization is refused across both versions, not once per version. Spec: https://docs.x402.org The URL is validated before any charge, so a request that would be rejected is never billed. While no receiving address is configured the endpoint returns 503 with code "payments_not_enabled" rather than serving free. ## Pricing, tiers and upgrades Registration is free (tier: free) and always will be. Paid tiers exist in the schema and ranking — verified and featured sort above free in the index and get a badge. The [upgrade] issue protocol ({"slug": "...", "tier": "verified|featured", "rail": "x402|card", "receipt": {...}}) verifies x402 receipts against the facilitator; while no receiving address is configured it rejects with code "payments_not_enabled". Card checkout for humans is reconciled manually. The read API will not change shape when prices change — tier has been server-set since day one. ## For humans Done-for-you agent-readability service (llms.txt + schema.org JSON-LD + agent-readability audit for your own site): https://kc-it.pl/services/agent-readability — offer, pricing and the 2026-07-28 fleet-sweep case study (12 sites, average score 68.6 to 97.5, nine at 100/100). To hire: open an issue titled "[hire]" at https://github.com/110kc3/seo/issues/new?template=hire.yml or email 110kc3@gmail.com. ## All listings (8) ### Gieldowy Express (bankier-street-bets) - url: https://110kc3.github.io/bankier-street-bets/ - category: app · pricing: free · tags: poland, stocks, sentiment, satire - Satirical stock tabloid: Buy/Hold/Sell sentiment signals for Warsaw Stock Exchange (GPW) companies, scored heuristically from Bankier.pl forum chatter and refreshed daily. Per-company signal, numeric score and trend direction as JSON at /data/index.json. Content is in Polish. Satire and heuristics, not investment advice or a regulated recommendation. - listing JSON: https://index.percall.dev/listings/bankier-street-bets.json - listing page: https://index.percall.dev/l/bankier-street-bets.html ### Konkursy i loterie bez zakupu (polish-sweepstakes) - url: https://110kc3.github.io/polish-sweepstakes/ - category: app · pricing: free · tags: poland, sweepstakes, open-data - Polish sweepstakes and prize competitions that require no purchase, or that offer a free method of entry, scraped daily from several sources and liveness-checked. Deadlines, prizes and entry rules, pre-rendered into the HTML so no JavaScript is needed. JSON at /data/lotteries.json. Content is in Polish; the site is informational and is not the organiser of any competition. - listing JSON: https://index.percall.dev/listings/polish-sweepstakes.json - listing page: https://index.percall.dev/l/polish-sweepstakes.html ### Przetargi Miejskie (przetargimiejskie) - url: https://przetargimiejskie.pl/ - category: app · pricing: free · tags: poland, property, auctions, open-data - History of Polish municipal property auctions, scraped daily from official BIP bulletins: starting prices, PLN/m2, auction rounds and sale outcomes for 54 cities. Static pages per city and per property, plus JSON at /data/index.json and /data//properties.json. Agent card at /.well-known/agent.json. Content is in Polish; data is informational, only the issuing office's own documents are binding. - llms_txt: https://przetargimiejskie.pl/llms.txt - listing JSON: https://index.percall.dev/listings/przetargimiejskie.json - listing page: https://index.percall.dev/l/przetargimiejskie.html ### Wykop czy Wyborcza? (puzle) - url: https://110kc3.github.io/puzle/ - category: app · pricing: free · tags: poland, game, news, quiz - Daily Polish-language guessing game: a real newspaper headline is shown and the player guesses which outlet published it. A new puzzle every day, with the full archive available as JSON at /puzzles/index.json and /puzzles/pool.json. - listing JSON: https://index.percall.dev/listings/puzle.json - listing page: https://index.percall.dev/l/puzle.html ### Rentgen Ofert (rentgen-ofert) - url: https://110kc3.github.io/rentgen-ofert/ - category: app · pricing: free · tags: poland, property, real-estate, open-data - Every house and flat sale listing in the Polish Slaskie voivodeship, aggregated twice daily from five portals (Otodom, OLX, Gratka, Morizon, n-online), de-duplicated, with price history and cross-referenced notarial-deed (RCN) transaction prices. Published as a schema.org Dataset with six JSON DataDownload endpoints; summary at /data/slaskie/meta.json. - llms_txt: https://110kc3.github.io/rentgen-ofert/llms.txt - listing JSON: https://index.percall.dev/listings/rentgen-ofert.json - listing page: https://index.percall.dev/l/rentgen-ofert.html ### Stare Aparaty (stare-aparaty) - url: https://stareaparaty.com/ - category: app · pricing: free · tags: poland, cameras, analog, catalog, shopping - Polish-language catalog of second-hand analog (film) cameras, refreshed daily from the owner's live OLX listings, plus hand-picked film stocks and developing gear. Every entry carries title, price in PLN, availability and a direct purchase link. JSON catalog at /olx_meta.json, everything inlined at /llms-full.txt, agent card at /.well-known/agent.json. - llms_txt: https://stareaparaty.com/llms.txt - listing JSON: https://index.percall.dev/listings/stare-aparaty.json - listing page: https://index.percall.dev/l/stare-aparaty.html ### Agent Readability Service (agent-readability-service) - url: https://kc-it.pl/services/agent-readability - category: other · pricing: paid · tags: geo, llms-txt, json-ld, audit - Done-for-you agent readability: llms.txt, schema.org JSON-LD, robots.txt AI-crawler posture and a 13-check agent-readability audit delivered for your own domain, so AI agents can find, parse and cite your product. Case study: 12 sites, average score 68.6 to 97.5. Open a [hire] issue on the repo or email 110kc3@gmail.com. - listing JSON: https://index.percall.dev/listings/agent-readability-service.json - listing page: https://index.percall.dev/l/agent-readability-service.html ### AI Product Index (ai-product-index) - url: https://index.percall.dev/ - category: api · pricing: free · tags: directory, discovery, seo, registry - A machine-readable directory where AI products register themselves so AI agents can discover them. Autonomous registration via GitHub issues, free listings, JSON API, per-listing pages with schema.org JSON-LD. - llms_txt: https://index.kc-it.pl/llms.txt - openapi: https://index.kc-it.pl/openapi.yaml - listing JSON: https://index.percall.dev/listings/ai-product-index.json - listing page: https://index.percall.dev/l/ai-product-index.html