Viewport
2 crOne screen, exactly as a visitor first sees it. Pick any width and height.
A viewport screenshot, a full-page capture, a print-style PDF, or the rendered page text — at any width you name, after the JavaScript has run. One call, one credit charge, a signed link back.
No subscription — pay in Ounie credits, from 2 credits a capture.
Four ways to see a page
Same call, same URL — the mode decides what lands in your hands.
One screen, exactly as a visitor first sees it. Pick any width and height.
The entire scroll height stitched into one tall image, header to footer.
The browser's own print render — real pages, selectable text, ready to attach.
The rendered DOM as clean text, after JavaScript has run. No pixels, just words.
Any viewport
Width and height are real inputs, honoured exactly — from 320 up to 3840, at one or two times the pixel density. Shoot the breakpoint you care about.
For developers & AI agents
Snapshot is the eye. Four rails reach it, all drawing the same wallet, all refusing rather than overdrawing.
One POST. Session cookie, snp_live_ Bearer, or ?api_key= when your host can't set headers.
capture_url, get_capture, list_captures, get_credit_balance, get_pricing, whoami — in Claude, Cursor or the Ounie AI Team.
No account at all. Pay per call in USDC on Base. We render before we settle, so a failed capture costs nothing.
Mint keys, watch spend, and re-open every capture you've taken. Reads are always free.
curl -X POST https://snapshot.ounie.com/api/captures \
-H "Authorization: Bearer snp_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"stripe.com","mode":"fullpage","width":1440}'
# → 201
# {
# "id": "3f9c…",
# "url": "https://…signed…", # valid 24h
# "width": 1440, "height": 7362,
# "bytes": 1841203,
# "credits_spent": 3
# }Pricing
A credit is one cent. That is the whole pricing page, but there’s a longer one if you want the math.
Credits are reserved before the render and settled only once bytes exist.
1 credit = 1¢, drawn from the one Ounie wallet every app shares.
Listing captures, re-opening a result and downloading never bill again.
An empty wallet gets a 402 with the exact shortfall — no capture runs.
prefers-color-scheme. What we do is set the signals modern sites actually key off — the .dark class, data-theme, and the usual localStorage keys — then let the site’s own theme code react. Sites that read only the media query come back light.Your first capture takes about as long as reading this sentence.