Menu

Quickstart

Get an access key and take your first screenshot in a couple of minutes.

1. Get an access key

Create an account and verify your email address. Your access key is on the API keys page. The free Hobby plan includes 100 screenshots a month, no card required.

Keys belong to your workspace: everyone in it shares the same keys, plan and quota.

2. Take a screenshot

Pass your key in the X-Access-Key header and the page in url. The response body is the image. Pick your language; every example on this site follows your choice.

curl -X POST "https://shotkit.net/api/take" \
  -H "X-Access-Key: YOUR_ACCESS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","format":"png"}' \
  --fail-with-body -o shot.png

Replace YOUR_ACCESS_KEY with your key. With no other options you get a 1280×1024 screenshot of the viewport after the page has loaded.

The same request works as a plain URL, with the key in the access_key parameter. You can open it in a browser:

https://shotkit.net/api/take?access_key=YOUR_ACCESS_KEY&url=https://example.com&format=png

3. Add options

Options change how the page is loaded and captured. This one captures the full page on a retina display, in dark mode, without the cookie banner:

curl -X POST "https://shotkit.net/api/take" \
  -H "X-Access-Key: YOUR_ACCESS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://github.com","format":"png","full_page":true,"device_scale_factor":2,"dark_mode":true,"block_cookie_banners":true}' \
  --fail-with-body -o shot.png

Every option has a default, so you only send what you want to change. Unknown options are rejected, so a typo fails loudly instead of being ignored.

4. Handle errors

Errors are JSON with an HTTP status of 400 or above:

{
  "is_successful": false,
  "error_code": "host_returned_error",
  "error_message": "The site returned HTTP 404. Set ignore_host_errors=true to capture anyway.",
  "returned_status_code": 404
}

Check the status before saving the body. The snippets above do. Failed renders don't count toward your monthly screenshots. All codes are listed in Errors.

Try it in the playground

The playground has every option as a form with a live preview, and generates the code for your request in 12 languages. Its URL holds your setup, so you can share it.

Next steps