v1.0 — Now in public beta

The internet,
but as a picture

Send a URL. Get a screenshot. Raw or beautiful. One API call, no browser to manage, no Puppeteer configs to debug at 2am.

Start free — no card needed See the API
INTEGRATION

Three lines.
That's it.

Your alternative is 200 lines of Puppeteer config, a headless Chrome instance, and a prayer. We're not monsters.

cURL
JavaScript
Python
Mockup mode
Full page + PDF
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
CAPABILITIES

Everything you need.
Nothing you don't.

Built for developers who've been burned by screenshot APIs that promise the world, then deliver a 500 when you need them most.

Mockup modenew

Turn raw screenshots into presentation-ready images. Gradient backgrounds, browser chrome, rounded corners, drop shadows — CleanShot quality, delivered via API.

HTML-to-screenshotnew

Send raw HTML instead of a URL. Perfect for email template previews, invoice rendering, dynamic OG images, and anything you generate on the fly.

Any URL, any viewport

Desktop, tablet, mobile. Set exact pixel dimensions and we render the page exactly as a real browser would — because we are one.

Sub-2s captures

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.

Built for AI agentsnew

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.

Metadata extractionnew

Pull the page title, description, OG tags, and favicon alongside your screenshot. One API call builds a complete link preview card.

Full-page capturenew

Scroll the entire page and capture everything — including content below the fold and lazy-loaded images. Not just what fits in the window.

PDF exportnew

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.

Mobile & device presetsnew

Capture any page as it appears on an iPhone, Galaxy, or iPad. Correct viewport, user agent, and pixel density — no guessing, no custom configs.

Wait for anythingnew

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.

Banner & ad blockingnew

GDPR popups, cookie notices, chat widgets, and ad overlays disappear before we capture. Clean screenshots, every time, without writing a single CSS rule.

Credits never expire

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.

AGENT PAYMENTS

The only screenshot API
that pays for itself.

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.

Protocol
x402
Network
Base
Signup required
None
// 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' })
})
Read the x402 docs Get an API key instead
PRICING

One price. No tiers.
No surprises.

Buy credits once. Use them whenever. No monthly minimum, no subscription. Every tier includes all features.

Free
50
$0
no card needed
Starter
500
$5
$0.010/shot
20% off
Growth
2,500
$20
$0.008/shot
50% off
Scale
10,000
$50
$0.005/shot
Best value
Enterprise
50,000
$200
$0.004/shot

Free tier

Screenshots included50
Credit card requiredNO
Credits expireNEVER
All features includedYES

Per-call pricing

Standard screenshot$0.005
Mockup mode$0.01
HTML-to-screenshot$0.005
Metadata extractionFREE

Agent payments

Protocolx402 / USDC
NetworkBase
Signup requiredNONE
API key neededNO

Ship screenshots,
not infrastructure.

50 free screenshots. No credit card. Takes 30 seconds. You were going to spend longer reading this paragraph.

Start free — no card needed