# Lyrenth Lyrenth is the AI-readable web index: a search index of the public web built for AI. Any public URL becomes a stable AIDocument: clean markdown, source trace, cache truth, page structure, and token economics in one JSON contract. Built for agents. Origin-friendly by default. This is /llms-full.txt: the long-form companion to /llms.txt. If you're an AI agent reading this, the goal is to give you everything in one fetch so you can decide whether Lyrenth solves your problem without crawling further. ## What it is Lyrenth is the AI-readable web index: a search index of the public web built for AI. One standing index (1.1B+ pages), each page served as a stable AIDocument: clean markdown body, source trace (fetched_at, render_mode, status_code), cache truth (hit / miss / refreshed / stale_revalidated), page structure (headings, links, images, media, JSON-LD), and per-call token economics. Agents read pages through the index (POST /v1/aidocument, GET /v1/read); the index is standing, not fetch-on-demand, and a cross-caller cache collapses repeated reads into one upstream fetch. A query endpoint (send a question, get the best-matching AIDocuments) is coming. The envelope is the same regardless of how the source page was rendered (static HTML, React SPA, JS-hydrated content), and no website owner has to change anything for their pages to become AI-readable through Lyrenth. The wedge: agents that read web pages today either pay to clean raw HTML themselves (expensive, slow, hallucination-prone), or call a search API that returns noisy results. Lyrenth reads each URL once into the standing index and serves the same canonical AIDocument to every agent after that. The architecture lets us offer competitive per-call pricing while protecting origin sites from read amplification: many agents asking for the same URL within the cache window result in one upstream fetch. Per-call savings vs raw HTML to a frontier LLM run 60-90%. ## API Base URL: https://api.lyrenth.com/v1 Auth: Bearer token. Free tier is 2,000 successful API calls / month, no credit card. Sign up at https://www.lyrenth.com/signup. ``` GET /healthz public, not logged GET /aidocument.schema.json public, not logged v2 JSON Schema (draft-07) GET /v1/stats public, logged POST /v1/aidocument body {"url":"..."} Bearer, logged read URL -> v2 envelope GET /v1/read?url=... Bearer, logged GET form of /v1/aidocument -> clean Markdown GET /v1/document?url=... Bearer, logged index lookup only, 404 on miss POST /v1/submit body {"url":"..."} Bearer, logged 202 + background indexing # Per-user site management GET /v1/sites Bearer list of caller's verified domains POST /v1/sites/{domain}/verify Bearer issue / re-issue verification token POST /v1/sites/{domain}/check Bearer run DNS + HTML probe; 15s cooldown DELETE /v1/sites/{domain} Bearer drop the ownership record # Self-service analytics GET /v1/admin/stats?domain=...&days=N Bearer per-domain analytics GET /v1/admin/usage?api_key_id=...&days=N Bearer per-key usage GET /v1/admin/savings?api_key_id=...&days=N Bearer per-key savings ($, tokens) ``` ### The canonical AIDocument shape The v2 grouped envelope served by POST /v1/aidocument. Machine-readable JSON Schema (draft-07) lives at https://api.lyrenth.com/aidocument.schema.json; that schema is the source of truth for field names, required fields, and enum values (cache.status, source.freshness_policy, source.render_mode). The narrative example below is the same shape humans can read. ```jsonc { "schema": { "name": "AIDocument", "version": "2.0", "ref": "aidoc:sha256:7a14e9b2d8f3c901b42e5a77c0f19a34" }, "source": { "url": "https://...", "canonical_url": "https://...", "fetched_at": "...", "render_mode": "static" | "rendered" | "static_after_render_failure", "status_code": 200, "freshness_policy": "cache_first" | "force_refresh" }, "cache": { "status": "hit" | "miss" | "refreshed" | "stale_revalidated", "origin_contacted": false, "body_fetched": false }, "identity": { "title": "...", "description": "...", "language": "en", "content_type": "article" }, "content": { "markdown": "..." // the body, cleaned }, "structure": { "headings": [{"level": 1, "text": "..."}], "links": [{"url": "...", "text": "...", "internal": true}], "images": [{"url": "...", "alt": "..."}], "media": [{"url": "...", "kind": "video", "mime": "video/mp4", "poster": "..."}], "contacts": [{"type": "email", "value": "press@example.com", "label": "press", "source": "mailto"}], "structured_data": { /* parsed JSON-LD blocks, merged into one object */ } }, "signals": { "word_count": 1552, "reading_time": 7, "has_json_ld": true, "heading_hierarchy_ok": true }, "economics": { "raw_html_tokens_approx": 12500, "output_tokens_approx": 1850, "token_savings": 10650, "token_savings_percent": 0.85, "estimated_cost_usd": { "raw_html": 0.0375, "our_output": 0.0056, "savings": 0.0319 }, "pricing_basis": { "input_price_per_1k_usd": 0.003, "model_class": "frontier-1m-context" } } } ``` Media entries are references only: native