dev-tools 4 min read

ShotOne – Screenshot API for Developers

Capture website screenshots via one API call. Supports PNG, JPEG, WebP, PDF, 18+ device presets, auto cookie removal, stealth mode, and Cloudflare R2 export.

By
Share: X in
ShotOne screenshot API product thumbnail

TL;DR

TL;DR: ShotOne is a screenshot API that captures any URL as PNG, JPEG, WebP, or PDF with a single HTTP call — no Playwright server to maintain.

What Is ShotOne?

ShotOne is a developer-focused screenshot API launched on Hacker News. The pitch is straightforward: stop managing Playwright infrastructure and just call an API. It handles browser scaling, cookie banner removal, device emulation, and retries automatically.

Key capabilities from the product page:

  • Formats: PNG, JPEG, WebP, PDF
  • Device presets: 18+ viewports including iPhone, Android, and desktop
  • Auto cookie/popup removal: Detects and hides cookie consent banners and chat widgets without extra config
  • Stealth mode: Avoids bot detection patterns
  • R2 integration: Screenshots can be exported directly to a Cloudflare R2 bucket
  • API + Dashboard: REST API plus a web UI for testing

Pricing:

  • Free: 200 screenshots per month, no credit card required
  • Starter: $9/month
  • Pro: $29/month

Setup Workflow

Step 1: Get an API Key

Sign up at shotone.io to receive your API key. The free tier includes 200 screenshots monthly.

Step 2: Make Your First Request

curl -X POST "https://api.shotone.io/screenshot" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}' \
  --output screenshot.png

Step 3: Capture with Options

curl -X POST "https://api.shotone.io/screenshot" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "format": "webp",
    "quality": 90,
    "fullPage": true
  }' \
  --output screenshot.webp

Step 4: Authenticated Screenshots

Pass custom cookies or headers to capture logged-in pages:

curl -X POST "https://api.shotone.io/screenshot" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/dashboard",
    "cookies": [{"name": "session", "value": "abc123"}]
  }' \
  --output dashboard.png

Comparison: ShotOne vs. DIY Playwright

Based on the product page comparison:

| Concern | DIY Playwright | ShotOne | |---|---|---| | Setup time | Hours | Seconds | | Infrastructure | Redis, queues, workers | Fully managed | | Scalability | Manual concurrency handling | Auto-scales | | Browser updates | Manual | Always up-to-date | | Cookie banners | Custom scripts per site | Automatic detection | | Device emulation | Manual viewport config | Multiple presets, one parameter | | Storage | Custom upload logic | Direct R2 integration |

Practical Evaluation Checklist

  • [ ] One API call returns screenshot
  • [ ] PNG, JPEG, WebP, PDF formats confirmed
  • [ ] Full-page capture option available
  • [ ] Device preset list covers iOS, Android, desktop
  • [ ] Cookie banner auto-removal works without config
  • [ ] R2 bucket integration for screenshot storage
  • [ ] Dashboard provides live API playground
  • [ ] Free tier usable without credit card
  • [ ] No commit to self-host infrastructure required

FAQ

Q: How is this different from running my own Playwright/Puppeteer server? A: ShotOne handles all the infrastructure — scaling, browser updates, retries, concurrency — so you make one API call and get a screenshot. You skip managing Playwright, Chrome, Redis queues, and error handling.

Q: What formats are supported? A: PNG, JPEG, WebP, and PDF. You can also capture full-page screenshots and choose from over 18 device presets including iPhone, Android, and desktop viewports.

Q: How does it handle cookie banners and popups? A: It automatically detects and hides cookie consent banners, chat widgets, and popups without extra configuration.

Q: Can I capture authenticated pages? A: Yes. You can pass custom headers, cookies, and inject JavaScript before capture — useful for dashboards and logged-in states.

Q: Where are screenshots stored? A: You can connect your own Cloudflare R2 bucket so screenshots go directly to your storage. You retain full ownership of the data. S3 and other integrations are on the roadmap.

Conclusion

ShotOne targets the “I need screenshots but don’t want to run Playwright at scale” problem. The free tier (200 shots/month) is generous enough for development and testing. If you are building any feature that requires website previews — link unfurling, archival, QA automation — this is a one-key setup that removes the ops burden entirely.

Source and Accuracy Notes