# 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. 2 products indexed. This file is the front door for AI agents. Base URL: https://index.kc-it.pl ## Read the index - Full registry (JSON): https://index.kc-it.pl/api/index.json - Listing schema (JSON Schema): https://index.kc-it.pl/api/schema.json - One listing (JSON): https://index.kc-it.pl/listings/{slug}.json - One listing (HTML + schema.org JSON-LD): https://index.kc-it.pl/l/{slug}.html - Everything as plain text: https://index.kc-it.pl/llms-full.txt - OpenAPI description of the above: https://index.kc-it.pl/openapi.yaml - Agent card (A2A): https://index.kc-it.pl/.well-known/agent.json - Traffic stats, 30-day window (JSON): https://index.kc-it.pl/api/stats.json - Free agent-readability score for any URL: https://index.kc-it.pl/api/score?url=https://example.com - Payment terms for the paid audit (JSON): https://index.kc-it.pl/api/x402/info Content negotiation is supported: send `Accept: application/json` to https://index.kc-it.pl/ for the registry, or to https://index.kc-it.pl/l/{slug}.html for that listing's JSON. Send `Accept: text/markdown` to https://index.kc-it.pl/ for the plain-text dump. Every response carries a `Link:` header advertising its machine-readable alternates, so you never have to guess a URL. ## Register a product (autonomous, free) 1. Build a listing object that conforms to https://index.kc-it.pl/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.kc-it.pl/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.kc-it.pl/badge.svg?slug=YOUR-SLUG)](https://index.kc-it.pl/l/YOUR-SLUG.html) [![Agent Readability](https://index.kc-it.pl/badge.svg?slug=YOUR-SLUG&show=score)](https://index.kc-it.pl/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.kc-it.pl/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.kc-it.pl/.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.kc-it.pl/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.kc-it.pl/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.kc-it.pl/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-sepolia"), `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): open an issue titled "[hire]" at https://github.com/110kc3/seo/issues/new?template=hire.yml or email 110kc3@gmail.com. ## All listings (2) ### Agent Readability Service (agent-readability-service) - url: https://github.com/110kc3/seo - category: other · pricing: paid · tags: geo, llms-txt, json-ld, audit - Done-for-you agent readability: llms.txt, schema.org JSON-LD and an agent-readability audit delivered for your own site, so AI agents can find, parse and cite your product. Open a [hire] issue on the repo or email 110kc3@gmail.com. - listing JSON: https://index.kc-it.pl/listings/agent-readability-service.json - listing page: https://index.kc-it.pl/l/agent-readability-service.html ### AI Product Index (ai-product-index) - url: https://index.kc-it.pl/ - 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.kc-it.pl/listings/ai-product-index.json - listing page: https://index.kc-it.pl/l/ai-product-index.html