Behavior changes to the hosted service at api.webextract.dev (REST and MCP). Newest first.
llms.txt that errors are not charged now say where they apply: REST calls, and MCP calls on the free tier or with a prepaid key. No API behavior changed.error code and message, and add two fields: category (one of dns_failed, private_address, invalid_url, robots_disallowed, target_blocked, target_http_error, not_html, too_large, timeout, tls_error, redirect_error, target_unreachable, extract_failed, busy) and, when the target site answered with an HTTP error, upstream_status. charged: false is still included. Example: {"error":"upstream_error","message":"target site returned HTTP 404; not charged","charged":false,"category":"target_http_error","upstream_status":404}.{"error","category","upstream_status"}. On the free tier or with a prepaid key, that block also includes "charged":false./v1/extract also no product and no tables) still return 200, but no longer use your free daily quota or prepaid credits. The response now includes warnings: ["empty_content"], a hint saying you can use the render endpoint instead, and charged: false. Applies to REST and MCP; both were checked on the live service./v1/extract tables now expand rowspan/colspan, so every row has the same number of cells and matches the Markdown output.js_rendered_suspectedjs_rendered_suspected; they now report no_product_markup. Genuinely empty app shells are still flagged.