POST
Web Screenshot
https://api.screenshotfreeapi.com/screenshots/web
Enqueue an asynchronous Playwright capture of any public URL. Returns a job ID immediately; the screenshot is ready within a few seconds.
Updated June 2026Available on all plans
Request body
| Parameter | Type | Description |
|---|---|---|
| urlrequired | string | The target URL to capture. Must be publicly reachable. Private IPs and localhost are blocked (SSRF protection). |
| description | string | Natural-language description of the element to capture, e.g. "the pricing table". Claude finds and crops to that element automatically. |
| element | string | CSS selector for the element to capture, e.g. .hero-section. Takes precedence over description if both are provided. |
| dimensions | object | Viewport size: { width: number, height: number }. Defaults to { width: 1280, height: 720 }. |
| fullPage | boolean | Capture the full scrollable page height. Defaults to false. Requires STARTER plan or above. |
| format | enum | Output format: png (default), jpeg, webp, or pdf. |
| blockAds | boolean | Block ad networks and trackers before capturing. Requires STARTER+. |
| acceptCookies | boolean | Automatically dismiss cookie consent banners. Requires STARTER+. |
| stealth | boolean | Enable stealth mode to reduce bot-detection. Requires BUSINESS+. |
| proxyLocation | enum | Route via a specific region: us-east, eu-west, ap-southeast. Requires BUSINESS+. |
| video | object | Record a scrolling video: { duration: number, fps: number }. Requires GROWTH+. Returns an .mp4 URL. |
| bypassCache | boolean | Force a fresh capture, ignoring any cached result. Default false. |
| storage | object | Custom S3 bucket config: { bucket, region, accessKeyId, secretAccessKey }. Requires BUSINESS+. |
| webhookUrl | string | URL to POST the job result to when complete. Must be HTTPS. |
Example request
Full example
1curl -X POST https://api.screenshotfreeapi.com/screenshots/web \
2 -H "Authorization: Bearer $SCREENSHOTFREEAPI_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "url": "https://stripe.com/pricing",
6 "description": "the pricing comparison table",
7 "dimensions": { "width": 1440, "height": 900 },
8 "format": "png",
9 "fullPage": false,
10 "blockAds": true,
11 "acceptCookies": true,
12 "webhookUrl": "https://your-app.com/webhook"
13 }'AI targeting
When description is provided, the processor captures a full-page screenshot, sends it to anthropic/claude-opus-4-5 via OpenRouter along with an element map, and Claude returns the best CSS selector. If confidence ≥ 0.6 the element is cropped; otherwise the full page is returned as fallback. The result's metadata includes aiSelectorUsed, aiConfidence, and rawAiSelector.
Response — 202 Accepted
202 Accepted
1{
2 "jobId": "job_web_7a91bcd3",
3 "status": "queued",
4 "statusUrl": "/jobs/job_web_7a91bcd3/status",
5 "estimatedSeconds": 8
6}Error codes
| Status | Code | When it occurs |
|---|---|---|
| 400 | VALIDATION_ERROR | Missing url, invalid format, or SSRF-blocked URL |
| 401 | INVALID_API_KEY | Missing or revoked API key |
| 402 | PAYMENT_REQUIRED | Subscription lapsed or payment failed |
| 429 | QUOTA_EXCEEDED | Monthly screenshot quota exhausted |
| 429 | RATE_LIMITED | Per-minute request limit exceeded |