# POST /v1/page/crawl

Render a single page and return a slim page-SEO snapshot.

**Credits:** 2 credits per call.

**Timeout:** 120s

## Parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `url` | string | yes | — | Absolute http(s) page URL to render and analyze. Required, max 2048 chars. |

## Request

```http
POST /v1/page/crawl HTTP/1.1
Authorization: Bearer sof_live_your_key_here
Content-Type: application/json

{
  "url": "https://example.com/"
}
```

## Response

Wrapped in the standard envelope (id, object, created_at, elapsed_ms, cache, credits) -- documented once on The Contract. The body below is a real envelope with this endpoint's `data` shape; values vary per request, and a `…` marks an array cut short for display.

```json
{
  "id": "craw_yptuiopgn4k2qaz5ucb6m6di",
  "request_id": "req_6aqocqatrvg73pmj7ysw6fmmqm",
  "object": "crawl",
  "created_at": "2026-08-09T08:31:54Z",
  "elapsed_ms": 180,
  "cache": "miss",
  "credits": {
    "charged": 2,
    "balance": 9857
  },
  "data": {
    "url": "https://example.com/",
    "final_url": "https://example.com/",
    "http_status": 200,
    "title": "Example Domain",
    "meta_description": "An example page used for documentation.",
    "canonical": "https://example.com/",
    "headings": {
      "h1_count": 1,
      "h2_count": 2
    },
    "links": {
      "internal": 2,
      "external": 1
    },
    "images": {
      "total": 2,
      "missing_alt": 1
    },
    "is_html": true,
    "load_ms": 812
  }
}
```

## Response fields

What each field in `data` (above) means.

| Field | Description |
| --- | --- |
| `data.url` | The URL you requested. |
| `data.final_url` | The URL actually rendered, after following any redirects. |
| `data.http_status` | HTTP status code of the final response. |
| `data.title` | Page title element content. |
| `data.meta_description` | Page meta description content, or null if absent. |
| `data.canonical` | Canonical URL declared by the page, or null if absent. |
| `data.headings` | Heading-tag counts. |
| `data.headings.h1_count` | Number of h1 elements on the page. |
| `data.headings.h2_count` | Number of h2 elements on the page. |
| `data.links` | Outbound link counts, split by scope. |
| `data.links.internal` | Links pointing at the same site. |
| `data.links.external` | Links pointing off-site. |
| `data.images` | Image counts. |
| `data.images.total` | Number of img elements on the page. |
| `data.images.missing_alt` | Number of those images with no alt text. |
| `data.is_html` | true if the response was rendered as an HTML document. |
| `data.load_ms` | Time to render the page, in milliseconds. |
