Server-side rendering service for client-side (React/SPA) apps. Renders pages via Puppeteer and returns fully-hydrated HTML or screenshots, enabling social crawlers and AI bots to read content they would otherwise miss.
Caching
Responses pass through three layers in order:
-
CDN — Vercel Edge CDN (
s-maxage=86400, stale-while-revalidate=604800) 2. KV — Upstash Redis, in-region, 24 h TTL 3. Blob — Vercel Blob, global, persistent. Fresh for 24 h; served stale with background re-render up to 7 days. Every response reports its cache state via two headers:
-
x-vb-cache: HIT | MISS— whether VibeBoost served it from cache or rendered fresh -x-vb-cache-age: <seconds>— how old the served cache entry is (0on a MISS) (X-Cacheadditionally reports which layer served it:KV-HIT,BLOB-HIT,BLOB-STALE, orMISS.)
Bypassing the cache
To force a fresh render (applies to /api/render and /api/screenshot):
-
?refresh=<value>(recommended). The value is arbitrary — VibeBoost only checks thatrefreshis present, so any value bypasses the KV + Blob caches. Use a value that changes on every request (a timestamp or random string) because it becomes part of the URL and must differ to also miss Vercel's edge cache; reuse the same value and the edge may replay its cached copy.refreshis excluded from the cache key, so the fresh result is stored under the normal key for later (non-refresh) requests. Examples:/api/screenshot?url=https://example.com&refresh=1725000000 # unix timestamp /api/render?url=https://example.com&refresh=b3f9c1 # random stringIn code:
`?refresh=${Date.now()}`or`?refresh=${crypto.randomUUID()}`. -
Cache-Control: no-cacherequest header — same function-level bypass, but Vercel's edge strips this header before it reaches the function, so on Vercel it only takes effect on an edge miss. Preferrefresh. -
Cache-Control: no-storerequest header — bypass and do not store the result (the response is also marked non-cacheable for the CDN).
Pro features
Some options require authentication with a personal API key. Send it as a Bearer token — Authorization: Bearer vibe_… — or, for <img> embeds where headers aren't possible, as an ?api_key=vibe_… query parameter. Create and manage keys at /account.
Pro-gated options:
| Endpoint | Option | Effect | |---|---|---| | /api/screenshot | 🔒 fullPage=true | Capture the full scrollable page | | /api/screenshot | 🔒 scrollTo=<text> | Scroll to matching text and frame it in the screenshot | | /api/screenshot, /api/render | 🔒 hideCookies=true | Auto-hide & dismiss cookie consent banners |
A request that uses one of these options without a valid key returns 401 Unauthorized.