Snapdok–url to pdf and screenshot API on real Chromium

dxsd1 pts0 comments

snapdok — URL to PDF & screenshot API

Turn any URL into a PDF or screenshot.<br>One API call.

snapdok renders pages with real Chromium through Playwright, so your React,<br>Vue and Tailwind templates come out looking exactly like they do in a browser.<br>No headless cluster to babysit. Free for 250 renders a month, then $12.

Get your API key<br>Read the docs

POST /v1/render

# Any URL in. A PDF out.<br>curl -X POST https://snapdok.io/v1/render \<br>-H "Authorization: Bearer ps_live_your_key" \<br>-H "Content-Type: application/json" \<br>-d '{"url":"https://example.com","format":"pdf"}' \<br>--output invoice.pdf

Binary comes straight back in the response body — PDF, PNG or JPEG. No polling, no callbacks, no job queue.

Why snapdok

A rendering service that behaves like a browser

If your invoice or report template is built with a modern framework, it only looks<br>right once JavaScript has run and the fonts have loaded. That is the job snapdok is built for.

🌐<br>Real Chromium, real JavaScript

Playwright drives an actual Chromium build. SPA hydration, web fonts, flexbox, grid,<br>CSS variables and @media print all behave the way they do on your machine.

📄<br>PDF, PNG and JPEG

One endpoint, one format field. A4 PDFs with backgrounds printed,<br>full-page screenshots, or retina captures at up to 3× device scale.

🎛️<br>Control over the capture

Viewport size, full_page, device_scale, a wait_until<br>strategy including networkidle, an extra delay, and your own timeout.

Repeat renders are free

Identical requests are served from a 24-hour cache with an X-Cache: HIT header<br>and are not counted against your quota.

📊<br>Usage you can actually see

Every response carries X-Quota-Used / X-Quota-Remaining, and<br>GET /v1/usage reports your plan, period and balance any time.

🔒<br>Boring, predictable billing

Stripe handles the card. Hit your allowance and you get a clean 402 with a<br>next step — never a surprise invoice for going over.

The whole API

Three endpoints. That is the entire surface.

You can read the docs in five minutes and be done. There is no SDK to install and<br>nothing to configure.

EndpointWhat it does

POST /v1/renderRender a URL to PDF, PNG or JPEG. Binary in the response body.<br>GET /v1/usagePlan, renders used, remaining allowance, period dates.<br>GET /healthService and browser health. No key required.

Full API reference, error codes and copy-paste examples →

Pricing

Start free. Pay when it earns its keep.

No seats, no sales calls, no annual lock-in. Every plan is a hard cap — you are<br>never billed for going over. Prices in USD, tax added at checkout where required.

Try it<br>Free

$0 / month

Enough to build the whole integration and ship it.

250 renders every 30 days

Resets 30 days after you sign up, then every 30 days

PDF, PNG and JPEG output

No credit card

Same rendering engine as paid plans

Upgrade later — your key keeps working

Get a free key

Most popular<br>Starter

$12 / month

For a live product with real invoice and report traffic.

3,000 renders per billing period

PDF, PNG and JPEG output

5 requests / second

Allowance resets on your renewal date

Cancel any time, from Stripe

Subscribe — $12/month

Scaling up<br>Growth

$59 / month

When document rendering sits in your core product loop.

12,000 renders per billing period

Everything in Starter

5 requests / second

Allowance resets on your renewal date

Cancel any time, from Stripe

Subscribe — $59/month

High volume<br>Scale

$199 / month

Batch runs, nightly statement jobs, whole-catalogue exports.

60,000 renders per billing period

Everything in Growth

5 requests / second

Allowance resets on your renewal date

Cancel any time, from Stripe

Subscribe — $199/month

How billing works

Monthly quota resets each billing cycle. Unused requests don't roll over.<br>Free keys reset every 30 days from signup; paid plans reset on your renewal date.

Cache hits are free. An identical request inside 24 hours comes back<br>X-Cache: HIT with X-Quota-Charged: 0 — it never touches your quota.

Failed renders are free. If we don't hand you a file, we don't count it.<br>Timeouts, unreachable URLs and bad requests all cost nothing.

Every plan is a hard cap. Run out and the API returns 402<br>with an upgrade link. Nothing is ever charged automatically on top of your plan.

Payment is handled by Stripe Checkout — card details never touch our servers.<br>Your API key is shown on the confirmation page the moment payment clears.

Get a free API key

250 renders a month, no card, no call. The key appears on this page — it is shown once.

Get my key

FAQ

Questions people actually ask

What rendering engine is behind it?<br>Playwright driving Chromium — the same engine family your users browse with. JavaScript<br>executes, modern CSS works, web fonts load.

My app is React / Vue / Next.js. Will it render?<br>Yes. Navigation waits for the wait_until strategy you choose. For heavy<br>client-side apps use "wait_until":"networkidle", and add<br>"delay":500 if you animate content in after load.

How do I get my API key?<br>Two ways,...

renders free month snapdok requests quota

Related Articles