{"_self":{"principle":"Self-explaining payload — no external context required. This _self block describes what you are reading and where to look next.","widget":"article_topology","feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","contains":"claims, sources, anecdotes, question_graph slice","slug":"cloudflare-os-browser","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-browser/topology"},"how_to_use":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","write":null,"imessage":null,"router_tag":null,"proof_chain":[{"step":1,"claim":"Articles are voxel graphs of tiered claims, not prose blobs.","verify":"https://miscsubjects.com/api/articles/constitution"},{"step":2,"claim":"Claims link to hash-chained sources via source_ids.","verify":"https://miscsubjects.com/api/articles/cloudflare-os-browser/sources"},{"step":3,"claim":"Ask reads topology; ingest/claim append to ledger.","verify":"https://miscsubjects.com/api/protocol"},{"step":4,"claim":"Models queue growth: populate → collaborate → repair → reflex.","verify":"https://miscsubjects.com/api/protocol/grow"},{"step":5,"claim":"Graph proves its own shape (reflex) and $/claim (yield).","verify":"https://miscsubjects.com/graph.html?layer=reflex"},{"step":6,"claim":"Full feature index + _explain on every API response.","verify":"https://miscsubjects.com/api/articles/system-map"}],"related_features":[{"id":"ask","name":"Ask protocol","what":"Answer only from topology; creates question_node with gaps and ingest_hint.","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-browser/prompts","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"graph_topology","name":"Cross-article graph","what":"Merged claims/sources across condition+stack slugs for one question.","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-browser/graph-topology?question=..."}},{"id":"question_graph","name":"Question graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output).","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-browser/question-graph","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"voxels","name":"Voxel graph","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance.","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-browser/voxels","write":"https://miscsubjects.com/api/protocol/claim"}}],"system_map":"https://miscsubjects.com/api/articles/system-map","system_map_markdown":"https://miscsubjects.com/api/articles/system-map?format=markdown","not_medical_advice":true},"_explain":{"feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","why":"Every feature is auditable collective intelligence","how":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","model":null,"verifies":null,"urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-browser/topology"},"imessage":null,"router":null,"related":[{"id":"ask","what":"Answer only from topology; creates question_node with gaps and ingest_hint."},{"id":"graph_topology","what":"Merged claims/sources across condition+stack slugs for one question."},{"id":"question_graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output)."},{"id":"voxels","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance."}],"not_medical_advice":true},"slug":"cloudflare-os-browser","title":"Browser Rendering is an evidence adapter, not a better fetch()","register":"essay","tags":["cloudflare","cloudflare-os","browser-run","browser-rendering","puppeteer","web-scraping","evidence","receipts","security"],"updated_at":"2026-07-26T06:16:09.243Z","body_excerpt":"# Browser Rendering is an evidence adapter, not a better `fetch()`\n\nA plain HTTP client retrieves bytes. Cloudflare Browser Run can execute the page, wait for its state to settle, and return a representation chosen for the next operation: rendered HTML, Markdown, selected elements, links, a screenshot, a PDF, an accessibility tree, structured JSON, or an asynchronous crawl.\n\nThat distinction is the whole chapter. A browser belongs in this system only where the evidence depends on browser execution or a browser-specific representation. It should not become the default transport. Making it the default spends more time and money, enlarges the security boundary, and can still return a convincing but incomplete page.\n\nThe capability catalogue therefore does not contain one vague `BROWSER` tool. It contains explicit contracts: what representation is requested, what completion condition is required, what authority may leave the system, and what receipt must come back. The browser is the eyes. The canonical catalogue decides when those eyes may open and what counts as seeing.\n\n## Evidence status\n\n**Observed** marks first-party measurements or runtime receipts from the named environment.\n**Derived** marks arithmetic calculated from cited inputs. **Specified** marks vendor or standards\ndocumentation. **Implemented** and **deployed** name code and live-state evidence, respectively.\n**Reproduced** means the stated procedure was rerun. **Externally attested** marks operator reports;\nthose reports show that an experience occurred, not that it is universal.\n\n## The endpoint is a choice about evidence\n\nCloudflare exposes ten Quick Actions in the current documentation, including the beta crawl action. They overlap at the input—usually a URL—but not at the output. Choosing by convenience rather than by evidence type is how a screenshot gets mistaken for data, a Markdown conversion gets mistaken for the DOM, or a link inventory gets reconstructed expensively from a general browser session.\n\n| If the next operation needs | Quick Action | Returned evidence | Do not infer |\n| --- | --- | --- | --- |\n| Executed document markup | `/content` | rendered HTML | that every lazy region loaded |\n| Human-readable text and links | `/markdown` | converted Markdown | pixel layout or exact DOM fidelity |\n| Named fields from known selectors | `/scrape` | selector results | completeness outside those selectors |\n| Link discovery | `/links` | extracted links | that every destination is safe or relevant |\n| Visual state | `/screenshot` | raster image | semantic structure or hidden text |\n| Printable artifact | `/pdf` | PDF bytes | browser-screen layout |\n| Accessible semantic structure | `/accessibilityTree` | roles, names, states, children | that inaccessible controls do not exist |\n| Several representations together | `/snapshot` | two or more requested formats | that the formats agree automatically |\n| Schema-shaped extraction | `/json` | model-produced JSON | deterministic parsing or factual truth |\n| Multiple pages over time | `/crawl` | asynchronous crawl results | current unlimited throughput |\n\n`/snapshot` is especially useful for evidence work because one browser state can yield a visual surface and structural surfaces together. Cloudflare says the action defaults to HTML plus screenshot and can add Markdown and the accessibility tree. That is not just fewer requests. It reduces the chance that two captures were made from different page states. The receipt should still record each format separately and hash the bytes separately, because a screenshot and HTML prove different things.\n\nThe inverse rule matters too. If a stable endpoint already returns JSON, call it with ordinary HTTP. If static HTML contains the needed text, use ordinary HTTP. If all that is required is a status code or header, a browser weakens the measurement by adding navigation, rendering and conversion work that the question never asked for.\n\n## A browser can execute a page without provi","ranking":"safety-first (interaction_risk/limitations), then quote-gated effective_weight","claims":[{"id":"c8","text":"Browser sessions should be explicitly closed and observed because idle sessions consume time; one historical issue reported close hanging in local development while production worked.","tier":"anecdotal","section":"The bill is browser time, and sessions add a second meter","interaction_risk":false,"status":"active","source_ids":["p2","s10","s11"],"why_material":"Lifecycle defects can become denial-of-wallet defects.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c10","text":"Two operator comments describe using or observing Browser Rendering for scraping or Markdown distillation, but neither proves universal bypass, permission, scale or reliability.","tier":"anecdotal","section":"Cloud browser does not mean bypass","interaction_risk":false,"status":"active","source_ids":["p5","p7"],"why_material":"The use case is real while the conclusion remains deliberately narrow.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c11","text":"A crawl user reported root-relative image URLs being converted incorrectly in Markdown while the HTML remained correct.","tier":"anecdotal","section":"The output can be wrong even when the browser worked","interaction_risk":false,"status":"active","source_ids":["p4"],"why_material":"Representation integrity must be checked independently of transport success.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c15","text":"One operator reported building a zero-dependency CLI across the then-documented REST endpoint family.","tier":"anecdotal","section":"Crawl is a queue, not a big page request","interaction_risk":false,"status":"active","source_ids":["p6"],"why_material":"It externally attests coherent practical use of the REST surface for that builder.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c17","text":"One operator reported persistent 7003 and 7000 errors despite an account identifier and token they had verified.","tier":"anecdotal","section":"What the operator reports change—and what they do not","interaction_risk":false,"status":"active","source_ids":["p3"],"why_material":"Structured upstream error bodies and endpoint identity belong in failure receipts.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c1","text":"Browser Run can execute a page and return a browser-specific representation; it should be used only when that execution or representation is material.","tier":"system","section":"Browser Rendering is an evidence adapter, not a better fetch()","interaction_risk":false,"status":"active","source_ids":["s1","s2","s4"],"why_material":"It defines the narrow boundary between ordinary HTTP and browser execution.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c2","text":"The current Quick Actions surface exposes ten representation-oriented actions, including beta crawl.","tier":"fact","section":"The endpoint is a choice about evidence","interaction_risk":false,"status":"active","source_ids":["s1","s2","s3","s4","s5","s6","s7","s8"],"why_material":"A caller can request the exact evidence form instead of receiving a generic browser primitive.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c3","text":"Snapshot can capture two or more formats from one request, including content, screenshot, Markdown and the accessibility tree.","tier":"fact","section":"The endpoint is a choice about evidence","interaction_risk":false,"status":"active","source_ids":["s3"],"why_material":"Critical captures can preserve visual and structural evidence from the same browser state.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c4","text":"Default page-load completion can return empty or incomplete SPA results, so a browser capability needs a target-specific completion assertion.","tier":"system","section":"A browser can execute a page without proving the page is complete","interaction_risk":false,"status":"active","source_ids":["s4","s5"],"why_material":"HTTP success and browser execution do not prove application completion.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c5","text":"This build reproduced /markdown against example.com with status 200, 207.706 browser milliseconds and 1,418 ms client elapsed time.","tier":"measurement","section":"The first-party receipt: 208 browser milliseconds, not a speed claim","interaction_risk":false,"status":"active","source_ids":["r1","s2","s9"],"why_material":"It is a fresh bounded receipt, not a statement that the adapter would work.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c6","text":"Quick Actions are billed for browser time, while direct Browser Sessions add session-concurrency pricing.","tier":"fact","section":"The bill is browser time, and sessions add a second meter","interaction_risk":false,"status":"active","source_ids":["s9"],"why_material":"The two invocation families have different cost surfaces.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c7","text":"Workers Free includes ten browser minutes per day; Workers Paid includes ten hours per month and lists $0.09 for each additional browser hour.","tier":"fact","section":"The bill is browser time, and sessions add a second meter","interaction_risk":false,"status":"active","source_ids":["s10","s9"],"why_material":"Browser time must be metered at invocation and account levels.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c9","text":"Cloudflare says a custom User-Agent does not bypass bot protection and Browser Run requests remain identifiable as bots.","tier":"fact","section":"Cloud browser does not mean bypass","interaction_risk":false,"status":"active","source_ids":["s6"],"why_material":"Remote browser execution does not confer access or permission.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c12","text":"The JSON action uses model-assisted extraction, so its output is derived evidence even when it satisfies a schema.","tier":"system","section":"The output can be wrong even when the browser worked","interaction_risk":false,"status":"active","source_ids":["s7"],"why_material":"Schema validity cannot be promoted into source truth.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c13","text":"Crawl is asynchronous, may run for seven days and retains completed result data for fourteen days.","tier":"fact","section":"Crawl is a queue, not a big page request","interaction_risk":false,"status":"active","source_ids":["s8"],"why_material":"Create, status and result retrieval need distinct capability contracts.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c14","text":"The current Free crawl table lists five jobs per day and one hundred pages per crawl; an operator's broader throughput concern is not evidence of the present Paid limit.","tier":"system","section":"Crawl is a queue, not a big page request","interaction_risk":false,"status":"active","source_ids":["p1","s10"],"why_material":"It preserves the useful arithmetic without universalizing a historical reading.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c16","text":"Browser requests can carry cookies, custom headers and HTTP credentials, so the authority boundary includes redirects, subresources, credentials, scripts, duration, wallet and output.","tier":"system","section":"The authority boundary is larger than the URL","interaction_risk":false,"status":"active","source_ids":["s12","s8"],"why_material":"A host allowlist on the initial URL alone does not prevent SSRF, leakage or wallet abuse.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c18","text":"In this build, one canonical directory row supplies the capability contract, dispatch invocation and ledger lineage rather than creating a separate browser architecture.","tier":"implementation","section":"REST for bounded transforms; Puppeteer for interaction","interaction_risk":false,"status":"active","source_ids":["s13"],"why_material":"The browser family must preserve the one-catalogue-to-all-projections system claim.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false}],"sources":[{"id":"s1","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/","title":"Browser Run Quick Actions overview","quote":"Quick Actions are a set of REST API endpoints that provide common browser automation tasks.","summary":"Defines the bounded REST actions and their shared invocation model.","claim_ids":["c1","c2"],"hash":"725ff9e04ab41debdc28c599ca39a92fa85e263a72a8adc7dd97227f41ded669"},{"id":"s2","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/markdown-endpoint/","title":"/markdown — Extract Markdown from a webpage","quote":"The `/markdown` endpoint retrieves a webpage's content and converts it into Markdown format.","summary":"Defines the Markdown transform, REST and binding paths, authentication, and load controls.","claim_ids":["c1","c2","c5"],"hash":"f7dc86dfdfc41dd66259884e3c349a5fc20b2aa4d9c40fe9d367527d418ac989"},{"id":"s3","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/snapshot/","title":"/snapshot — Capture multiple page formats","quote":"The `/snapshot` endpoint combines multiple formats into a single request, so you do not need to call each endpoint separately.","summary":"Defines the multi-representation capture and its content, screenshot, Markdown and accessibility-tree formats.","claim_ids":["c2","c3"],"hash":"1129cd0e1a335038dce2960a43fd04f51c15f0b2b9eb1e02261c15698b40b89c"},{"id":"s4","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/content-endpoint/","title":"/content — Fetch rendered HTML","quote":"For JavaScript-heavy pages or Single Page Applications (SPAs), the default page load behavior may return empty or incomplete results.","summary":"Defines rendered HTML output and warns that default page completion can precede application completion.","claim_ids":["c1","c2","c4"],"hash":"cba55c6918973a38623571b4cfda5890e44a6beef7e98816edb3a1de92381b4c"},{"id":"s5","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/accessibility-tree-endpoint/","title":"/accessibilityTree — Capture the accessibility tree","quote":"For faster responses, advanced users can use `waitForSelector` to wait for a specific element instead of waiting for all network activity to stop.","summary":"Defines semantic roles, names and states and documents selector-based completion.","claim_ids":["c2","c4"],"hash":"11bb07e110eb5e28bbb7e4d3542ded72578e0e01bb7c3d9f1fbf6b4c9f2e4986"},{"id":"s6","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/scrape-endpoint/","title":"/scrape — Scrape HTML elements","quote":"The `userAgent` parameter does not bypass bot protection. Requests from Browser Run will always be identified as a bot.","summary":"Defines selector extraction and the explicit non-bypass boundary.","claim_ids":["c2","c9"],"hash":"d2691dc8bafa42e7397a8b2b29f12a8ef0f8a4bb6f4670af0e35219cdbe277bc"},{"id":"s7","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/json-endpoint/","title":"/json — Capture structured data using AI","quote":"In this example, Browser Run first calls Anthropic's Claude Sonnet 4 model.","summary":"Documents model-assisted schema extraction, model selection and fallback behavior.","claim_ids":["c12","c2"],"hash":"c65b363de36c579502b8a832564cf973d1a6597b824721c5eb334976131ba201"},{"id":"s8","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/crawl-endpoint/","title":"/crawl — Crawl web content","quote":"Crawl jobs have a maximum run time of seven days. If a job does not finish within this time, it will be cancelled due to timeout.","summary":"Defines asynchronous jobs, polling, seven-day runtime, fourteen-day result retention and browser parameters.","claim_ids":["c13","c16","c2"],"hash":"04bb639fec43fa8ffac73dece9d04ef9dd7bc315a43fb952c6b4caffe1b7a46b"},{"id":"s9","type":"specification","url":"https://developers.cloudflare.com/browser-run/pricing/","title":"Browser Run pricing","quote":"The `X-Browser-Ms-Used` header, which is returned in every Quick Actions response, reports browser time used for the request (in milliseconds).","summary":"Defines browser-hour and session-concurrency billing and the per-request usage header.","claim_ids":["c5","c6","c7"],"hash":"b2c69ef86d280bebec8939fa7870e1c7172efe5d3ee6c8937321cbd1987dc976"},{"id":"s10","type":"specification","url":"https://developers.cloudflare.com/browser-run/limits/","title":"Browser Run limits","quote":"Crawl jobs per day | 5 per day","summary":"Current Free and Paid browser-time, request, session and crawl limits.","claim_ids":["c14","c7","c8"],"hash":"09c2a46981a3e476b35cde1d261ead1604e2237bdd76cff643d3e9fdd271364f"},{"id":"s11","type":"specification","url":"https://developers.cloudflare.com/browser-run/puppeteer/","title":"Puppeteer on Browser Run","quote":"The `keep_alive` option sets the time in milliseconds to keep the browser open after the last activity.","summary":"Defines direct session control, binding use, session reuse and inactivity lifecycle.","claim_ids":["c8"],"hash":"b104215e61be7637f3530e951d33ab796375a003c99c7ce2e0ad8a3dbd499983"},{"id":"s12","type":"specification","url":"https://developers.cloudflare.com/browser-run/quick-actions/screenshot-endpoint/","title":"/screenshot — Capture a screenshot","quote":"Provide valid session cookies to access pages that require login:","summary":"Documents cookies, HTTP credentials, custom headers, viewport and load controls carried by a browser request.","claim_ids":["c16"],"hash":"1577cc754137b5a3d5c9498d06d17c22c0bcb9691da6dcb313c4dfe4bba21cce"},{"id":"s13","type":"repository","url":"https://github.com/massoumicyrus/miscsubjects-architecture","title":"miscsubjects architecture","quote":"Tooling as data. The capability catalogue is rows in SQL, not tool schemas in a prompt.","summary":"Public architecture repository for the canonical catalogue and its projected client surfaces.","claim_ids":["c18"],"hash":"a925dac44bf6852a4883ce56d4d0c37430aba78b02f2fa06119aced26e33c3b2"},{"id":"p1","type":"hn","url":"https://hn.algolia.com/api/v1/items/47332926","title":"Cloudflare crawl endpoint","quote":"[0] seems to suggest even paid plans are effectively limited to 500 web pages per day, right?","summary":"Reads the Browser Rendering limits page and works out that 5 crawl jobs/day × 100 pages/crawl caps paid plans at roughly 500 pages per day. Negative — the throughput ceiling for anyone hoping to scrape at volume.","claim_ids":["c14"],"hash":"0ceaa1753185bfc24ab01edd4b6523ea5bc0c85efebc18f467d7daa77fbc6566"},{"id":"p2","type":"github","url":"https://github.com/cloudflare/workers-sdk/issues/9945","title":"BUG: browser rendering browser.close() hangs","quote":"Like it says, `browser.close()` hangs in dev, in both vite and wrangler. It works fine in production, but this is a blocker for dev.","summary":"Minimal repro where browser.close() never returns under both vite and wrangler dev, though production is fine — filed by a Cloudflare engineer. Negative on Browser Rendering's local reliability.","claim_ids":["c8"],"hash":"18171a364782f28328220549bed5ca7ae08010d75a0f477ce19359277489b820"},{"id":"p3","type":"github","url":"https://github.com/cloudflare/workers-sdk/issues/10864","title":"Cloudflare Browser Rendering API (Code 7003/7000) Failure in Worker","quote":"Despite verified API token permissions and Account ID, the API consistently returns a 400 error.","summary":"A content-fetcher Worker calling the Browser Rendering REST endpoint gets consistent 400s with error codes 7003/7000 despite verified token permissions and account ID. Second filing of the same problem by the same user after an earlier issue. Negative.","claim_ids":["c17"],"hash":"ee7496ac46caa6ca8444345a7244c2162cb1ca1c675228e3fcdea342608d00e7"},{"id":"p4","type":"github","url":"https://github.com/cloudflare/workers-sdk/issues/13406","title":"Browser Rendering /crawl API: Markdown converter incorrectly resolves root-relative image URLs","quote":"The `/crawl` endpoint's HTML-to-markdown converter incorrectly resolves root-relative image paths (paths starting with `/`) as page-relative paths, producing broken image URLs in the markdown output.","summary":"Crawled real sites with /crawl and found every root-relative image URL silently mangled in the markdown output while the html output is correct. The same converter bug was re-filed months later by another user as #14488. Negative — output correctness, not just uptime.","claim_ids":["c11"],"hash":"6ef0088fc002300120fe35201aca2cba6f41dc685d70b20c58c28a97f43d8bff"},{"id":"p5","type":"hn","url":"https://hn.algolia.com/api/v1/items/44788890","title":"Perplexity is using stealth, undeclared crawlers to evade no-crawl directives","quote":"PS: perplexity is using cloudflare browser rendering to scrape websites","summary":"First-hand observation that Perplexity itself uses Cloudflare Browser Rendering for scraping — evidence the product is used at commercial scale for exactly the fetch-what-plain-HTTP-cannot-reach job. Neutral-positive.","claim_ids":["c10"],"hash":"acec405989ca4077ce5b79f08d8997e85f53714239ac3c8e6286d564dbbd764e"},{"id":"p6","type":"hn","url":"https://hn.algolia.com/api/v1/items/47348398","title":"Cloudflare crawl endpoint","quote":"I built a CLI wrapper for the Browser Rendering REST API — covers all 9 endpoints including /crawl. Two Bun scripts, zero dependencies","summary":"Built and published a zero-dependency CLI covering all nine Browser Rendering REST endpoints (render, screenshot, PDF, scrape, AI extraction, multi-page crawl). Positive — someone exercising the full API surface in practice.","claim_ids":["c15"],"hash":"96077df1855503ba78fd9049a5b3f0dc5e9fe1802376806150454e8f396530d3"},{"id":"p7","type":"hn","url":"https://hn.algolia.com/api/v1/items/47572417","title":"ChatGPT won't let you type until Cloudflare reads your React state","quote":"hence i am just using cloudflare remote browser rendering.","summary":"Moving to a 'no browser' model where content is distilled to markdown pulled from Cloudflare's browser rendering rather than fetched directly, precisely because bot-protection makes plain fetch unworkable. Positive on the use case, sour on why it is necessary.","claim_ids":["c10"],"hash":"1bd4eb78e77d33b30a9206c01e90e57f6626420177ad71635357bcaa65067442"},{"id":"r1","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/cloudflare-os-browser","title":"Fresh first-party Browser Run /markdown receipt","quote":"Status 200; X-Browser-Ms-Used 207.706 ms; client elapsed 1418 ms.","summary":"Authenticated production Browser Run request against example.com; credential omitted; returned Markdown contained the expected heading.","claim_ids":["c5"],"hash":"25b8ab523560bac4a08d7679c206a53179161d014df90ebaad22d133508e63e0"}],"anecdotal_sources":[],"scientific_sources":[],"user_reports":[],"related_articles":[],"question_graph":{"slug":"cloudflare-os-browser","questions":[],"evidence":[],"edges":[],"counts":{"questions":0,"evidence":0,"edges":0}},"honesty":{"active_claims":18,"retracted_claims":0,"cut_claims":0,"challenges":0,"scrub_events":0,"note":"Retracted/cut claims stay on ledger but are excluded from ask unless ?include_inactive=1"},"counts":{"claims":18,"claims_total":18,"sources":21,"anecdotal":0,"scientific":0,"user_reports":0,"questions":0,"evidence_ingests":0}}