# Audit a web page by URL

Fetches one web page and returns its on-page facts: status code, title, description, canonical URL, H1, link counts, size and load time. Use it to check a page's technical health.

Tool `web.page.audit` on Open web and SEO. Contract version 1, released 2026-10-27.

## Example call

Over REST, send the input in the body. Over MCP, pass the same input to `call_tool`.

cURL:

```bash
curl https://api.voxoria.ai/v1/tools/web.page.audit/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"url":"https://moz.com/"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/web.page.audit/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={"input": {"url": "https://moz.com/"}},
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/web.page.audit/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"input": {"url": "https://moz.com/"}}),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "web.page.audit",
    "input": {
      "url": "https://moz.com/"
    }
  }
}
```

Both return [the full response](/docs/call-response.md): the call's ID, status and cost, with this tool's result in `output`.

## Input

| Input | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `url` | string | Yes |  | Address of the public page to audit, starting with http:// or https://. The page is fetched when called. Format `uri`. Matches `^https?://[^\s/?#]+\S*$`. |

## Output

A successful call returns these blocks in its `output`. A field not marked required can be `null`.

### page

One object. Can be `null`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | Yes | Address of the page that was audited. |
| `status_code` | integer | Yes | HTTP status code the page answered with. |
| `redirect_url` | string | No | Where the page redirects to. Absent when it does not redirect. |
| `content_type` | string | No | Media type of the page, such as "text/html". |
| `title` | string | No | Text of the page's title element. |
| `description` | string | No | The page's meta description. |
| `canonical_url` | string | No | Address the page declares as canonical. |
| `h1` | array of string | No | Text of each h1 heading, in page order. |
| `word_count` | integer | No | Words of readable text on the page. |
| `internal_link_count` | integer | No | Links to pages of the same site. |
| `external_link_count` | integer | No | Links to other sites. |
| `image_count` | integer | No |  |
| `size_bytes` | integer | No | Size of the page's HTML, in bytes. |
| `load_time_ms` | integer | No | Time to load the page, in milliseconds. |
| `score` | number | No | The provider's on-page SEO score, from 0 (worst) to 100. Each provider computes its own. |
| `fetched_at` | string | No | When the page was fetched, as an ISO 8601 timestamp in UTC. |

## Example output

The `output` of a real call, each list cut to 3 items.

```json
{
  "page": {
    "url": "https://moz.com/",
    "status_code": 200,
    "redirect_url": null,
    "content_type": "text/html",
    "title": "Moz - SEO Software for Smarter Marketing",
    "description": "Backed by the largest community of SEOs on the planet, Moz builds the tools that make SEO, content marketing, market research, digital PR, and local SEO easy. Start your free trial today!",
    "canonical_url": "https://moz.com/",
    "h1": [
      "Show up in search. Show up in AI. \nOwn the results."
    ],
    "word_count": 2233,
    "internal_link_count": 82,
    "external_link_count": 11,
    "image_count": 40,
    "size_bytes": 165475,
    "load_time_ms": 20,
    "score": 97.07,
    "fetched_at": "2026-10-28T04:25:27Z"
  }
}
```
