# Start an AEO (AI readiness) audit of a page: POST /v1/audits/aeo

One page's readiness for AI answers, such as llms.txt, structured data and crawler access: pass or fail per check.

- Base URL: https://api.magistermarketing.com
- Auth: `Authorization: Bearer $MAGISTER_API_KEY` (any key)
- Cost: free
- Runs as a job: answers 202 with a job_id; poll GET /v1/jobs/{job_id}, or pass webhook_url.

## Parameters

| Name | In | Type | Required | Notes |
| --- | --- | --- | --- | --- |
| webhook_url | body | string | no | Public https URL POSTed when the job finishes, signed in `Magister-Signature` with your organization's webhook secret (Settings -> Developers -> Webhooks); retried 5 times over a day.; at most 2000 characters |
| max_credits | body | number | no | Refuse the job (402 `limit_reached`, reason `max_credits_exceeded`) when the most it may hold is above this. A refused job costs nothing.; above 0, at most 100,000 |
| url | body | string | yes | A public page, such as https://example.com/pricing.; at most 2000 characters |

## Request

```bash
curl -X POST https://api.magistermarketing.com/v1/audits/aeo \
  -H "Authorization: Bearer $MAGISTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://tally.so/pricing"}'
```

## Response (a real call, 2026-11-12, trimmed)

```json
{
  "job_id": "3791ea10-980a-4105-9003-9bae1a08a2de",
  "kind": "aeo_check",
  "status": "succeeded",
  "created_at": "2026-11-12T01:37:16.129373+00:00",
  "finished_at": "2026-11-12T01:37:18.556616+00:00",
  "credits_charged": 0,
  "result": {
    "url": "https://tally.so/pricing",
    "checks_total": 21,
    "checks_passed": 15,
    "checks": [
      {
        "id": "llms_txt",
        "pass": true,
        "label": "llms.txt",
        "value": "Present",
        "detail": "Found at https://tally.so/llms.txt (4316 bytes)",
        "category": "discovery",
        "unverified": false,
        "informational": false
      },
      {
        "id": "llms_full_txt",
        "pass": false,
        "label": "llms-full.txt",
        "value": "Missing",
        "detail": "No llms-full.txt found. This extended file provides detailed context for AI models.",
        "category": "discovery",
        "unverified": false,
        "informational": false
      },
      {
        "id": "robots_ai_access",
        "pass": true,
        "label": "Search crawl policy (robots.txt)",
        "value": "0 search bots blocked at /",
        "detail": "Search policy at /: allowed. Training controls (preserve intended opt-outs): none blocked at /. Rules can differ by path. Comments do not identify the cause of HTTP blocking. Policy alone does not prove access or AI visibility.",
        "category": "discovery",
        "unverified": false,
        "informational": false
      },
      {
        "id": "sitemap",
        "pass": true,
        "label": "XML Sitemap",
        "value": "428 URLs",
        "detail": "Sitemap found with 428 URL entries.",
        "category": "discovery",
        "unverified": false,
        "informational": false
      }
    ]
  },
  "report_url": "https://api.magistermarketing.com/v1/jobs/…/report",
  "share_url": "https://api.magistermarketing.com/v1/reports/…"
}
```

The whole API reference, for an agent: https://magistermarketing.com/docs/api.md
