Skip to content
Back to AgentWork Web Evidence

Card snapshot

api.agentwork.run · 2026-10-19 12:33:56 UTC · 8ada14735609f8c4be00a5b6b5a53f69e87aaf8cfeafd76ed43262526af17361

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "name": "AgentWork Web Evidence",
  "version": "web-evidence-1.2.4",
  "description": "Web read, fetch URL and scrape URL to markdown (batch up to 10, optional JavaScript rendering); PDF text extraction; website change monitoring with hashes and line diffs. For RAG and research agents. x402 USDC on Base or Algorand, no account.",
  "aliases": [
    "web_read",
    "read_webpage",
    "fetch_url",
    "url_to_markdown",
    "scrape_url_to_markdown",
    "extract_text_from_pdf",
    "pdf_to_text",
    "pdf_text_extraction",
    "website_change_monitoring"
  ],
  "url": "https://api.agentwork.run",
  "documentationUrl": "https://api.agentwork.run/skill.md",
  "recipes": "https://api.agentwork.run/recipes.md",
  "openapi": "https://api.agentwork.run/openapi.json",
  "sample": "https://api.agentwork.run/v1/web/sample",
  "examples": {
    "monitor": "https://api.agentwork.run/examples/monitor-client.mjs",
    "research_brief": "https://api.agentwork.run/examples/research-brief.mjs",
    "workflows": "https://api.agentwork.run/workflows.md"
  },
  "pricing": {
    "currency": "USDC",
    "networks": [
      "eip155:8453",
      "algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8="
    ],
    "per_service_usdc": {
      "web.read": "0.005",
      "web.read.batch_per_url": "0.003",
      "web.read.render_per_url": "0.01",
      "web.changes": "0.005",
      "web.changes.batch_per_url": "0.003",
      "pdf.read": "0.01"
    },
    "per_service_usdc_algorand": {
      "web.read": "0.01",
      "web.read.batch_per_url": "0.006",
      "web.read.render_per_url": "0.02",
      "web.changes": "0.01",
      "web.changes.batch_per_url": "0.006",
      "pdf.read": "0.01"
    },
    "note": "web.read (and its /v1/web/fetch and /v1/web/markdown variants): one URL $0.005 Base / $0.01 Algorand; batches of 2-10 URLs $0.003 per URL ($0.006 Algorand); render=true $0.01 per URL ($0.02 Algorand). web.changes: one URL $0.005 / $0.01; items[] of 2-10 $0.003 per URL ($0.006 Algorand). The live 402 challenge states the exact total for your request body. Algorand web tools are 2x because the facilitator no longer sponsors sub-cent gas. PDF $0.01 on both.",
    "account_required": false
  },
  "payments": {
    "protocol": "x402",
    "version": 2,
    "networks": [
      {
        "network": "eip155:8453",
        "payTo": "0x1cfC6489bC9703a2A49715b8a746D8c6075F3A80",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "currency": "USDC"
      },
      {
        "network": "algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=",
        "payTo": "PFHYLVHX77ANNQVF67LK6EVYB34D5VDIUOWLOL5SX367M366DBLOQQAOCA",
        "asset": "31566704",
        "currency": "USDC"
      }
    ]
  },
  "skills": [
    {
      "id": "web.read",
      "name": "Web read / read webpage",
      "aliases": [
        "web_read",
        "read_webpage",
        "url_to_text"
      ],
      "description": "Webpage text extraction: extract clean text from any webpage. Extract the clean readable text from a public webpage with title, headings, links and SHA-256; add format=markdown for Markdown or render=true to render JavaScript pages. Web read / fetch URL / scrape URL to markdown \u2014 public webpage to clean text or Markdown with headings, links and SHA-256, for RAG and research. Batch up to 10 URLs; optional JavaScript rendering (headless Chromium). $0.005 per URL Base ($0.01 Algorand); batch of 2-10 $0.003/URL ($0.006); render $0.01/URL ($0.02). Synchronous JSON, no account; respects robots.txt; no paywall bypass. Failed reads not settled.",
      "method": "POST",
      "url": "https://api.agentwork.run/v1/web/read",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "anyOf": [
          {
            "required": [
              "url"
            ]
          },
          {
            "required": [
              "urls"
            ]
          }
        ],
        "description": "Send url (one page) or urls (batch of 2-10). Omit format for the original text response; format=markdown adds a markdown field. render=true loads the page in headless Chromium first.",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "Public HTTP/HTTPS URL; ports 80/443 and public IPv4 resolution only. Use url or urls, not both."
          },
          "urls": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "format": "uri",
              "maxLength": 2048
            },
            "description": "Batch of up to 10 public URLs. 2-10 URLs are priced $0.003 each on Base ($0.006 Algorand). Charged in full if at least one URL succeeds; per-URL errors are returned inline."
          },
          "format": {
            "type": "string",
            "enum": [
              "text",
              "markdown"
            ],
            "default": "text",
            "description": "markdown adds markdown + markdown_sha256 (text is still returned)"
          },
          "selector": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional CSS selector (e.g. \"main\", \"#pricing\", \"article .changelog\"). Only the first matching element is extracted; no match returns 422 SELECTOR_NOT_FOUND and nothing is settled. HTML only."
          },
          "render": {
            "type": "boolean",
            "default": false,
            "description": "Execute JavaScript in headless Chromium before extraction. $0.01 per URL on Base ($0.02 Algorand). Images, media and fonts are not loaded."
          },
          "max_chars": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 60000,
            "default": 20000,
            "description": "Maximum returned characters per URL (applies to text and markdown separately)"
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "description": "Single URL: one result. Batch (urls[]): results[] in the same order, each a result or an inline error.",
        "properties": {
          "ok": {
            "const": true
          },
          "version": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "final_url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string",
            "format": "date-time"
          },
          "source_status": {
            "type": "integer"
          },
          "content_type": {
            "type": "string"
          },
          "source_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "text_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "characters": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          },
          "headings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "level": {
                  "type": "integer"
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "format": {
            "enum": [
              "markdown"
            ]
          },
          "markdown": {
            "type": "string"
          },
          "markdown_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "selector": {
            "type": "string"
          },
          "javascript_rendered": {
            "type": "boolean"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "content_is_untrusted": {
            "const": true
          },
          "request_id": {
            "type": "string"
          },
          "batch": {
            "const": true
          },
          "count": {
            "type": "integer"
          },
          "succeeded": {
            "type": "integer"
          },
          "failed": {
            "type": "integer"
          },
          "charged_urls": {
            "type": "integer"
          },
          "results": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": true
                    },
                    "version": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    },
                    "final_url": {
                      "type": "string"
                    },
                    "fetched_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_status": {
                      "type": "integer"
                    },
                    "content_type": {
                      "type": "string"
                    },
                    "source_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "language": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    },
                    "text_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "characters": {
                      "type": "integer"
                    },
                    "truncated": {
                      "type": "boolean"
                    },
                    "headings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "level": {
                            "type": "integer"
                          },
                          "text": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "text": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "format": {
                      "enum": [
                        "markdown"
                      ]
                    },
                    "markdown": {
                      "type": "string"
                    },
                    "markdown_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "selector": {
                      "type": "string"
                    },
                    "javascript_rendered": {
                      "type": "boolean"
                    },
                    "warnings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "content_is_untrusted": {
                      "const": true
                    },
                    "request_id": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": false
                    },
                    "url": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "examples": {
        "single": {
          "url": "https://example.com"
        },
        "markdown": {
          "url": "https://example.com",
          "format": "markdown"
        },
        "batch": {
          "urls": [
            "https://example.com",
            "https://www.iana.org/help/example-domains"
          ],
          "format": "markdown"
        },
        "render": {
          "url": "https://example.com",
          "render": true,
          "format": "markdown"
        },
        "selector": {
          "url": "https://www.iana.org/help/example-domains",
          "selector": "main"
        }
      },
      "price_usdc": {
        "base": {
          "single": "0.005",
          "batch_per_url": "0.003",
          "render_per_url": "0.01"
        },
        "algorand": {
          "single": "0.01",
          "batch_per_url": "0.006",
          "render_per_url": "0.02"
        }
      }
    },
    {
      "id": "web.changes",
      "name": "Website change monitoring",
      "aliases": [
        "website_change_monitoring",
        "webpage_change_detection",
        "monitor_url"
      ],
      "description": "Website change monitoring: detect webpage changes. Website change monitoring / webpage change detection \u2014 text_sha256 or previous_text diff for documentation, pricing-page, changelog and policy monitoring. Batch up to 10 URLs in one call (items[]); optional CSS selector scoping and a one-line diff summary. $0.005 per URL Base ($0.01 Algorand); batch of 2-10 $0.003/URL ($0.006). Caller stores baseline; no server watch list. HTML/text only; no JS render. Failed checks not settled.",
      "method": "POST",
      "url": "https://api.agentwork.run/v1/web/changes",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "anyOf": [
          {
            "required": [
              "url"
            ]
          },
          {
            "required": [
              "items"
            ]
          }
        ],
        "description": "Single URL: url + previous_sha256 or previous_text (omit both for the first snapshot). Batch: items[] of 1-10 {url, previous_sha256|previous_text}; 2-10 items are $0.003 each on Base ($0.006 Algorand). Keep max_chars and selector identical between runs.",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "Public HTTP/HTTPS URL; ports 80/443 and public IPv4 resolution only. Use url or items, not both."
          },
          "max_chars": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 60000,
            "default": 20000,
            "description": "Maximum returned characters; keep identical between comparisons"
          },
          "previous_text": {
            "type": "string",
            "maxLength": 60000,
            "description": "Exact text from the prior read, for line additions/removals"
          },
          "previous_sha256": {
            "type": "string",
            "pattern": "^[a-fA-F0-9]{64}$",
            "description": "Prior text_sha256; provides a compact change check without line diff"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "description": "Batch of up to 10 pages to check in one paid call. Each item is a URL string (first snapshot) or {url, previous_sha256} / {url, previous_text}. Charged for every item when at least one succeeds; per-item errors are returned inline. Request body limit 1 MiB.",
            "items": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 2048
                },
                {
                  "type": "object",
                  "required": [
                    "url"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "maxLength": 2048
                    },
                    "previous_text": {
                      "type": "string",
                      "maxLength": 60000,
                      "description": "Exact text from the prior read, for line additions/removals"
                    },
                    "previous_sha256": {
                      "type": "string",
                      "pattern": "^[a-fA-F0-9]{64}$",
                      "description": "Prior text_sha256; provides a compact change check without line diff"
                    }
                  }
                }
              ]
            }
          },
          "selector": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional CSS selector (e.g. \"main\", \"#pricing\", \"article .changelog\"). Only the first matching element is extracted; no match returns 422 SELECTOR_NOT_FOUND and nothing is settled. HTML only. Applied to every URL; comparison then covers only that element."
          },
          "diff_summary": {
            "type": "boolean",
            "default": false,
            "description": "Add comparison.summary: one deterministic sentence such as \"Changed: 2 line(s) added, 1 removed. Added: ...\"."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "description": "Single URL: one result with comparison. Batch (items[]): results[] in the same order, each a result with comparison or an inline error.",
        "properties": {
          "ok": {
            "const": true
          },
          "version": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "final_url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string",
            "format": "date-time"
          },
          "source_status": {
            "type": "integer"
          },
          "content_type": {
            "type": "string"
          },
          "source_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "text_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "characters": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          },
          "headings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "level": {
                  "type": "integer"
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "format": {
            "enum": [
              "markdown"
            ]
          },
          "markdown": {
            "type": "string"
          },
          "markdown_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "selector": {
            "type": "string"
          },
          "javascript_rendered": {
            "type": "boolean"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "content_is_untrusted": {
            "const": true
          },
          "request_id": {
            "type": "string"
          },
          "comparison": {
            "type": "object",
            "description": "changed is null on the first snapshot (no baseline), else true/false",
            "properties": {
              "changed": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "previous_sha256": {
                "type": "string",
                "pattern": "^[a-f0-9]{64}$"
              },
              "current_sha256": {
                "type": "string",
                "pattern": "^[a-f0-9]{64}$"
              },
              "added": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "removed": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "added_lines": {
                "type": "integer"
              },
              "removed_lines": {
                "type": "integer"
              },
              "summary": {
                "type": "string"
              },
              "selector": {
                "type": "string"
              }
            }
          },
          "batch": {
            "const": true
          },
          "count": {
            "type": "integer"
          },
          "succeeded": {
            "type": "integer"
          },
          "failed": {
            "type": "integer"
          },
          "charged_urls": {
            "type": "integer"
          },
          "results": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": true
                    },
                    "version": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    },
                    "final_url": {
                      "type": "string"
                    },
                    "fetched_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_status": {
                      "type": "integer"
                    },
                    "content_type": {
                      "type": "string"
                    },
                    "source_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "language": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    },
                    "text_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "characters": {
                      "type": "integer"
                    },
                    "truncated": {
                      "type": "boolean"
                    },
                    "headings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "level": {
                            "type": "integer"
                          },
                          "text": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "text": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "format": {
                      "enum": [
                        "markdown"
                      ]
                    },
                    "markdown": {
                      "type": "string"
                    },
                    "markdown_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "selector": {
                      "type": "string"
                    },
                    "javascript_rendered": {
                      "type": "boolean"
                    },
                    "warnings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "content_is_untrusted": {
                      "const": true
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "comparison": {
                      "type": "object",
                      "description": "changed is null on the first snapshot (no baseline), else true/false",
                      "properties": {
                        "changed": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        },
                        "previous_sha256": {
                          "type": "string",
                          "pattern": "^[a-f0-9]{64}$"
                        },
                        "current_sha256": {
                          "type": "string",
                          "pattern": "^[a-f0-9]{64}$"
                        },
                        "added": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "removed": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "added_lines": {
                          "type": "integer"
                        },
                        "removed_lines": {
                          "type": "integer"
                        },
                        "summary": {
                          "type": "string"
                        },
                        "selector": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "description": "text is omitted when comparison.changed is false"
                },
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": false
                    },
                    "url": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "examples": {
        "first_snapshot": {
          "url": "https://example.com"
        },
        "hash_check": {
          "url": "https://example.com",
          "previous_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
        },
        "line_diff": {
          "url": "https://example.com",
          "previous_text": "Example Domain\nOld text.",
          "diff_summary": true
        },
        "batch": {
          "items": [
            {
              "url": "https://example.com",
              "previous_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
            },
            "https://www.iana.org/help/example-domains"
          ],
          "diff_summary": true
        },
        "selector": {
          "url": "https://www.iana.org/help/example-domains",
          "previous_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
          "selector": "main"
        }
      },
      "price_usdc": {
        "base": {
          "single": "0.005",
          "batch_per_url": "0.003"
        },
        "algorand": {
          "single": "0.01",
          "batch_per_url": "0.006"
        }
      }
    },
    {
      "id": "pdf.read",
      "name": "PDF text extraction",
      "aliases": [
        "pdf_text_extraction",
        "extract_text_from_pdf",
        "pdf_to_text"
      ],
      "description": "PDF text extraction: extract text from a PDF URL. PDF text extraction / PDF to text \u2014 extract text from a public digital PDF into page-numbered JSON for RAG (no OCR). $0.01 USDC Base or Algorand. Caps 20 pages / 5 MiB / 100k chars; source + text SHA-256. No passwords or table reconstruction. Failed extractions not settled.",
      "method": "POST",
      "url": "https://api.agentwork.run/v1/pdf/read",
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "Public HTTP/HTTPS URL to a digital PDF; no credentials or private addresses."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "const": true
          },
          "url": {
            "type": "string"
          },
          "page_count": {
            "type": "integer"
          },
          "pages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "page": {
                  "type": "integer"
                },
                "text": {
                  "type": "string"
                },
                "characters": {
                  "type": "integer"
                }
              }
            }
          },
          "text": {
            "type": "string"
          },
          "text_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "source_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "truncated": {
            "type": "boolean"
          },
          "empty_text_pages": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "ocr_performed": {
            "const": false
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "examples": {
        "single": {
          "url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
        }
      },
      "price_usdc": {
        "base": {
          "single": "0.01"
        },
        "algorand": {
          "single": "0.01"
        }
      }
    },
    {
      "id": "web.fetch",
      "name": "Fetch URL (compact)",
      "aliases": [
        "fetch_url",
        "url_fetch"
      ],
      "description": "Fetch URL: compact page text and final URL. Fetch URL \u2014 compact fetch of a public webpage: final URL, HTTP status, content type, title, clean text and text_sha256 (no link or heading lists). Same engine and prices as web/read: $0.005 per URL Base ($0.01 Algorand); batch of 2-10 urls $0.003/URL; render=true $0.01/URL. robots.txt respected. Failed fetches not settled.",
      "method": "POST",
      "url": "https://api.agentwork.run/v1/web/fetch",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "anyOf": [
          {
            "required": [
              "url"
            ]
          },
          {
            "required": [
              "urls"
            ]
          }
        ],
        "description": "Send url (one page) or urls (batch of 2-10). Compact output: final_url, source_status, content_type, title, text, text_sha256. render=true loads the page in headless Chromium first.",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "Public HTTP/HTTPS URL; ports 80/443 and public IPv4 resolution only. Use url or urls, not both."
          },
          "urls": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "format": "uri",
              "maxLength": 2048
            },
            "description": "Batch of up to 10 public URLs. 2-10 URLs are priced $0.003 each on Base ($0.006 Algorand). Charged in full if at least one URL succeeds; per-URL errors are returned inline."
          },
          "format": {
            "type": "string",
            "enum": [
              "text",
              "markdown"
            ],
            "default": "text",
            "description": "markdown adds markdown + markdown_sha256 (text is still returned)"
          },
          "selector": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional CSS selector (e.g. \"main\", \"#pricing\", \"article .changelog\"). Only the first matching element is extracted; no match returns 422 SELECTOR_NOT_FOUND and nothing is settled. HTML only."
          },
          "render": {
            "type": "boolean",
            "default": false,
            "description": "Execute JavaScript in headless Chromium before extraction. $0.01 per URL on Base ($0.02 Algorand). Images, media and fonts are not loaded."
          },
          "max_chars": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 60000,
            "default": 20000,
            "description": "Maximum returned characters per URL (applies to text and markdown separately)"
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "description": "Single URL: one result. Batch (urls[]): results[] in the same order, each a result or an inline error.",
        "properties": {
          "ok": {
            "const": true
          },
          "version": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "final_url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string",
            "format": "date-time"
          },
          "source_status": {
            "type": "integer"
          },
          "content_type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "text_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "characters": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          },
          "format": {
            "enum": [
              "markdown"
            ]
          },
          "markdown": {
            "type": "string"
          },
          "markdown_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "selector": {
            "type": "string"
          },
          "javascript_rendered": {
            "type": "boolean"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "content_is_untrusted": {
            "const": true
          },
          "request_id": {
            "type": "string"
          },
          "batch": {
            "const": true
          },
          "count": {
            "type": "integer"
          },
          "succeeded": {
            "type": "integer"
          },
          "failed": {
            "type": "integer"
          },
          "charged_urls": {
            "type": "integer"
          },
          "results": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": true
                    },
                    "version": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    },
                    "final_url": {
                      "type": "string"
                    },
                    "fetched_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_status": {
                      "type": "integer"
                    },
                    "content_type": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    },
                    "text_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "characters": {
                      "type": "integer"
                    },
                    "truncated": {
                      "type": "boolean"
                    },
                    "format": {
                      "enum": [
                        "markdown"
                      ]
                    },
                    "markdown": {
                      "type": "string"
                    },
                    "markdown_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "selector": {
                      "type": "string"
                    },
                    "javascript_rendered": {
                      "type": "boolean"
                    },
                    "warnings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "content_is_untrusted": {
                      "const": true
                    },
                    "request_id": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": false
                    },
                    "url": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "examples": {
        "single": {
          "url": "https://example.com"
        },
        "batch": {
          "urls": [
            "https://example.com",
            "https://www.iana.org/help/example-domains"
          ]
        },
        "render": {
          "url": "https://example.com",
          "render": true
        }
      },
      "price_usdc": {
        "base": {
          "single": "0.005",
          "batch_per_url": "0.003",
          "render_per_url": "0.01"
        },
        "algorand": {
          "single": "0.01",
          "batch_per_url": "0.006",
          "render_per_url": "0.02"
        }
      }
    },
    {
      "id": "web.markdown",
      "name": "Scrape URL to markdown",
      "aliases": [
        "scrape_url_to_markdown",
        "url_to_markdown",
        "fetch_url_to_markdown"
      ],
      "description": "Webpage to Markdown: convert any URL to clean Markdown. Convert a webpage URL to clean, LLM-ready Markdown for RAG and agents. Scrape URL to markdown \u2014 public webpage to clean Markdown (headings, lists, links, tables, code) plus text and SHA-256, for RAG and LLM context. Same engine and prices as web/read with format=markdown by default: $0.005 per URL Base ($0.01 Algorand); batch of 2-10 urls $0.003/URL; render=true for JavaScript pages $0.01/URL. Failed reads not settled.",
      "method": "POST",
      "url": "https://api.agentwork.run/v1/web/markdown",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "anyOf": [
          {
            "required": [
              "url"
            ]
          },
          {
            "required": [
              "urls"
            ]
          }
        ],
        "description": "Send url (one page) or urls (batch of 2-10). Returns markdown + markdown_sha256 (text is also returned). render=true loads the page in headless Chromium first.",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "Public HTTP/HTTPS URL; ports 80/443 and public IPv4 resolution only. Use url or urls, not both."
          },
          "urls": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "format": "uri",
              "maxLength": 2048
            },
            "description": "Batch of up to 10 public URLs. 2-10 URLs are priced $0.003 each on Base ($0.006 Algorand). Charged in full if at least one URL succeeds; per-URL errors are returned inline."
          },
          "format": {
            "type": "string",
            "enum": [
              "text",
              "markdown"
            ],
            "default": "markdown",
            "description": "markdown adds markdown + markdown_sha256 (text is still returned)"
          },
          "selector": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional CSS selector (e.g. \"main\", \"#pricing\", \"article .changelog\"). Only the first matching element is extracted; no match returns 422 SELECTOR_NOT_FOUND and nothing is settled. HTML only."
          },
          "render": {
            "type": "boolean",
            "default": false,
            "description": "Execute JavaScript in headless Chromium before extraction. $0.01 per URL on Base ($0.02 Algorand). Images, media and fonts are not loaded."
          },
          "max_chars": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 60000,
            "default": 20000,
            "description": "Maximum returned characters per URL (applies to text and markdown separately)"
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "description": "Single URL: one result. Batch (urls[]): results[] in the same order, each a result or an inline error.",
        "properties": {
          "ok": {
            "const": true
          },
          "version": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "final_url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string",
            "format": "date-time"
          },
          "source_status": {
            "type": "integer"
          },
          "content_type": {
            "type": "string"
          },
          "source_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "text_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "characters": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          },
          "headings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "level": {
                  "type": "integer"
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "format": {
            "enum": [
              "markdown"
            ]
          },
          "markdown": {
            "type": "string"
          },
          "markdown_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "selector": {
            "type": "string"
          },
          "javascript_rendered": {
            "type": "boolean"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "content_is_untrusted": {
            "const": true
          },
          "request_id": {
            "type": "string"
          },
          "batch": {
            "const": true
          },
          "count": {
            "type": "integer"
          },
          "succeeded": {
            "type": "integer"
          },
          "failed": {
            "type": "integer"
          },
          "charged_urls": {
            "type": "integer"
          },
          "results": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": true
                    },
                    "version": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    },
                    "final_url": {
                      "type": "string"
                    },
                    "fetched_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_status": {
                      "type": "integer"
                    },
                    "content_type": {
                      "type": "string"
                    },
                    "source_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "language": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    },
                    "text_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "characters": {
                      "type": "integer"
                    },
                    "truncated": {
                      "type": "boolean"
                    },
                    "headings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "level": {
                            "type": "integer"
                          },
                          "text": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "text": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "format": {
                      "enum": [
                        "markdown"
                      ]
                    },
                    "markdown": {
                      "type": "string"
                    },
                    "markdown_sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "selector": {
                      "type": "string"
                    },
                    "javascript_rendered": {
                      "type": "boolean"
                    },
                    "warnings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "content_is_untrusted": {
                      "const": true
                    },
                    "request_id": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": false
                    },
                    "url": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "examples": {
        "single": {
          "url": "https://example.com"
        },
        "batch": {
          "urls": [
            "https://example.com",
            "https://www.iana.org/help/example-domains"
          ]
        },
        "render": {
          "url": "https://example.com",
          "render": true
        }
      },
      "price_usdc": {
        "base": {
          "single": "0.005",
          "batch_per_url": "0.003",
          "render_per_url": "0.01"
        },
        "algorand": {
          "single": "0.01",
          "batch_per_url": "0.006",
          "render_per_url": "0.02"
        }
      }
    }
  ],
  "limits": {
    "source_bytes": 1048576,
    "max_text_characters": 60000,
    "default_text_characters": 20000,
    "javascript_rendering": "web.read with render=true (headless Chromium, 15 s per page, 2 MiB rendered HTML)",
    "max_batch_urls": 10,
    "output_formats": [
      "text",
      "markdown"
    ],
    "pdf": {
      "endpoint": "/v1/pdf/read",
      "max_bytes": 5242880,
      "max_pages": 20,
      "max_text_characters": 100000,
      "ocr": false
    },
    "authentication": false
  },
  "privacy": "Page text, baselines and target URLs are processed in memory and not retained by this product. Payment receipts and coarse request outcomes (endpoint, outcome, user-agent family, referrer host, daily-rotating salted client hash; no IPs, URLs or bodies) are retained. Upstream and infrastructure providers may keep their own logs."
}