Website screenshot
Website screenshot is an API that takes a screenshot of any web page from its link. You pass the URL and get an image (PNG or JPEG) of how it looks. Good for website thumbnails, link previews or keeping a visual record of a page, with no servers to maintain.
How it works
This tool opens a public web page (the one in the link you give it) and returns an image (PNG or JPEG) of how it looks. The page is rendered with its JavaScript, like in a normal browser.
It's made to be used from no-code platforms like n8n, Make or Zapier, without coding. Great for website thumbnails, link previews or saving how a page looked. Nothing is stored: the screenshot is generated on the fly.
All you need
- Your API key (your “password” for the tool). Create it in your dashboard with “+ Create key”. It's shown only once, so copy and save it.
- In your automation platform, an “HTTP Request” step (n8n, Make, Zapier, Pipedream… all have one).
How to use it in n8n (step by step)
You send the website link and you get the image back directly, ready to use. In the HTTP Request node:
- Method:
POST - URL:
https://api.cofferdock.com/screenshot - Send Query Parameters: on, and add the size:
width=1280,height=800. (You can addfull_page,format… see the table.) - Send Headers: on → add two:
x-api-key= your key, andContent-Type=text/plain - Send Body: on → Body Content Type: Raw → paste the website link in Body (for example
https://cofferdock.com) - Under Options → Response → Response Format: choose File
The node's output is already the image as a file: connect it straight to Drive, email, Telegram… One node and done.
In Make (HTTP → Make a request module): same method and URL, in Query String add width and height, in Headers the two headers, Body type: Raw, Content type: text/plain, and paste the link into Request content. The response is already the image file.
In short: POST to …/screenshot, width and height as Query Parameters, the x-api-key and Content-Type: text/plain headers, the website link in Body as Raw, and Response Format as File.
Options (as Query Parameters)
Options you can add as Query Parameters (name/value fields in n8n/Make):
| Option | Default | What it does |
|---|---|---|
width | 1280 | Viewport width in pixels. |
height | 800 | Viewport height in pixels. |
full_page | false | Capture the full page (not just the visible part). Set it to true. |
format | png | Format: png or jpeg. |
wait_ms | 0 | Wait before the shot (max 5000) in case something loads late. |
Public websites only: only http/https links reachable from the internet are allowed. For security, internal or private addresses cannot be captured.
API overview
- Endpoint:
POST https://api.cofferdock.com/screenshot - Auth: header
x-api-key: YOUR_KEY. - Input: the URL goes in the body as
text/plain(raw) or asapplication/jsonin theurlfield. - Output: by default, with
text/plainit returns the image binary (image/pngorimage/jpeg); with JSON it returns base64. Addoutput=imageto force the binary. - Security: public http/https URLs only; internal/private IPs are blocked (anti-SSRF). The page's JavaScript DOES run, in an ephemeral, isolated context.
- Limits: 30 s timeout; 30 screenshots/min per IP. 1 screenshot = 1 credit.
Options
| Option | Default | Description |
|---|---|---|
width | 1280 | Viewport width in px (100–3840). |
height | 800 | Viewport height in px (100–2160). |
full_page | false | Capture the full page height. |
format | png | png or jpeg. |
quality | 90 | JPEG quality (1–100). Applies to jpeg only. |
wait_ms | 0 | Wait before capturing, in ms (max 5000). |
output | per mode | image (binary) or json (base64). |
Examples
curl (raw URL, saves the image to a file):
curl -X POST "https://api.cofferdock.com/screenshot?width=1280&height=800" \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: text/plain" \
--data "https://cofferdock.com" \
-o screenshot.png
JavaScript (Node 18+):
const r = await fetch('https://api.cofferdock.com/screenshot?width=1280&height=800', {
method: 'POST',
headers: { 'x-api-key': 'YOUR_KEY', 'Content-Type': 'text/plain' },
body: 'https://cofferdock.com',
});
const buffer = Buffer.from(await r.arrayBuffer());
require('fs').writeFileSync('screenshot.png', buffer);
Python:
import requests
r = requests.post(
'https://api.cofferdock.com/screenshot',
params={'width': 1280, 'height': 800},
headers={'x-api-key': 'YOUR_KEY', 'Content-Type': 'text/plain'},
data='https://cofferdock.com',
)
open('screenshot.png', 'wb').write(r.content)
JSON mode (base64 response)
With Content-Type: application/json, the URL goes in url and the options in the same object. The response carries the image in base64:
{ "url": "https://cofferdock.com", "width": 1280, "full_page": true }
→ { "success": true, "image": "iVBORw0KGgo…", "mime_type": "image/png",
"meta": { "used": 12, "remaining": 488, "size_bytes": 95421 } }
Add "output": "image" to the JSON to receive the binary instead of base64.
What you get back
The image itself (a PNG or JPEG file), ready to save, email or publish. Nothing to convert: the next step of your automation already receives the file. (In technical mode with JSON, the image comes in base64.)
If you get “busy” during a spike
At peak times, the API may reply “busy” (status 503) and ask you to wait a few seconds. It's rare and brief, but to let your automation handle it on its own, turn on retry on the request step:
- In n8n: on the HTTP Request node, Settings tab, turn on “Retry On Fail”. 2–3 attempts is plenty.
- In Make: add an error handler to the module (right-click → Add error handler) with the Break directive, which retries automatically.
Our response includes a Retry-After header telling how many seconds to wait. With retry on, your flow won't even notice.
Step-by-step guides
- How to take a full-page screenshot of a website (no software needed)
- How to take a screenshot of a website in n8n (with a single node)
- How to take a screenshot of a website in Make (HTTP module)
- How to take a screenshot of a website in Zapier (Webhooks)
- ApiFlash alternative: when Cofferdock makes sense (and when it doesn't)