Text extraction is useful when your workflow needs words. It is not enough when layout, charts, rendered components, or the exact visual state of a page matters.
The Search1API Screenshot API turns a public web page into an image with one request. Capture the complete document, a configured viewport, or one visible element and receive PNG, JPEG, or WebP bytes directly.
Capture exactly what matters
Use full_page when you need the entire document, such as an archived page image or a long-form preview. Use a configured viewport when you need a consistent frame, or pass a visible CSS selector to capture one rendered component.
A selector capture cannot be combined with full_page.
Make your first request
The success response is image data rather than JSON, so save it to a file or pass the bytes to the next step in your application.
curl --request POST \
--url https://api.search1api.com/screenshot \
--header "Authorization: Bearer $SEARCH1API_KEY" \
--header "Content-Type: application/json" \
--data '{
"url": "https://www.search1api.com",
"format": "png",
"full_page": true,
"wait_until": "load",
"delay_ms": 1000,
"timeout_ms": 30000
}' \
--output "screenshot.png" For a single element, wait for the selector and return a compressed WebP image:
{
"url": "https://example.com",
"format": "webp",
"selector": "h1",
"wait_for_selector": "h1",
"quality": 85
} Use the official SDKs
The TypeScript and Python SDKs return the image bytes together with the response content type and request ID.
import { writeFile } from 'node:fs/promises';
import { Search1API } from '@search1api/client';
const client = new Search1API();
const screenshot = await client.screenshot('https://example.com', {
format: 'png',
fullPage: true,
});
await writeFile('screenshot.png', screenshot.data);
console.log(screenshot.contentType, screenshot.requestId); from pathlib import Path
from search1api import Search1API
client = Search1API()
screenshot = client.screenshot(
"https://example.com",
format="png",
full_page=True,
)
Path("screenshot.png").write_bytes(screenshot["data"])
print(screenshot["content_type"], screenshot.get("request_id")) The API reference also includes runnable examples for cURL, Go, Java, C#, and Rust.
Wait for the page state you need
Modern pages do not always finish rendering at the first load event. A request can wait for domcontentloaded, load, or networkidle, wait for a specific selector, and add a short stabilization delay.
You can also configure viewport dimensions and device scale, emulate a light or dark color scheme, disable or allow animations, and set the request timeout.
These controls make screenshots useful for page previews, archived visual snapshots, visual comparison inputs, rendered charts or components, and vision-model workflows.
Understand the limits
Each successful screenshot costs 2 credits. Failed requests are not charged. Bearer-authenticated requests billed to account credits have a dedicated Screenshot API limit of 10 requests per minute per account.
Targets must be public HTTP or HTTPS URLs without embedded credentials. Requests that fail URL safety or hostname-resolution checks are rejected. Private and special-use network addresses are not allowed.
The current response formats are PNG, JPEG, and WebP.
---
No comments yet