# Webcap Web Extraction API

> Webcap Web Extraction API is a paid API for AI agents from webcap.shoutsid.fyi, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-12).

Extracts structured data (links, headings, markdown, images, metadata) from one or up to 50 URLs in a single pay-per-call request

## Facts

- Endpoint: GET https://webcap.shoutsid.fyi/v1/x402/extract?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/webcap-web-extraction-api-7a5e867a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_rDPMvnzsaBZ61c55yOGWq

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 webcap-web-extraction-api-7a5e867a
```

Example prompt: Pull all the links, headings, and main text from https://news.ycombinator.com and give me the results as structured JSON — use stealth proxy mode since the site might block bots.

## When to prefer this

Choose this endpoint when you need structured extraction (links, headings, markdown, metadata) from one or a batch of up to 50 pages in a single payment, especially when you want a schema-driven JSON output without managing API keys or accounts. Prefer it over generic scraping tools when you need pay-per-call economics, browser-rendered content with optional stealth proxy, or natural-language schema definition for field extraction.

## Known failure modes

- URL unreachable or returns non-200 status — result status will indicate failure
- JavaScript-heavy SPA may not render fully without specifying waitFor selector or post-load actions
- Rate-limited or bot-protected pages may return empty or incomplete content without proxy/stealth options
- Batch exceeds 50 URLs — request will be rejected
- CSS selector in waitFor never appears — times out after capped 10,000ms
- Invalid URL format causes parsing error
- maxContentWords set too low may truncate important content

## How this service works

Screenshot any URL. Extract structured data. Monitor for changes. Developer API with pay-per-call pricing — no API keys, no accounts.

## Output

Returns a JSON object with a payment receipt and a results array. Each result includes the URL, a status field, and a data object containing: page title, markdown content, paragraphs, headings (with levels), links (with href and text), images, word count, and meta description. Batch requests return one result object per URL.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "description": "A single page to extract"
  },
  "urls": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "maxItems": 50,
   "description": "Batch of pages for one payment (at most 50)"
  },
  "schema": {
   "type": "string",
   "description": "Optional natural-language description of the JSON to extract via a model"
  },
  "options": {
   "type": "object",
   "properties": {
    "proxy": {
     "type": "string",
     "description": "Proxy: \"auto\", \"stealth\", or an http(s) proxy URL string"
    },
    "actions": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "text": {
        "type": "string",
        "description": "Text to type (type only)"
       },
       "type": {
        "enum": [
         "click",
         "type",
         "wait"
        ],
        "type": "string",
        "description": "Action kind"
       },
       "selector": {
        "type": "string",
        "description": "CSS selector (click/type)"
       },
       "timeoutMs": {
        "type": "integer",
        "description": "Wait duration in milliseconds (wait only, capped at 10000)"
       }
      }
     },
     "maxItems": 5,
     "minItems": 1,
     "description": "Post-load actions: click/type/wait objects (1 to 5)"
    },
    "waitFor": {
     "type": "object",
     "properties": {
      "selector": {
       "type": "string",
       "description": "CSS selector to wait for"
      },
      "timeoutMs": {
       "type": "integer",
       "description": "Wait timeout in milliseconds (capped at 10000)"
      }
     },
     "description": "Wait for a selector before capture (timeoutMs capped at 10000)"
    },
    "fullPage": {
     "type": "boolean",
     "description": "Capture the full scrollable page"
    },
    "isMobile": {
     "type": "boolean",
     "description": "Render with a mobile viewport"
    },
    "viewport": {
     "type": "object",
     "properties": {
      "width": {
       "type": "integer",
       "description": "Viewport width in CSS pixels"
      },
      "height": {
       "type": "integer",
       "description": "Viewport height in CSS pixels"
      }
     },
     "description": "Capture viewport in CSS pixels (clamped to 320-3840 wide, 320-2160 tall)"
    },
    "timeoutMs": {
     "type": "integer",
     "description": "Page load timeout in milliseconds"
    },
    "userAgent": {
     "type": "string",
     "descriptio
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "payment": {
   "payer": "0x000000000000000000000000000000000000dEaD",
   "priceUsdcUnits": 10000
  },
  "results": [
   {
    "url": "https://example.com",
    "data": {
     "links": [
      {
       "href": "https://www.iana.org/domains/example",
       "text": "More information..."
      }
     ],
     "title": "Example Domain",
     "images": [],
     "headings": [
      {
       "text": "Example Domain",
       "level": 1
      }
     ],
     "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
     "wordCount": 9,
     "paragraphs": [
      "This domain is for use in illustrative examples."
     ],
     "description": "For use in examples."
    },
    "status": "ok"
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/webcap-web-extraction-api-7a5e867a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from webcap.shoutsid.fyi](https://www.zero.xyz/host/webcap.shoutsid.fyi/llms.txt)
