Send a URL. Get a screenshot. Raw or beautiful. One API call, no browser to manage, no Puppeteer configs to debug at 2am.
Your alternative is 200 lines of Puppeteer config, a headless Chrome instance, and a prayer. We're not monsters.
curl https://api.nightglass.xyz/api/v1/screenshot \ -H "Authorization: Bearer ng_live_abc123..." \ -d '{"url": "https://stripe.com", "format": "png", "width": 1280}' \ -o stripe.png
const res = await fetch('https://api.nightglass.xyz/api/v1/screenshot', { method: 'POST', headers: { 'Authorization': `Bearer ${NIGHTGLASS_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://stripe.com', format: 'png', width: 1280 }) }); const screenshot = await res.blob();
import requests resp = requests.post( "https://api.nightglass.xyz/api/v1/screenshot", headers={"Authorization": f"Bearer {NIGHTGLASS_KEY}"}, json={"url": "https://stripe.com", "format": "png", "width": 1280} ) with open("stripe.png", "wb") as f: f.write(resp.content)
// Same endpoint. One extra param. CleanShot-quality output. const res = await fetch('https://api.nightglass.xyz/api/v1/screenshot', { method: 'POST', headers: { 'Authorization': `Bearer ${NIGHTGLASS_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://stripe.com', style: 'mockup', // the magic background: 'gradient', // or any hex colour padding: 64, borderRadius: 12, shadow: true, frame: 'browser', // 'browser' | 'phone' | 'none' }) }); const beautiful = await res.blob();
curl -X POST https://api.nightglass.xyz/api/v1/screenshot \ -H "Authorization: Bearer ng_live_..." \ -H "Content-Type: application/json" \ -d '{"url": "https://stripe.com", "full_page": true, "format": "pdf"}' \ -o stripe.pdf
Built for developers who've been burned by screenshot APIs that promise the world, then deliver a 500 when you need them most.
Turn raw screenshots into presentation-ready images. Gradient backgrounds, browser chrome, rounded corners, drop shadows — CleanShot quality, delivered via API.
Send raw HTML instead of a URL. Perfect for email template previews, invoice rendering, dynamic OG images, and anything you generate on the fly.
Desktop, tablet, mobile. Set exact pixel dimensions and we render the page exactly as a real browser would — because we are one.
Warm browser pool, no cold starts. Most screenshots land under 1.5 seconds. Full-page scrolls take a little longer. Still faster than your CI pipeline.
Native MCP server, x402 protocol support, and an llms.txt your agents can read. Claude, GPT, and any MCP client can take screenshots without a human in the loop.
Pull the page title, description, OG tags, and favicon alongside your screenshot. One API call builds a complete link preview card.
Scroll the entire page and capture everything — including content below the fold and lazy-loaded images. Not just what fits in the window.
Get a print-ready PDF instead of a PNG. Same API call, one different parameter. Perfect for invoices, reports, and anything that needs to stay readable offline.
Capture any page as it appears on an iPhone, Galaxy, or iPad. Correct viewport, user agent, and pixel density — no guessing, no custom configs.
Some pages need a moment. Tell us to wait for network activity to settle, a specific element to appear, or just add a fixed delay — then we shoot.
GDPR popups, cookie notices, chat widgets, and ad overlays disappear before we capture. Clean screenshots, every time, without writing a single CSS rule.
Buy once, use whenever. No monthly minimums, no subscription, no use-it-or-lose-it. Your credits are there when you need them — even if that's six months from now.
AI agents can use nightglass without a human account, API key, or billing setup. The x402 protocol lets agents pay per screenshot with USDC on Base — autonomously, in the same request. No signup. No OAuth. No intervention.
// An agent pays for its own screenshots const res = await fetch('https://api.nightglass.xyz/api/v1/screenshot', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Payment': '<x402-usdc-payment-header>' }, body: JSON.stringify({ url: 'https://example.com' }) })
Buy credits once. Use them whenever. No monthly minimum, no subscription. Every tier includes all features.
50 free screenshots. No credit card. Takes 30 seconds. You were going to spend longer reading this paragraph.
Start free — no card needed