# PageAudit - Web Page Audit API

> PageAudit - Web Page Audit API is a paid API for AI agents from api.firstmention.uk, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-29).

Fetches a public webpage and returns its HTTP status, metadata (title, OG tags, favicon, canonical URL), headings, full markdown content, link inventory, optional link health-check results, and a content change hash.

## Facts

- Endpoint: GET https://api.firstmention.uk/s/pageaudit/audit?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/pageaudit-web-page-audit-api-da2af3ed
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_eSBWNGQH94xl03iCUI2S3

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability pageaudit-web-page-audit-api-da2af3ed
```

Example prompt: Can you audit https://news.ycombinator.com/ — give me its title, meta description, OG tags, and headings, convert the page to markdown, and also health-check 10 of its links to see which ones are broken?

## When to prefer this

Use this endpoint when you need a single-call solution that combines webpage fetching, content extraction to markdown, metadata inspection, link enumeration, and optional link health-checking — all for $0.01 USDC per call. Prefer it over raw HTTP fetchers when you need structured output (headings, OG tags, link counts) and a change hash for monitoring. It is ideal for SEO audits, content ingestion pipelines, broken-link detection, and lightweight page monitoring without needing a full crawler infrastructure.

## Known failure modes

- Non-public or authentication-required URL returns error or empty content
- URL unreachable or returns non-200 status (reflected in status field, ok=false)
- Malformed URL input fails schema validation before request
- Pages with heavy JavaScript rendering may return incomplete content
- Very large pages may be truncated at max_markdown_chars limit
- Link health checks may time out for slow external URLs
- Payment failure via x402 prevents the call from completing

## How this service works

Pay-per-call HTTP APIs, paid with x402 in USDC on Base (eip155:8453): agentkit, api-change-check, basedue, basewatch, chainread, check-sanctions, chgwatch, company-facts, composite, edgar, feednews, pageaudit, solcheck, token-dd, txpreflight, walletcheck, webmd, webread, websearch, x402index. Each operation describes its service.

## Output

A JSON object containing: ok (boolean success), url (final URL), status (HTTP response code), meta (title, description, OG tags, favicon, canonical), headings (array of {text, level}), markdown (page content as markdown up to configured char limit), markdown_chars (actual length), links (found/checked/internal/external counts), link_health (ok/broken/checked counts plus per-URL results with status codes), change_hash (SHA-256 hash of page content for change detection), and price_usd.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "headers": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "queryParams": {
     "type": "object",
     "required": [
      "url"
     ],
     "properties": {
      "url": {
       "type": "string",
       "format": "uri",
       "description": "Public http(s) page to audit"
      },
      "check_links": {
       "type": "integer",
       "maximum": 15,
       "minimum": 0,
       "description": "Number of unique links to health-check (0-15, default 0)"
      },
      "max_markdown_chars": {
       "type": "integer",
       "maximum": 200000,
       "minimum": 1000,
       "description": "Cap on returned markdown length (1000-200000, default 40000)"
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "properties": {
      "ok": {
       "type": "boolean"
      },
      "url": {
       "type": "string"
      },
      "meta": {
       "type": "object",
       "properties": {
        "og": {
         "type": "object",
         "properties": {}
        },
        "title": {
         "type": "string"
        },
        "favicon": {
         "type": "string"
        },
        "canonical": {
         "type": "string"
        },
        "description": {
         "type": "string"
        }
       }
      },
      "links": {
       "type": "object",
       "properties": {
        "found": {
         "type": "number"
        },
        "checked": {
         "type": "number"
        },
        "external": {
         "type": "number"
        },
        "internal": {
         "type": "number"
        }
       }
      },
      "status": {
       "type": "number"
      },
      "headings": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "text": {
          "type": "string"
         },
         "level": {
          "type": "number"
         }
        }
       }
      },
      "markdown
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "url": "https://news.ycombinator.com/",
  "meta": {
   "og": {},
   "title": "Hacker News",
   "favicon": "https://news.ycombinator.com/favicon.ico",
   "canonical": "",
   "description": ""
  },
  "links": {
   "found": 198,
   "checked": 10,
   "external": 78,
   "internal": 120
  },
  "status": 200,
  "headings": [
   {
    "text": "Hacker News",
    "level": 1
   }
  ],
  "markdown": "# Hacker News ...",
  "price_usd": "0.01",
  "change_hash": "0a080719be9fbb82a86a45b80dc8c2a430fbe17dc93d23758debac092864d00f",
  "link_health": {
   "ok": 9,
   "broken": 1,
   "checked": 10,
   "results": [
    {
     "ok": true,
     "url": "https://example.com/",
     "status": 200
    }
   ]
  },
  "markdown_chars": 17001
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/pageaudit-web-page-audit-api-da2af3ed/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.firstmention.uk](https://www.zero.xyz/host/api.firstmention.uk/llms.txt)
