Getting Started

Snap makes screenshots instant. No signup, no API key, no credit card—just paste a URL and get an image.

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

bash
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

bash
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 screenshot
  • width — Viewport width (default: 1280)
  • height — Viewport height (default: 720)
  • format — png or jpeg (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.

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

json
{
  "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:

http
Authorization: Bearer YOUR_API_KEY

You can also use x-api-key if preferred:

http
x-api-key: YOUR_API_KEY

Error Codes

Snap returns structured error responses with consistent codes:

CodeHTTP StatusDescription
invalid_url400URL is malformed or uses an unsupported protocol
unsafe_url400URL resolves to a private/internal IP address
unauthorized401Missing or invalid API key
rate_limited429Too many requests. Check Retry-After header
navigation_timeout504Page failed to load within timeout

All error responses include a request_id for debugging:

json
{
  "error": {
    "code": "unsafe_url",
    "message": "URL resolves to a private IP address",
    "request_id": "req_xyz789"
  }
}