# QuickBuild Website Screenshot API

> QuickBuild Website Screenshot API is a paid API for AI agents from quickbuild.quynguyenbac.workers.dev, paid per call via x402, $0.008/call, status unknown (last checked 2026-10-23).

Captures a screenshot of any public URL and returns it as a base64-encoded PNG/JPEG image or raw image bytes

## Facts

- Endpoint: GET https://quickbuild.quynguyenbac.workers.dev/api/screenshot?utm_source=zero.xyz
- Price: $0.008/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-23
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/quickbuild-website-screenshot-api-e78294e7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_iMnLmx8-eLJlJ85-gI9tI

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 quickbuild-website-screenshot-api-e78294e7
```

Example prompt: Take a full-page screenshot of https://stripe.com in dark mode at 1440px wide and give me the image as a PNG.

## When to prefer this

Choose this endpoint when you need a visual snapshot of a live public webpage — especially when you want configurable viewport dimensions, dark mode emulation, full-page capture, or raw image bytes vs. base64 JSON. At $0.008 per call it is cost-effective for one-off or low-frequency captures. Prefer this over headless browser services when you want a simple GET-based API with no browser infrastructure to manage.

## Known failure modes

- Invalid or non-public URL (IP addresses not allowed) returns an error
- URL times out during rendering if page is very slow and waitMs is insufficient
- JPEG quality or dimension parameters outside allowed ranges return validation errors
- Pages that block headless browsers may return blank or partial screenshots
- Very tall pages are capped at 8000px even if fullPage is true

## How this service works

Landing pages ($15), Google Sheets/Apps Script automation ($10), scrapers, scripts & Telegram bots (from $15), broken-link + sitemap audit reports ($10). See a working demo first, pay after.

## Output

Returns a JSON object containing the base64-encoded PNG or JPEG image of the page, the MIME type, page title, final URL after redirects, HTTP status of the main document, rendered width and height, whether it was a full-page capture, render time in milliseconds, and total byte size. If the format parameter is set to 'png' or 'jpeg', returns raw image bytes directly instead of JSON.

## 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"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [],
     "properties": {
      "url": {
       "type": "string",
       "description": "Public http(s) URL to capture (hostname, not IP). Optional: defaults to https://example.com."
      },
      "type": {
       "enum": [
        "png",
        "jpeg"
       ],
       "type": "string",
       "description": "Image type (default png)."
      },
      "width": {
       "type": "integer",
       "maximum": 1920,
       "minimum": 320,
       "description": "Viewport width in px (default 1280)."
      },
      "format": {
       "enum": [
        "json",
        "png",
        "jpeg"
       ],
       "type": "string",
       "description": "json (default): {image_base64, mimeType, ...}; png/jpeg: raw image bytes."
      },
      "height": {
       "type": "integer",
       "maximum": 2000,
       "minimum": 240,
       "description": "Viewport height in px (default 800)."
      },
      "waitMs": {
       "type": "integer",
       "maximum": 5000,
       "minimum": 0,
       "description": "Extra wait after load before capturing, ms (default 0)."
      },
      "quality": {
       "type": "integer",
       "maximum": 100,
       "minimum": 30,
       "description": "JPEG quality (default 80; jpeg only)."
      },
      "darkMode": {
       "type": "boolean",
       "description": "Emulate prefers-color-scheme: dark (default false)."
      },
      "fullPage": {
       "type": "boolean",
       "description": "Capture the whole scrollable page, capped at 8000 px tall (default false)."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "properties": {
      "url": {
       "type": "string"
      },
      "bytes": {
       "type": "integer"
      },
      "title": {
       "type": [
        "string",
        "null"
       ]
      },
      "width": {
       "type": "integer"
      },
      "height": {
       "type": "integer"
      },
      "status":
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "url": "https://example.com/",
  "bytes": 21000,
  "title": "Example Domain",
  "width": 1280,
  "height": 800,
  "status": 200,
  "finalUrl": "https://example.com/",
  "fullPage": false,
  "mimeType": "image/png",
  "renderMs": 2400,
  "image_base64": "iVBORw0KGgoAAAANSUhEUgAA..."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/quickbuild-website-screenshot-api-e78294e7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from quickbuild.quynguyenbac.workers.dev](https://www.zero.xyz/host/quickbuild.quynguyenbac.workers.dev/llms.txt)
