# Notarized Website Capture

> Notarized Website Capture is a paid API for AI agents from notary.api.williamrobinson.dev, paid per call via x402, $10/call, status unknown (last checked 2026-10-12).

Crawls up to 20 pages of a public HTTPS website and produces a tamper-evident capture bundle (markdown, DOM, screenshots, TLS cert) with RFC 3161 and OpenTimestamps blockchain timestamping

## Facts

- Endpoint: POST https://notary.api.williamrobinson.dev/v1/notary/capture?utm_source=zero.xyz
- Price: $10/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/notarized-website-capture-f7083e30
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_mouEIsAFf7tLv1fpYUeC8

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 notarized-website-capture-f7083e30 -d '<json body>'
```

Example prompt: Please capture and notarize https://example.com — crawl up to 10 pages within the same origin, include screenshots and DOM snapshots, and tag it with case reference 'matter-2026-042' so I have a timestamped, tamper-evident archive.

## When to prefer this

Choose this endpoint when you need cryptographically verifiable, tamper-evident proof that a public website contained specific content at a specific point in time — particularly for legal evidence, compliance auditing, intellectual property disputes, or regulatory records. It is the right choice when RFC 3161 TSA timestamps and Bitcoin OpenTimestamps proofs are required, and when you need both visual (screenshot) and structural (DOM, markdown) capture artifacts in a single signed bundle. It is not appropriate for sites behind login walls, private IPs, or non-standard ports, and it is not a substitute for formal legal notarization by a human notary.

## Known failure modes

- URL validation failure if the start URL has userinfo, non-443 port, or private/localhost IP — returns 4xx without charge
- Pages that exceed extraction limits are skipped and logged in warnings, but the bundle is still delivered and charged
- If the time budget is exhausted before maxPages is reached, crawl stops early and the partial bundle is delivered and charged
- Additional seed URLs not sharing the same origin (or path prefix under same-path scope) are rejected
- Payment signature missing or invalid — returns 402 with payment-required header; no charge until valid payment attached
- Site blocks crawling (robots.txt, auth wall, CAPTCHA) — affected pages appear in failed count

## How this service works

Crawls up to 20 pages of one public HTTPS site into a deterministic capture.zip (per-page markdown, DOM snapshot, screenshot, response headers, TLS certificate) with a manifest.json hashing every file. The manifest digest is timestamped by an RFC 3161 TSA and submitted to OpenTimestamps (Bitcoin, pending at delivery). Not a legal notarization by a human notary; no forms/login. Charged once any bundle is delivered, even if later pages failed or the time budget truncated the crawl.

Price: $10.00 (10000000 atomic USDC per call), settled over HTTP 402 (x402, scheme "exact", EIP-3009).

How to pay: an unpaid POST answers 402 with a base64 `payment-required` header describing an exact transfer of 10000000 atomic USDC on eip155:8453 (asset 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) to 0x26026370fe8b2bb17af9092a17691c76519366da. Sign the EIP-3009 authorization, attach it in the `payment-signature` header, and retry the identical request. Invalid requests are never charged.

- Settlement: eip155:8453 / 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 / 0x26026370fe8b2bb17af9092a17691c76519366da

## Output

A JSON response containing download URLs for a capture.zip (per-page markdown, DOM snapshots, screenshots, response headers, TLS certificate), a manifest.json with SHA-256 hashes of every file, an RFC 3161 timestamp reply (.tsr), and an OpenTimestamps Bitcoin proof (.ots). Also includes crawl statistics (pages captured/failed, stop reason), any warnings, expiry date for artifact links, and the echoed reference ID.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "format": "uri",
   "maxLength": 2048,
   "minLength": 1,
   "description": "Public HTTPS start URL, validated the same way as the evidence product (no userinfo, no non-443 port, no localhost/private-IP literal)."
  },
  "urls": {
   "type": "array",
   "items": {
    "type": "string",
    "format": "uri",
    "maxLength": 2048,
    "minLength": 1
   },
   "default": [],
   "maxItems": 20,
   "description": "Additional seed URLs; must share url's origin (and, under same-path scope, its path prefix); deduplicated after normalization."
  },
  "scope": {
   "enum": [
    "same-origin",
    "same-path"
   ],
   "type": "string",
   "default": "same-origin",
   "description": "same-path restricts crawled links to the directory of url's path and below."
  },
  "maxPages": {
   "type": "integer",
   "default": 10,
   "maximum": 20,
   "minimum": 1
  },
  "reference": {
   "type": "string",
   "maxLength": 200,
   "minLength": 1,
   "description": "Buyer's case/matter id, copied into the manifest (and therefore timestamped)."
  },
  "includeHtml": {
   "type": "boolean",
   "default": true,
   "description": "Include each page's serialized DOM snapshot in the capture."
  },
  "screenshots": {
   "type": "boolean",
   "default": true
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "pages": {
   "failed": 1,
   "captured": 4,
   "maxPages": 5,
   "stoppedBy": "max_pages",
   "notCaptured": 42
  },
  "status": "notarized",
  "startUrl": "https://www.iana.org/help/example-domains",
  "warnings": [
   "1 subresource were dropped by the capture budget across all pages",
   "page 4 (https://www.iana.org/protocols) failed: EXTRACTION_LIMIT_EXCEEDED"
  ],
  "artifacts": [
   {
    "url": "https://notary.api.williamrobinson.dev/v1/notary/artifacts/dacd7ad09988f18304e7391fc1f61608e151314436ecac79/manifest.json",
    "name": "manifest.json",
    "sha256": "25c9054a051cffd7bc51020273d306f194926cb1a1bc07831fc990f4b420cd67",
    "mediaType": "application/json",
    "sizeBytes": 8149
   },
   {
    "url": "https://notary.api.williamrobinson.dev/v1/notary/artifacts/dacd7ad09988f18304e7391fc1f61608e151314436ecac79/manifest.json.tsr",
    "name": "manifest.json.tsr",
    "sha256": "08e11ddd2b1191549b1d13897b1555a970a21597b203936ab0b8119da393a0b8",
    "mediaType": "application/timestamp-reply",
    "sizeBytes": 6007
   },
   {
    "url": "https://notary.api.williamrobinson.dev/v1/notary/artifacts/dacd7ad09988f18304e7391fc1f61608e151314436ecac79/manifest.json.ots",
    "name": "manifest.json.ots",
    "sha256": "2bac346c29f311053936a047a8f243448983ab51f04aa6c5796da347543a5eae",
    "mediaType": "application/octet-stream",
    "sizeBytes": 613
   },
   {
    "url": "https://notary.api.williamrobinson.dev/v1/notary/artifacts/dacd7ad09988f18304e7391fc1f61608e151314436ecac79/capture.zip",
    "name": "capture.zip",
    "sha256": "681dd2780bf78018349ad685ba5857e7a9be3adea7d9114ec246dbfa7fa3675e",
    "mediaType": "application/zip",
    "sizeBytes": 717325
   },
   {
    "url": "https://notary.api.williamrobinson.dev/v1/notary/artifacts/dacd7ad09988f18304e7391fc1f61608e151314436ecac79/report.json",
    "name": "report.json",
    "sha256": "ebcb7a871ff294ffdd41cff0708ccb51ddeb08e651583b37315c024bf76b1239",
    "mediaType": "application/json",
    "sizeBytes": 2581
   }
  ],
  "expiresAt": "2026-10-06T08:13:12.366Z",
  "reference": "matter-2026-001",
  "capturedTo": "2026-09-29T08:13:10.983Z",
  "timestamps": {
   "rfc3161": {
    "genTime": "2026-09-29T08:13:11.000Z",
    "authority": "digicert",
    "policyOid": "2.16.840.1.114412.7.1",
    "serialNumber": "5249246359816347852680129227448516577"
   },
   "openTimestamps": {
    "status": "pending",
    "calendars": [
     "https://a.pool.opentimestamps.org",
     "https://
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/notarized-website-capture-f7083e30/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from notary.api.williamrobinson.dev](https://www.zero.xyz/host/notary.api.williamrobinson.dev/llms.txt)
