Capture any website with one screenshot API call
REST in, image URL out. Grabbit turns any URL into a full-page PNG, JPEG, or WebP, so you never have to run or scale headless Chrome yourself.
curl https://grabbit.live/api/v1/grabs \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com", "full_page": true, "format": "png" }'const res = await fetch("https://grabbit.live/api/v1/grabs", {
method: "POST",
headers: {
Authorization: "Bearer sk_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com", full_page: true }),
});
const { image_url } = await res.json();import requests
res = requests.post(
"https://grabbit.live/api/v1/grabs",
headers={"Authorization": "Bearer sk_live_..."},
json={"url": "https://example.com", "full_page": True},
)
image_url = res.json()["image_url"]The test environment is free and unmetered. You only spend a credit when you run a live capture.
From zero to screenshot in three steps
- 01
Get a key
Create a key in the console. Test keys are free and return a deterministic placeholder. Live keys run a real render.
- 02
Post a URL
Send a single POST to /api/v1/grabs with a url. Add full_page, a format, or a custom viewport if you want.
- 03
Use the image
The response returns a hosted image_url, plus bytes and execution_ms. Store it, embed it, or pipe it downstream.
{
"id": "grab_...",
"status": "done",
"target_url": "https://example.com",
"image_url": "https://grabbit.live/g/grab_....png",
"width": 1280,
"height": 3240,
"format": "png",
"bytes": 188231,
"execution_ms": 812,
"created_at": "2026-06-10T00:00:00Z"
}Everything you can control in one request
Full page or fixed viewport
Set full_page: true for the entire document, or pin a width (320 to 1920) and height (240 to 1080) for exact dimensions.
PNG, JPEG, or WebP
Choose format per request. WebP for small files, PNG for crisp UI captures.
Wait for content to load
delay_ms (up to 10 seconds) lets lazy-loaded images and JavaScript-rendered content settle before capture.
Clip to an element
Pass a CSS selector to capture just one component instead of the whole page.
Cookie banners handled
Common cookie-consent dialogs are dismissed automatically, so they stay out of your shots.
Safe and idempotent
Send an Idempotency-Key to make retries safe. Built-in SSRF protection blocks private and internal address ranges.
A real sandbox, not a credit trap
Most screenshot APIs make you burn paid quota just to test. Grabbit splits keys by environment. Test keys return a fast, deterministic placeholder for free, so you can build and run CI against the real request and response shape without spending a thing. Switch to a live key when you want real pixels. A live capture spends exactly one credit. Nothing else does.
First-class support for AI agents
Grabbit is built to be called by code and by agents. Bearer-token auth, a predictable JSON response, and a structured error envelope make failures easy to handle. Agent frameworks can onboard in one line through our hosted MCP server.
Flat annual pricing, zero monthly waste
One plan: $50 per year for 25,000 captures, which is $0.002 each. Need more? Prepaid credit packs stack on top and never reset. There is no monthly quota to forfeit and no usage cliff. You buy capture credits and you keep them until you use them.
Stated plainly: a couple of providers list a lower headline per-grab rate. Grabbit's edge is flat annual billing, credits that do not expire at the end of a month, and one-line agent onboarding.
Screenshot API FAQ
- Is there a free screenshot API?
- Yes. Every Grabbit account includes a free test key that returns a placeholder image, unmetered, so you can develop and test at no cost. Live captures start at $0.002 each on the $50 per year plan.
- How do I use the screenshot API in Python?
- Send a POST to /api/v1/grabs with your Bearer key and a JSON body containing the url. The Python example on this page returns a hosted image_url in a few lines using requests.
- How do I capture a screenshot in JavaScript or Node?
- Use fetch against /api/v1/grabs with your key in the Authorization header, as shown in the JavaScript example above. The response is JSON with the image_url.
- How do I capture a full-page screenshot?
- Set full_page: true in the request body. Grabbit captures the entire document height, not just the visible viewport. See our full-page screenshot guide for details.
- What image formats are supported?
- PNG, JPEG, and WebP. Set the format field per request.
- How do I screenshot a page that loads content with JavaScript?
- Add delay_ms (up to 10000) to wait for lazy-loaded and client-rendered content before the capture, and use a selector if you only need one element.
- What is the best screenshot API?
- The right one fits your billing and your stack. Grabbit is built for teams and agents that want flat annual pricing, no monthly quota waste, full-page capture, and one-line agent setup. Compare Grabbit against ScreenshotOne, Urlbox, ApiFlash, and others on our comparison.
- Can I capture screenshots asynchronously or in bulk?
- Yes. Send Prefer: respond-async (or ?async=true) and Grabbit queues the job, then fires a grab.succeeded or grab.failed webhook when it finishes.
Capturing whole pages? Read the full-page screenshot guide, or see screenshots as a service.
Start capturing in two minutes
Get a free test key, make your first call, and switch to live when you are ready.