Getting started
QuickstartCloudflare WorkerOther CDNs
Core concepts
Bot classificationEdge cachellms.txt
Dashboard
OverviewPolicy controlsWebhooks
API reference
POST /classifyPOST /purgeGET /stats

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.

  1. Go to Cloudflare Dashboard → Workers & Pages → Create
  2. Paste the XOXO Worker script (generated on signup, unique to your domain)
  3. Add a route: yourdomain.com/*
  4. Save and deploy — you're live
// XOXO Worker — generated on signup for your domain const XOXO_KEY = "xo_live_sk_YOUR_KEY"; export default { async fetch(request, env) { const res = await fetch("https://edge.xoxo.ai/v1/classify", { method: "POST", headers: { "Authorization": `Bearer ${XOXO_KEY}`, "X-URL": request.url, "X-UA": request.headers.get("user-agent") || "", "X-IP": request.headers.get("cf-connecting-ip") || "", }} ); const { action, payload } = await res.json(); if (action === "serve_cache") return new Response(payload, { status: 200 }); if (action === "block") return new Response("403", { status: 403 }); return fetch(request); // pass through to origin } }

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.

nginx config block
Add to your server block before the proxy_pass directive. Fires a subrequest to XOXO's classify endpoint and uses the response to route the request.
Fastly VCL
Available in the XOXO dashboard under Settings → Integrations → Fastly. Generates a custom VCL snippet for your service.
Vercel Edge Middleware
Drop a 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.

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.

POST https://edge.xoxo.ai/v1/classify Headers: Authorization: Bearer xo_live_sk_YOUR_KEY X-URL: https://yourdomain.com/article/123 X-UA: Mozilla/5.0 (compatible; GPTBot/1.0; ...) X-IP: 40.77.167.0 Response: { "action": "serve_cache", "payload": "<cached html>" } // or { "action": "block" } // or { "action": "passthrough" }

API: POST /v1/purge

Purge a specific URL from XOXO's edge cache. Call this from your CMS webhook when content is updated.

POST https://edge.xoxo.ai/v1/purge { "url": "https://yourdomain.com/article/123" }

API: GET /v1/stats

Retrieve savings statistics for your domain programmatically.

GET https://edge.xoxo.ai/v1/stats?domain=yourdomain.com&period=30d Response: }{ saved_usd: 5280, origin_calls_blocked: 1400000, bandwidth_saved_gb: 940, bot_share: 0.51 }{