Magister API

Audits

Start an AEO (AI readiness) audit of a page

POSThttps://api.magistermarketing.com/v1/audits/aeo

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

Cost
Free
Runs
As a job: 202, then poll
Key
Any key
Holds up to
Nothing

Parameters

NameTypeAbout
webhook_urlstring · bodyPublic 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_creditsnumber · bodyRefuse 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
urlrequiredstring · bodyA public page, such as https://example.com/pricing.
at most 2000 characters

This one runs as a job: the call answers 202 with a job_id; poll GET /v1/jobs/{job_id} until its status is no longer running, or pass a webhook_url. Jobs and webhooks

Request

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

succeededin 2 s· free
{
  "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/…"
}

A real call from a test organization, 2026-11-12. Trimmed: 4 of its 21 checks.