Paste a URL, get a clean thumbnail back. Cached forever, generated on demand, built for link previews and directories.
You're using the public test endpoint — limited to 3 captures per visitor (one per minute), then a 30 minute wait before the next one. Pick any size you like (default 300×200); the presets are just shortcuts. Real API keys get the same size freedom up to their plan's limit, plus much higher rate limits and all the options above.
Free to start. Upgrade for higher resolution and volume.
| Plan | Price | Max size | Requests/mo | Prepay promo | Support | |
|---|---|---|---|---|---|---|
| Free | $0/mo$0/yr | 300×200 | 100 | — | Community | Get free key |
| Starter | $5/mo$50/yr | 300×200 | 500 | 1,000 for 2× term | Email, 24h | Sign up |
| Basic | $9/mo$90/yr | 300×200 | 1,000 | 2,000 for 2× term | Email, 24h | Sign up |
| Standard | $14/mo$140/yr | 300×200 | 2,000 | 4,000 for 2× term | Email, 24h | Sign up |
| Pro | $19/mo$190/yr | 300×200 | 5,000 | 10,000 for 2× term | Email, 24h | Upgrade to Pro |
| Pro HD | $19/mo$190/yr | 800×600 | 100 | 200 for 2× term | Email, 24h | Sign up |
| Full HD | $79/mo$790/yr | 1920×1080 | 2,000 | 4,000 for 2× term | Priority | Sign up |
| 4K | $79/mo$790/yr | 3840×2160 | 1,000 | 2,000 for 2× term | Priority | Sign up |
| Enterprise | CustomCustom | Custom | Custom | Negotiable | Dedicated | Contact us |
Call the API with any website URL and your API key.
You immediately get a placeholder while we render in the background — no waiting.
A real browser loads the page, waits for it to settle, then captures it. Add &full=true to make it wait an extra 10 seconds after load — helpful for slow pages or ones that redirect client-side.
The result is cached — every future request for that URL is instant. Got a bad one? Add &refresh=true once to force a fresh capture.
Every option the API accepts — the same ones the demo above uses under the hood.
| Method | How |
|---|---|
| Header (preferred) | x-api-key: <your-key> |
| Query param | ?api_key=<your-key> |
| Endpoint | Auth | Returns |
|---|---|---|
| GET/screenshot | API key | JSON — { success, status, screenshot_url } (or a job_id + status_url if still processing) |
| GET/screenshot/status/:jobId | API key | JSON job status — queued / processing / done / failed |
| GET/image | API key | Raw image bytes. Serves a placeholder while generating or on failure, so it's always safe to drop straight into an <img src>. |
| POST/demo/session | none | JSON — { session_id }. Call once, then pass it as ?session= on /demo. |
| GET/demo | session id | JSON, same shape as /screenshot. This is what the demo above calls. |
| GET/demo/status/:jobId | none | JSON job status, same shape as /screenshot/status. |
| Param | Type | Default | Description |
|---|---|---|---|
| url | string | required | Target page to capture. The https:// prefix is optional — it's inferred automatically. Private/internal hosts (localhost, 10.x, 172.16–31.x, 192.168.x) are rejected. |
| width | number / auto | 300 | Output width in px, clamped to 50–your plan's max (300 default, up to 3840 on 4K; this demo allows any size). auto renders the page at its natural width. |
| height | number / auto | 200 | Output height in px, same clamp rules as width. auto renders the page at its natural height. |
| viewport | true / false | false | Capture at the actual requested size (real responsive layout) instead of a fixed desktop capture scaled down. Turned on automatically when width or height is auto. |
| full | true / false | false | Wait for the page to fully settle (network-idle, falling back to DOM-loaded) plus ~15s extra, before capturing. Slower, more reliable for JS-heavy or redirecting sites. This is the demo's "Wait for full page load" checkbox. |
| refresh | true / false | false | Force a fresh capture instead of serving the cache. Ignored if the same URL/size/mode was captured successfully in the last 10 minutes. |
| wait | true / false | false | Hold the request open until the capture finishes (up to 45s) instead of returning a job id to poll immediately. |
| quality | number (1–100) | 65 | Output quality as a percentage — 100 is largest/best, 1 is smallest/worst. Only affects JPEG; no-op when format=png. This is the demo's Quality slider. |
| format | jpeg / png | jpeg | png is lossless — sharper text/UI, bigger file — and ignores quality. This is the demo's PNG checkbox. |
| radius | number (0–500) | 0 | Rounds the output image's own outer corners, making the cut-away area transparent. Only has an effect with format=png — JPEG has no alpha channel, so it's ignored there. This rounds the image itself, not whatever's rendered on the page — it doesn't detect or preserve a page's own CSS corner rounding. This is the demo's Corner radius slider. |
| nostore | true / false | false | /image only, requires wait=true. One-time delivery: once the image bytes have been sent in this response, the copy is deleted from our server — nothing left to cache or re-serve. Use this if you're pulling the image into your own storage and don't want us keeping a copy. |
| api_key | string | — | Alternative to the x-api-key header. /screenshot and /image only. |
| session | uuid | required | /demo only — obtained from POST /demo/session. |
| Scope | Limit |
|---|---|
| Per IP address | 30 requests / 5 minutes |
| Per API key | 60 requests/minute (5/minute for test keys) |
| Demo session | 1 capture / minute, up to 3, then 30 min wait |
| Monthly quota | Per-key, default 1,000/mo (plan-dependent) |