Integration docs v1
XOXO works at the edge — between the internet and your origin server. Setup takes under 10 minutes and requires zero changes to your website code.
Method 1: Cloudflare Worker Recommended
For publishers already behind Cloudflare (most serious publishers are). This method takes 5 minutes.
- Go to Cloudflare Dashboard → Workers & Pages → Create
- Paste the XOXO Worker script (generated on signup, unique to your domain)
- Add a route:
yourdomain.com/* - Save and deploy — you're live
Method 2: Other CDNs / Reverse proxy
For publishers on Fastly, Vercel Edge, AWS CloudFront, or nginx. Add a subrequest to XOXO before passing traffic to your origin. No website code changes required.
middleware.ts file at the root of your Next.js project. XOXO provides a middleware helper package.Bot classification
XOXO classifies every request into one of four categories using a combination of user-agent analysis, behavioural fingerprinting, and IP reputation data.
- Training scrapers — GPTBot, ClaudeBot, CCBot, Common Crawl. Serve cached full HTML.
- Retrieval agents — PerplexityBot, OAI-SearchBot. Serve cached structured JSON.
- Search crawlers — Googlebot, Bingbot. Allow through (SEO traffic).
- Disguised bots — Bots mimicking Chrome/Safari/Firefox. Block by default.
Edge cache
XOXO maintains a globally distributed edge cache built on Cloudflare's infrastructure. When a bot hits your site from San Francisco, the nearest Cloudflare PoP intercepts it — your Mumbai origin never wakes up.
Cache TTL is configurable per domain (default: 1 hour for article content). Purge specific URLs instantly via webhook or the dashboard.
llms.txt auto-generation
XOXO automatically generates and serves a /llms.txt file at your domain. This machine-readable site guide gives AI agents the structural information they need in a single request — stopping them from crawling 5,000 pages to understand your site.
API: POST /v1/classify
The classification endpoint. Called by your Worker on every request.
API: POST /v1/purge
Purge a specific URL from XOXO's edge cache. Call this from your CMS webhook when content is updated.
API: GET /v1/stats
Retrieve savings statistics for your domain programmatically.