The shortest working request.
Use the query-string endpoint when a URL, viewport, and image format are enough. Put the API key in the authorization header rather than the target URL or source code.
curl --fail-with-body \
-H "Authorization: Bearer $LATCHSHOT_API_KEY" \
'https://latchshot.fly.dev/v1/screenshot?url=https%3A%2F%2Fexample.com&width=1440&height=900&format=png' \
--output example.png
A successful response body is the image itself. The response headers report render time, navigation state, font behavior, scripts, quota remaining, and the monthly reset time.
The Free plan returns a key with 100 successful renders each UTC calendar month. No credit card or meeting is required.
Choose GET for simple captures. POST for control.
GET /v1/screenshot is convenient for image-only integrations. Use POST /v1/render when you need delay, readiness, scale, dark mode, reduced motion, or the same contract for screenshots and PDFs.
const response = await fetch('https://latchshot.fly.dev/v1/render', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.LATCHSHOT_API_KEY}`,
'content-type': 'application/json',
},
body: JSON.stringify({
url: 'https://example.com',
format: 'jpeg',
width: 1200,
height: 630,
delay: 250,
reducedMotion: true,
}),
});
if (!response.ok) throw new Error(await response.text());
Make the output repeatable.
A screenshot API removes the browser process from your application; it does not make every webpage deterministic. Start with a fixed viewport, reduced motion, and the shortest readiness signal the page actually needs.
| Control | Use it for | Bound |
|---|---|---|
width / height | Stable responsive breakpoint and crop | 320–2560 × 240–1440 |
waitUntil | DOM ready, full load, or quiet network | domcontentloaded by default |
delay | Short hydration or chart-settle window | 0–3000 ms |
reducedMotion | Animations that otherwise change frames | true by default |
timeout | Explicit operation deadline | 3000–30000 ms |
Record X-Latchshot-Navigation, X-Latchshot-Fonts, and X-Latchshot-Scripts with the artifact. They distinguish a clean capture from a bounded fallback without forcing you to parse logs.
For CI, the public Latchshot Screenshot Action wraps this contract, returns diagnostics as step outputs, and includes a complete artifact-upload workflow.
For directory, bookmark, or link-preview artwork, use the website thumbnail API guide to separate capture dimensions from delivery sizes and add storage, refresh, and fallback rules.
Know when this endpoint is the wrong fit.
Latchshot deliberately serves a narrower job than a remote browser. That keeps the request bounded and makes the failure boundary visible.
- Targets must be public HTTP or HTTPS pages on standard web ports.
- Private, loopback, link-local, special-use, and mixed public/private DNS answers are rejected.
- Cookies, login sessions, arbitrary page scripts, CAPTCHA solving, proxy rotation, and anti-bot bypass are not supported.
- Full-page captures are bounded; extremely tall pages should be split or redesigned as reports.
If the current workflow depends on browser sessions or private preview deployments, keep it in your own controlled browser environment. Use the screenshot API vs Playwright decision guide to split browser workflows from public-page artifacts, then see the migration checklist before switching providers.
Price the workflow by successful output.
Failed direct renders do not consume monthly quota, and automatic overages are disabled. Launch is $19 for 2,500 successful renders; Build is $49 for 12,000; Scale is $149 for 50,000.
The current supported-page benchmark is 197/200, with 2.42-second p50 and 7.68-second p95 end to end. That is engineering evidence, not an SLA. Read the method and boundaries before planning a production cutover.
Turn the same URL into a PDF.
Use the JSON endpoint to select A4, Letter, or Legal paper and portrait or landscape output.