AX Audit API
The AX (Agent eXperience) Audit API lets you embed agent-readiness scoring into your own products. Scan any URL, retrieve persistent reports, crawl entire sites, and compare scores against industry benchmarks — all via REST.
Base URL: https://api.ainative.studio
No authentication required for scanning and reporting endpoints. Checkout and lead endpoints are public but rate-limited.
Endpoints
| Method | Path | Description |
|---|---|---|
POST | /api/v1/public/ax-audit | Run a quick scan (7 checks, score + grade) |
POST | /api/v1/public/ax-audit/full | Full audit — stores results, returns report_id |
GET | /api/v1/public/ax-audit/reports/{report_id} | Retrieve a stored report |
POST | /api/v1/public/ax-audit/unlock | Unlock full report with email |
POST | /api/v1/public/ax-audit/crawl | Start a multi-page site crawl |
GET | /api/v1/public/ax-audit/crawl/{crawl_id} | Poll crawl job results |
GET | /api/v1/public/ax-audit/badge | Generate dynamic OG badge image (PNG) |
GET | /api/v1/public/ax-audit/benchmark | List supported industries |
GET | /api/v1/public/ax-audit/benchmark/{industry} | Industry benchmark stats |
GET | /api/v1/public/ax-audit/benchmark/{industry}/percentile | Percentile rank for a score |
POST | /api/v1/public/ax-audit/leads | Capture a lead from audit results |
POST | /api/v1/public/ax-audit/checkout | Create Stripe checkout for Pro/Business/Agency |
Quick Scan
Runs 7 agent-readiness checks and returns a score (0–100) plus letter grade. No auth, no storage.
POST /api/v1/public/ax-audit
{ "url": "https://yoursite.com" }
- cURL
- JavaScript
- Python
curl -X POST https://api.ainative.studio/api/v1/public/ax-audit \
-H "Content-Type: application/json" \
-d '{"url": "https://yoursite.com"}'
const res = await fetch('https://api.ainative.studio/api/v1/public/ax-audit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url: 'https://yoursite.com' }),
});
const audit = await res.json();
console.log(audit.score, audit.grade); // e.g. 74, "B"
import httpx
r = httpx.post(
"https://api.ainative.studio/api/v1/public/ax-audit",
json={"url": "https://yoursite.com"},
)
audit = r.json()
print(audit["score"], audit["grade"]) # e.g. 74, "B"
Response
{
"url": "https://yoursite.com",
"score": 74,
"max_score": 100,
"grade": "B",
"scanned_at": "2026-04-24T20:00:00Z",
"checks": [
{
"name": "llms.txt present",
"passed": true,
"score": 15,
"max_score": 15,
"details": "Found at /llms.txt — 8.4KB"
},
{
"name": "OpenAPI spec",
"passed": false,
"score": 0,
"max_score": 15,
"details": "No openapi.json or openapi.yaml found"
}
]
}
AX Dimensions (7 checks)
| Dimension | Max Score | What It Checks |
|---|---|---|
llms.txt present | 15 | Agent-readable site summary |
| OpenAPI spec | 15 | Machine-readable API definition |
robots.txt AI permissions | 10 | Allows/disallows AI crawlers |
| Structured data (JSON-LD) | 15 | Schema.org markup for agents |
| API authentication clarity | 15 | Auth scheme documented and accessible |
| Response format consistency | 15 | JSON responses, predictable structure |
| Agent-friendly error messages | 15 | 4xx/5xx include actionable detail |
Full Audit + Persistent Report
Stores the result server-side and returns a report_id you can share or retrieve later.
POST /api/v1/public/ax-audit/full
{
"url": "https://yoursite.com",
"industry": "saas"
}
GET /api/v1/public/ax-audit/reports/{report_id}
curl https://api.ainative.studio/api/v1/public/ax-audit/reports/abc123
Unlock with Email
Full reports are gated by email — useful for lead capture in white-label flows.
POST /api/v1/public/ax-audit/unlock
{
"report_id": "abc123",
"email": "dev@agency.com"
}
Site Crawl
Scan multiple pages in one job. Free tier: 1 page. Pro: 500 pages. Business: unlimited.
POST /api/v1/public/ax-audit/crawl
{
"url": "https://yoursite.com",
"max_pages": 25
}
Returns a crawl_id. Poll for results:
GET /api/v1/public/ax-audit/crawl/{crawl_id}
{
"crawl_id": "xyz789",
"status": "completed",
"pages_crawled": 25,
"overall_score": 68,
"dimension_averages": {
"llms.txt present": 15,
"OpenAPI spec": 0
},
"pages": [ ... ]
}
Badge (OG Image)
Returns a dynamic 1200×630 PNG — drop it into any <meta og:image> tag or embed directly.
GET /api/v1/public/ax-audit/badge?url=yoursite.com&score=74&grade=B
<img src="https://api.ainative.studio/api/v1/public/ax-audit/badge?url=yoursite.com&score=74&grade=B" />
Grades A/A+ render green, B yellow, C/D/F red.
Industry Benchmarks
Compare a score against real-world data for a specific industry vertical.
# List industries
GET /api/v1/public/ax-audit/benchmark
# Get benchmark stats for SaaS
GET /api/v1/public/ax-audit/benchmark/saas
# Percentile rank for score=74 in SaaS
GET /api/v1/public/ax-audit/benchmark/saas/percentile?score=74
Benchmark response
{
"industry": "saas",
"avg_score": 61,
"p25": 42,
"p50": 61,
"p75": 78,
"p90": 88
}
Percentile response
{
"score": 74,
"industry": "saas",
"percentile": 72,
"message": "Better than 72% of SaaS sites"
}
Lead Capture
When a user unlocks a report, you can POST their details to trigger the AINative drip campaign or your own CRM.
POST /api/v1/public/ax-audit/leads
{
"url": "https://yoursite.com",
"email": "founder@startup.com",
"score": 74,
"findings_count": 3,
"dimensions_failed": ["OpenAPI spec", "Agent-friendly error messages"],
"package_interest": "pro",
"utm_source": "partner_agency",
"utm_medium": "embed",
"utm_campaign": "ax_widget_q2"
}
Response
{
"lead_id": "uuid",
"booking_url": "https://calendly.com/ainativestudio/?url=...&score=74&lead=uuid",
"status": "created"
}
The booking_url is pre-filled with context so the sales call is already informed.
Stripe Checkout
Create a checkout session for upgrading a user to Pro, Business, or Agency tier.
POST /api/v1/public/ax-audit/checkout
{
"tier": "agency",
"billing": "monthly",
"email": "dev@agency.com",
"utm_source": "docs"
}
Tiers
| Tier | Pages / crawl | White-label | API access |
|---|---|---|---|
| Free | 1 | No | Quick scan only |
| Pro | 500 | No | Full + crawl |
| Business | Unlimited | No | Full + crawl + benchmark |
| Agency | Unlimited | Yes | All endpoints + lead API |
Embedding in Your Product
Typical agency/tool integration pattern:
// 1. Run quick scan on user's URL
const audit = await fetch('https://api.ainative.studio/api/v1/public/ax-audit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url: userUrl }),
}).then(r => r.json());
// 2. Show score + grade in your UI
renderScoreWidget(audit.score, audit.grade, audit.checks);
// 3. On CTA click, capture lead
if (userClickedGetReport) {
const lead = await fetch('https://api.ainative.studio/api/v1/public/ax-audit/leads', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: userUrl,
email: userEmail,
score: audit.score,
utm_source: 'your_tool',
}),
}).then(r => r.json());
window.open(lead.booking_url, '_blank');
}
Rate Limits
| Endpoint | Limit |
|---|---|
| Quick scan | 60 req/min per IP |
| Full audit | 20 req/min per IP |
| Crawl | 5 concurrent jobs |
| Badge | 120 req/min |
Standard 429 with Retry-After header when exceeded. See error codes for full reference.