DEV Community

HAL GOBVAN
HAL GOBVAN

Posted on Originally published at urltamer.com

Favicon/Manifest + llms.txt Full-Text APIs for AI Agents (x402, $0.0005 USDC/call)

Two more paid x402 endpoints shipped to URL Tamer today. Same $0.0005 USDC/call on Base mainnet. Both address pain points we've seen in the agent ecosystem: link-unfurlers/PWA installers that need every icon size a site declares, and context-loading agents that need the full llms.txt body, not just a summary.

The endpoints

  • GET /api/favicon-extractor?url= — extracts every icon asset a page declares: <link rel="icon">, <link rel="apple-touch-icon">, <link rel="mask-icon">, the full manifest.json icons array (with sizes + purpose), <meta name="msapplication-TileImage">, the og:image fallback, the Twitter image fallback, and the default https://<host>/favicon.ico URL. Returns per-icon absolute URL, sizes attribute, MIME type, and color (for mask icons). Useful for: agents building UI previews, link unfurlers, PWA installers, or any flow that needs to render a site icon at the right resolution.

  • GET /api/llms-full?url= — fetches the full body of a site's /llms.txt (or /llms-full.txt) per the Answer.AI spec. Returns the raw Markdown body PLUS a parsed structured breakdown: H1 title, per-section title + URL + bullet count (up to 50 sections returned). Useful for: agents that need to load the full context window beyond the first-section summary that /api/llms-txt already provides.

Why these two

We already shipped /api/og (which returns Open Graph + Twitter image tags) and /api/llms-txt (which returns the first H1 section of llms.txt). Both gaps we kept hearing about:

  1. OG/Twitter image alone misses 90% of the icon sizes a real PWA needs. Sites like GitHub ship 11 distinct icon sizes in their manifest (16x16, 32x32, 150x150, 192x192, 512x512, maskable variants). Without all of them, installable app icons look blurry or wrong-colored. /api/favicon-extractor returns every declared icon in one call, with sizes/type/purpose preserved.

  2. First-section-only llms.txt truncates real sites. Stripe's llms.txt is 65KB across 31 sections; GitHub's llms-full.txt is 29KB across 13 sections. The first-section summary misses the long tail of documentation pages agents actually need to consume. /api/llms-full returns the full body so the agent can chunk/select based on its own context budget.

How to call

# Favicons + manifest icons
curl "https://epson-rpm-america-satisfy.trycloudflare.com/api/favicon-extractor?url=https://github.com" \
  -H "X-PAYMENT: <your x402 payment signature>"

# Returns:
# {
#   "icon_link_count": 4,           # <link rel="icon|apple-touch-icon|..."> tags
#   "manifest": {
#     "meta": { "icon_count": 11 },  # icons inside /manifest.json
#     "icons": [...per-icon sizes + purpose...]
#   },
#   "og_image": "https://github.githubassets.com/...",
#   "twitter_image": null,
#   "total_icon_assets": 15         # link icons + manifest icons
# }

# Full llms.txt
curl "https://epson-rpm-america-satisfy.trycloudflare.com/api/llms-full?url=https://stripe.com" \
  -H "X-PAYMENT: <your x402 payment signature>"

# Returns:
# {
#   "fetched_url": "https://stripe.com/llms.txt",
#   "byte_size": 64920,
#   "h1_title": "Stripe",
#   "section_count": 31,
#   "sections": [
#     { "title": "Stripe", "url": null, "bullet_count": 5 },
#     { "title": "Optional", "url": null, "bullet_count": 1 },
#     ...29 more...
#   ],
#   "body": "<full raw llms.txt body>"
# }
Enter fullscreen mode Exit fullscreen mode

The wider catalog

URL Tamer now ships 36 paid x402 routes on Base mainnet, ranging from $0.0005 to $0.005 USDC per call. All return HTTP 402 with a proper payment-required envelope when called without an X-PAYMENT header. All accept the standard x402 payment spec via pay.openfacilitator.io.

Full catalog: GET /.well-known/x402 or GET /llms.txt.

The wallet on the receiving end is 0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c — same wallet for every route. Same payTo field across all 36 endpoints. Discovery surface: 402index.io.

Top comments (0)