---
title: "AX Audit API"
description: "Embed agent-readiness scoring into any website or tool — no auth required for core endpoints"
canonical: "https://docs.ainative.studio/docs/api/ax-audit"
last-updated: "2026-10-26T19:08:16.785Z"
---

# AX Audit API

Source: https://docs.ainative.studio/docs/api/ax-audit

> Embed agent-readiness scoring into any website or tool — no auth required for core endpoints

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

## 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`**

```json
{ "url": "https://yoursite.com" }
```

<Tabs>
<TabItem value="curl" label="cURL">

```bash
curl -X POST https://api.ainative.studio/api/v1/public/ax-audit \
  -H "Content-Type: application/json" \
  -d '{"url": "https://yoursite.com"}'
```

</TabItem>
<TabItem value="js" label="JavaScript">

```js
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"
```

</TabItem>
<TabItem value="python" label="Python">

```python
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"
```

</TabItem>
</Tabs>

**Response**

```json
{
  "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`**

```json
{
  "url": "https://yoursite.com",
  "industry": "saas"
}
```

**`GET /api/v1/public/ax-audit/reports/{report_id}`**

```bash
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`**

```json
{
  "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`**

```json
{
  "url": "https://yoursite.com",
  "max_pages": 25
}
```

Returns a `crawl_id`. Poll for results:

**`GET /api/v1/public/ax-audit/crawl/{crawl_id}`**

```json
{
  "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`**

```html
<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.

```bash
## 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**

```json
{
  "industry": "saas",
  "avg_score": 61,
  "p25": 42,
  "p50": 61,
  "p75": 78,
  "p90": 88
}
```

**Percentile response**

```json
{
  "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`**

```json
{
  "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**

```json
{
  "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`**

```json
{
  "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:

```js
// 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](/docs/api/errors) for full reference.
