{"uid":"cap_r18JLyHIlGgR2YuQ_jY1b","slug":"render-api-paulo-javascript-spa-headless-browser-renderer-75c0e7d3","name":"render-api-paulo: JavaScript SPA Headless Browser Renderer","description":"Render any JavaScript / single-page web app (React, Vue, Angular, Next.js) in a real headless browser and return clean, LLM-ready page text as Markdown. Built for AI agents and scrapers that must read client-side-rendered pages where a plain HTTP fetch returns an empty shell. Supports ?selector= to wait for an element and ?waitUntil= to control hydration.","url":"https://render-api-paulo.fly.dev/render","method":"GET","headers":{},"bodySchema":{"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":["url"],"properties":{"url":{"type":"string","description":"Absolute http(s) URL of the page to render and read"},"selector":{"type":"string","description":"Optional CSS selector to wait for before extracting — for slow/lazy SPAs"},"waitUntil":{"enum":["load","domcontentloaded","networkidle0","networkidle2"],"type":"string","description":"Optional page-load wait condition (default networkidle0)"}}}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","properties":{"text":{"type":"string","description":"Clean page text as Markdown"},"chars":{"type":"number"}}}}}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.01","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"down","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.01/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_mO3X4TCzq7YCib__qjWg8","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.01","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Renders a client-side JavaScript web page (React, Vue, Angular, Next.js, etc.) in a real headless browser and returns the fully-hydrated page content as clean Markdown text.","exampleAgentPrompt":"Can you fetch the fully-rendered content of https://example-spa.com/products as Markdown, waiting until the element '.product-list' appears before extracting?","exampleUseCases":null,"resultDescription":"Returns a JSON object with 'text' (the full page content rendered as clean, LLM-ready Markdown) and 'chars' (the total character count of the extracted text). The page is fully hydrated by a real headless browser before extraction, so dynamic content loaded by JavaScript is included.","failureModes":["Target URL is unreachable or returns a non-200 status — empty or error response returned","CSS selector specified in ?selector= never appears on the page — timeout or partial extraction","Page takes too long to hydrate and times out — empty or truncated Markdown returned","Invalid URL format provided — request rejected with a validation error","Page requires authentication or blocks headless browsers — returns login-wall or empty content"],"whenToPreferThis":"Choose this endpoint when you need to extract text content from a JavaScript-heavy or client-side-rendered web page (React, Vue, Angular, Next.js) where a plain HTTP GET returns an empty HTML shell. It is ideal for AI agents and scrapers that need LLM-ready Markdown from SPAs, especially when you need to wait for lazy-loaded elements using a CSS selector or control hydration timing with a waitUntil condition.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-15T16:28:25.340Z","isFirstParty":false}