Screenshot
POST/api/screenshot loads a URL in a real browser and returns a PNG of the rendered page, as a base64 data URL — either a fixed viewport or the full scrolling page. Metered by real browser time. This endpoint is live.
Request body
urlstringrequired
The absolute URL to capture.
fullPageboolean
Capture the full scrolling page instead of a single viewport. Defaults to
false.waitMsnumber
Extra settle time after the page loads, in milliseconds, before the shot is taken. Capped at 10000.
timeoutMsnumber
Navigation timeout in milliseconds. Capped at 60000.
Example request
curl -X POST https://synoppy.com/api/screenshot \
-H "Authorization: Bearer $SYNOPPY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com", "fullPage": true }'Response
{
"success": true,
"screenshot": "data:image/png;base64,iVBORw0KGgo...",
"sourceUrl": "https://example.com",
"statusCode": 200,
"fullPage": true,
"latencyMs": 2480,
"creditsUsed": 3,
"creditsRemaining": 4997
}Response fields
successboolean
True when the capture succeeded.
screenshotstring
The PNG image as a base64 data URL — drop it straight into an <img src> or decode and store it.
sourceUrlstring
The final URL after any redirects.
statusCodenumber
HTTP status of the captured page.
fullPageboolean
Whether the full scrolling page was captured (echoes your request).
latencyMsnumber
End-to-end time in milliseconds.
creditsUsednumber
Credits charged — metered by real browser time.
creditsRemainingnumber
Your credit balance after this call.
Requires a configured browser backend. If one isn't available the call returns 503 RENDER_UNAVAILABLE and is not billed.
In code
import { Synoppy } from "@synoppy/sdk";
const synoppy = new Synoppy({ apiKey: process.env.SYNOPPY_API_KEY });
const res = await synoppy.screenshot("https://example.com", { fullPage: true });
// res.screenshot is a data:image/png;base64 URL