# Quickstart

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

## 1. Get an access key

[Create an account](https://shotkit.net/login) and verify your email address. Your access key is on the [API keys](https://shotkit.net/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.

```bash
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:

```text
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:

```bash
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:

```json
{
  "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](https://shotkit.net/docs/errors.md).

## Try it in the playground

The [playground](https://shotkit.net/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

- [Authentication](https://shotkit.net/docs/authentication.md): access keys, secret keys and signed URLs.
- [Responses](https://shotkit.net/docs/responses.md): return JSON with a file URL and metadata instead of the file.
- [Option reference](https://shotkit.net/docs/options.md): all 107 options.
