---
title: "Create a scheduled capture"
method: POST
path: "/v1/schedules"
---

# Create a scheduled capture

`POST /v1/schedules`

## Request

- Base URL: `https://app.snap-render.com`
- URL: `https://app.snap-render.com/v1/schedules`
- Auth: API key in header `X-API-Key`

Capture a URL every hour, day or week. The first capture runs within a minute. Each capture counts as one render (failed renders are refunded), is stored as PNG with its SHA-256, and is compared with the previous capture. Subscribe to the capture.completed and change.detected webhook events to be notified. Every plan includes schedules: Free holds 1 (daily or weekly, kept 7 days), Starter 5 (14 days), Growth 25 (30 days), Business 100 (90 days), Scale 300 (180 days).

## Request body

- object
  - `url` string, uri, required: Page to capture. Public http or https URL.
  - `interval` 'hourly' | 'daily' | 'weekly', required
  - `name` string
  - `format` 'png': Captures are always PNG so they can be compared.
  - `width` integer
  - `height` integer
  - `full_page` boolean
  - `delay` integer
  - `dark_mode` boolean
  - `block_ads` boolean
  - `block_cookie_banners` boolean
  - `hide_selectors` string
  - `click_selector` string
  - `device` 'iphone_14' | 'iphone_15_pro' | 'pixel_7' | 'ipad_pro' | 'macbook_pro'
  - `user_agent` string
  - `change_threshold` number: Percent of the page that must change before change.detected fires.
  - `notify_email` boolean: Email the account owner when change.detected fires: verified addresses only, at most one email per schedule every 50 minutes and 50 per account a day.

## Response `201`

Schedule created

- Schedule
  - `id` string, uuid
  - `name` string, nullable
  - `url` string, uri
  - `interval` 'hourly' | 'daily' | 'weekly'
  - `format` 'png'
  - `options` object: Render options, same names as the batch endpoint.
  - `changeThreshold` number
  - `notifyEmail` boolean
  - `isActive` boolean
  - `pausedReason` 'user' | 'plan' | 'failures' | 'account' | 'null', nullable
  - `consecutiveFailures` integer
  - `lastError` string, nullable
  - `lastRunAt` string, date-time, nullable
  - `nextRunAt` string, date-time, nullable
  - `createdAt` string, date-time

## Other responses

- `400`: Invalid request, unknown device, interval not on this plan, or schedule limit reached
- `401`: Unauthorized
- `403`: Scheduled captures are not available on this account

---

[API](https://skmtc.dev/snap-render/apis/snaprender-screenshot-api.md) · [All operations](https://skmtc.dev/snap-render/apis/snaprender-screenshot-api/llms.txt) · [OpenAPI document](https://skmtc.dev/snap-render/apis/snaprender-screenshot-api/revisions/420ff88deeb2?raw)
