Anonymous API (No Signup Required)
The fastest way to capture a screenshot. No authentication required—just pass a public URL and get back an image.
Simple GET Request
curl "https://snap.i2dev.com/v1/screenshot.png?url=https://example.com"Returns a PNG image directly. Perfect for embeds, <img /> tags, and quick testing.
Customizable Options
curl "https://snap.i2dev.com/v1/screenshot.png?url=https://example.com&width=1920&height=1080&format=jpeg"Available parameters:
url(required) — The page to screenshotwidth— Viewport width (default: 1280)height— Viewport height (default: 720)format—pngorjpeg(default: png)
Anonymous Limits
Anonymous requests are limited to 10 screenshots per day per IP, resetting at midnight UTC. For higher limits, priority rendering, and additional features, authenticate with an API key.
Authenticated API
For production use, CI/CD integration, and higher rate limits, use the authenticated API.
curl -X POST https://snap.i2dev.com/v1/screenshots \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"viewport": { "width": 1280, "height": 720 }
}'The response includes the screenshot URL and metadata:
{
"jobId": "...",
"request_id": "...",
"imageUrl": "https://snap.i2dev.com/_local/jobs/...png",
"contentType": "image/png",
"bytes": 12345,
"durationMs": 987
}Authentication
All authenticated API requests require an API key:
Authorization: Bearer YOUR_API_KEYYou can also use x-api-key if preferred:
x-api-key: YOUR_API_KEYError Codes
Snap returns structured error responses with consistent codes:
| Code | HTTP Status | Description |
|---|---|---|
| invalid_url | 400 | URL is malformed or uses an unsupported protocol |
| unsafe_url | 400 | URL resolves to a private/internal IP address |
| unauthorized | 401 | Missing or invalid API key |
| rate_limited | 429 | Too many requests. Check Retry-After header |
| navigation_timeout | 504 | Page failed to load within timeout |
All error responses include a request_id for debugging:
{
"error": {
"code": "unsafe_url",
"message": "URL resolves to a private IP address",
"request_id": "req_xyz789"
}
}