{
  "serviceId": "agentsearch-web-render-v1",
  "displayName": "AgentSearch Web Render",
  "description": "Load a URL in headless Chromium with JavaScript executed and get the rendered page back for an LLM or RAG pipeline: markdown, text, HTML, title, links and an optional screenshot. POST /v1/render with {url}. Robots.txt is honored and private addresses are refused. JSON in, JSON out, errors included. Pay per request in USDC; no account, no API key.",
  "category": "web",
  "resourceUrl": "https://test.agent.pocket.network/v1/agentsearch-web-render-v1",
  "priceUsd": "0.005000",
  "priceVersion": 1,
  "rails": [
    {
      "id": "base",
      "network": "eip155:84532",
      "chainId": 84532,
      "tokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
      "tokenDecimals": 6,
      "payToAddress": "0xF732ea490c5766071785a2310523f7fA2CEbB829"
    }
  ],
  "paymentNetworks": [
    "eip155:84532"
  ],
  "paymentProtocols": [
    "x402"
  ],
  "protocols": [
    "rest"
  ],
  "inputSchema": {
    "type": "object",
    "description": "A render request. The body is JSON and is bounded by the service at 8 KiB.",
    "properties": {
      "url": {
        "type": "string",
        "maxLength": 4096,
        "description": "The public page to render (http or https, port 80 or 443)."
      },
      "formats": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "markdown",
            "text",
            "html",
            "links"
          ]
        },
        "description": "Which renderings to return (default markdown)."
      },
      "max_chars": {
        "type": "integer",
        "minimum": 1,
        "maximum": 100000,
        "description": "Cap on returned characters (default 20000)."
      },
      "screenshot": {
        "type": "boolean",
        "description": "Include a base64 screenshot, at most 1 MB (default false)."
      },
      "screenshot_format": {
        "type": "string",
        "enum": [
          "png",
          "jpeg"
        ],
        "description": "Screenshot encoding (default png)."
      },
      "full_page": {
        "type": "boolean",
        "description": "Screenshot the full page, clipped to 4000 px high (default false)."
      },
      "viewport": {
        "type": "object",
        "description": "Viewport size in pixels.",
        "properties": {
          "width": {
            "type": "integer",
            "minimum": 320,
            "maximum": 1920
          },
          "height": {
            "type": "integer",
            "minimum": 240,
            "maximum": 1600
          }
        }
      },
      "wait_until": {
        "type": "string",
        "enum": [
          "domcontentloaded",
          "load",
          "networkidle"
        ],
        "description": "When the page counts as loaded (default domcontentloaded)."
      },
      "wait_for_selector": {
        "type": "string",
        "maxLength": 300,
        "description": "A CSS selector to wait for, at most 1.5 s."
      },
      "wait_ms": {
        "type": "integer",
        "minimum": 0,
        "maximum": 1500,
        "description": "Extra wait after load, in milliseconds (default 0)."
      },
      "block": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "image",
            "media",
            "font",
            "stylesheet"
          ]
        },
        "description": "Resource types not to load (default media and font)."
      }
    },
    "required": [
      "url"
    ]
  },
  "outputSchema": {
    "type": "object",
    "description": "For POST /v1/render, a JSON object with request_id, url, requested_url, status_code, title, meta (render_ms, fetched_at, chars, truncated, js, robots, content_type, lang), error (null on success), warnings, links and the requested renderings, plus screenshot when asked. A page that cannot be rendered answers 200 with an error code such as ROBOTS_DISALLOWED; a bad request answers 4xx with `{ error: { code, message, retryable } }`."
  },
  "methods": {
    "GET /v1/capabilities": "read",
    "GET /v1/health": "read",
    "GET /v1/version": "read",
    "POST /v1/render": "read"
  },
  "example": {
    "method": "POST",
    "path": "/v1/render",
    "request": {
      "url": "https://example.com/",
      "formats": [
        "markdown"
      ],
      "max_chars": 1500
    },
    "response": {
      "portal": {
        "provenance": "third-party-supplier",
        "serviceId": "agentsearch-web-render-v1",
        "schemaCheck": "unchecked"
      },
      "data": {
        "request_id": "f27a6ed2d7c546bcaf9ee666be75a608",
        "url": "https://example.com/",
        "requested_url": "https://example.com/",
        "status_code": 200,
        "title": "Example Domain",
        "meta": {
          "render_ms": 350,
          "fetched_at": "2026-10-15T12:12:36.243863+00:00",
          "chars": 958,
          "truncated": false,
          "js": true,
          "robots": "allowed",
          "blocked_requests": 0,
          "content_type": "text/html",
          "lang": "en"
        },
        "error": null,
        "warnings": [],
        "links": [
          {
            "text": "Learn more",
            "href": "https://iana.org/help/example-domains"
          }
        ],
        "text": "",
        "markdown": "This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.\n\nهذا النطاق مُخصص للاستخدام في أمثلة التوثيق دون الحاجة إلى إذن. هذه ليست خدمة، يُرجى تجنب الاعتماد عليها لأغراض الاختبار والمراقبة.\n\n该域名仅用于文档示例，无需获得许可。这并非一项服务，请勿将其用于测试和监控目的。\n\nL’usage de ce domaine est réservé à des exemples de documentation, sans autorisation préalable. Il ne s’agit pas d’un service ; son utilisation à des fins de test ou de surveillance est à éviter.\n\nДанный домен предназначен для использования в примерах документации без необходимости получения предварительного разрешения. Это не сервис; не рекомендуется его использование для тестирования и мониторинга.\n\nEste dominio está destinado al uso en ejemplos de documentació…"
      }
    },
    "capturedAt": "2026-10-15T12:12:33.715Z"
  },
  "firstParty": true,
  "networks": [
    "eip155:84532"
  ],
  "serving": true,
  "page": "https://test.agent.pocket.network/services/agentsearch-web-render-v1",
  "descriptor": "https://test.agent.pocket.network/services/agentsearch-web-render-v1/descriptor.json"
}