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,...