Skip to main content
Every Screenshotly API request is authenticated with a workspace API key. Keys start with scr_, are created in the dashboard, and are stored only as hashes, so the plaintext value is shown once.

Get an API key

  1. Sign in to the Screenshotly dashboard with a verified email address.
  2. Open API keys.
  3. Choose the workspace the key belongs to and, optionally, give it a name such as production or ci.
  4. Click Generate New Key and copy the key immediately. You cannot view it again.
Keys created in the dashboard expire 30 days after creation. See Managing API keys for rotation and revocation.

Send the key

Use either header. Both are accepted on every endpoint.
Call the API from a server, worker, or CI job. Never ship a key in browser or mobile app code, where anyone can read it.

Authentication errors

Authentication runs before request validation. Error responses are JSON:
A 403 with "error": "Plan upgrade required" is different: the key is valid, but the workspace owner’s plan does not include a requested feature. The response names the feature and includes minimumPlan.

Rate limits

Two limits apply, and both belong to the workspace owner’s account, not to an individual key. Creating more keys does not increase either limit.
  • Capture allowance. Only successful captures count. Paid allowances reset at the start of each calendar month (UTC). An owner can set a lower hard stop in Account Controls; see Teams, usage, and retention.
  • Throughput. Requests are counted per one-minute window. Every capture request that passes validation counts toward this limit, whether or not the capture succeeds.

Response headers

Successful POST /api/screenshot responses include:
X-RateLimit-Limit and X-RateLimit-Remaining describe the capture allowance for the current period (after any hard stop), not per-minute throughput. X-Screenshot-Duration is in milliseconds and X-Screenshot-Size in bytes.

429 Too Many Requests

When either limit is reached, POST /api/screenshot and POST /api/jobs return 429 with a Retry-After header in seconds. POST /api/jobs/batch also returns 429 when the batch is larger than your remaining allowance, without a Retry-After header.
Wait at least Retry-After seconds before retrying. If message says the limit resets at a date, the capture allowance is used up: retrying will not help until that date or until the plan changes.

Next steps