Service
shots
Screenshots of a public URL in real browser engines: Chrome, Edge, Firefox, WebKit (Safari), Brave, Opera and Vivaldi in their current and previous versions, plus mobile profiles (iPhone, iPad, Android). One job can combine browsers, versions, viewports and colour schemes.
POST/v1/shots/jobs[?wait=seconds]
POST/v1/shots/quote same body, free: lists every screenshot and the price
GET/v1/services/shots browsers and versions available right now, no key needed
Request
| Field | Type | Description |
|---|---|---|
url | string, required | http:// or https://, public host. It is probed before anything is charged. |
browsers | array, required | Browser ids from /v1/services/shots. Either a string ("firefox" = newest version) or {"id":"firefox","versions":["133","132"]}. |
viewports | array | For desktop browsers, at most 3: "1920x1080", a preset id (fhd, qhd, laptop, hd, tablet, phone) or {"w":1280,"h":800}. Width 320 to 3840, height 320 to 2400. Default 1920x1080. Mobile profiles use their device screen. |
schemes | array | "light", "dark" or both. Default ["light"]. |
options.fullPage | boolean | Capture the whole page instead of the viewport. |
options.retina | boolean | Device pixel ratio 2. |
options.hideCookieBanner | boolean | Try to hide common consent banners. |
options.delay | 0, 2 or 5 | Seconds to wait after load. |
The number of screenshots is browser versions x viewports x schemes (mobile profiles: versions x schemes), at most 200 per job.
curl -s "https://api.relayted.de/v1/shots/jobs" \
-H "Authorization: Bearer $RELAYTED_KEY" -H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"browsers": ["chrome", "firefox", {"id": "safari", "versions": ["18.2"]}],
"viewports": ["1920x1080", "phone"],
"schemes": ["light", "dark"],
"options": {"fullPage": true, "hideCookieBanner": true}
}'
# 3 browser versions x 2 viewports x 2 schemes = 12 screenshots
Price
The volume price applies inside one job. The quote lists the price of every single screenshot.
Response
{
"job": {
"id": "Kp9...", "service": "shots", "target": "example.com", "status": "processing",
"cost": 780, "refunded": 0, "charged": 780, "etaSeconds": 42, "zipName": "shots_example.com_2026-10-06.zip",
"results": [
{ "key": "example.com_chrome-131_1920x1080_light_full.png", "status": "done", "price": 65,
"browser": "Google Chrome", "browserId": "chrome", "version": "131.0.6778.86",
"width": 1920, "height": 1080, "scheme": "light",
"contentType": "image/png", "url": ".../results/example.com_chrome-131_1920x1080_light_full.png" },
{ "key": "example.com_firefox-133_390x844_dark_full.png", "status": "pending", "price": 65, ... }
]
},
"balance": 49220
}
GET/v1/jobs/<id>/results/<key> the PNG
GET/v1/jobs/<id>/results/<key>?thumb=1 a small WebP thumbnail, free
GET/v1/jobs/<id>/zip all finished screenshots, once the job is completed
URL-encode the key when you build the address yourself; the url field already is.
Error codes of this service
| Code | When |
|---|---|
unknown_browser, unknown_version, no_browser | The id or version is not in the current catalogue, or browsers is empty. |
bad_viewport, no_viewport, too_many_viewports | Viewport outside the limits, missing for a desktop browser, or more than 3. |
no_scheme, bad_selection, too_many_shots | No valid scheme, nothing to capture, or more than 200 screenshots. |
bad_url, blocked_address, unreachable | The URL is invalid, private, or the site did not answer the probe. |
service_unavailable, busy | The screenshot machine is offline or its queue is full (503). |
A screenshot that fails (results[].status = "failed", with a short reason in error) is refunded. The ZIP contains the finished ones. | |
Notes
- Screenshots and the target URL are deleted 24 hours after the job was created.
- "Safari" is the WebKit engine, not macOS Safari. Older versions of Brave, Opera and Vivaldi are best effort; the catalogue only lists browsers that passed their self-test.
- Expect roughly 5 to 10 seconds per screenshot;
etaSecondsis an estimate including the queue. - The same service with a web interface: shots.relayted.de.