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

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

Anonymous Limits

Anonymous requests are rate-limited per IP. 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_KEY

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

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:

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