NewIntroducing semantic snapshotsPair every capture with structured DOM data →

For teams that design for every screen

See a page at phone, tablet and desktop size in one request

One capture returns the page at phone, tablet and desktop size, ready to review side by side.

The problem

A layout that works at 1280 pixels breaks at 375, and the first person to see it is a customer on a phone. Checking every size by hand in the browser's device tools is slow enough that it stops happening.

How domscout handles it

Set captureMode: grid and one request returns three images: a phone at 375 by 812 and a tablet at 768 by 1024, both at double pixel density with a mobile user agent, and a desktop at 1280 by 800. The page loads once and is resized between shots, so a layout that only decides its size when the page first loads can look different from a fresh load at that size. Markdown, if you ask for it, comes from the desktop view.

Where it shows up

  • A review step that attaches all three sizes to a pull request preview.
  • A before-and-after record when a design system changes.
  • Spot checks of landing pages across screen sizes.

The request

POST /screenshot. Available on every plan. A grid capture costs 3 credits and the images come back as mobileBase64, tabletBase64 and desktopBase64. It takes longer than a single capture, and if the three images are too large to return inline, the response is a 202 with a job to poll.

cURL
curl -X POST https://api.domscout.io/screenshot \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "captureMode": "grid",
    "format": "webp"
  }'
Node.js
const response = await fetch("https://api.domscout.io/screenshot", {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" },
  body: JSON.stringify({ url: "https://example.com", captureMode: "grid", format: "webp" }),
});
console.log(await response.json());
Python
import requests

response = requests.post(
    "https://api.domscout.io/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "captureMode": "grid",
        "format": "webp"
    },
)
print(response.json())
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{
		"url": "https://example.com",
		"captureMode": "grid",
		"format": "webp",
	})
	req, _ := http.NewRequest("POST", "https://api.domscout.io/screenshot", bytes.NewReader(body))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	raw, _ := io.ReadAll(res.Body)
	fmt.Println(string(raw))
}
PHP
<?php
$ch = curl_init('https://api.domscout.io/screenshot');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'x-api-key: YOUR_API_KEY'],
    CURLOPT_POSTFIELDS => json_encode([
        'url' => 'https://example.com',
        'captureMode' => 'grid',
        'format' => 'webp'
    ]),
]);
$response = curl_exec($ch);
if ($response === false) {
    throw new RuntimeException(curl_error($ch));
}
echo $response;
Ruby
require "json"
require "net/http"

response = Net::HTTP.post(
  URI("https://api.domscout.io/screenshot"),
  { url: "https://example.com", captureMode: "grid", format: "webp" }.to_json,
  "Content-Type" => "application/json",
  "x-api-key" => "YOUR_API_KEY"
)
puts response.body
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Capture {
    public static void main(String[] args) throws Exception {
        String body = """
            {
                "url": "https://example.com",
                "captureMode": "grid",
                "format": "webp"
            }
            """;
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.domscout.io/screenshot"))
            .header("Content-Type", "application/json")
            .header("x-api-key", "YOUR_API_KEY")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
C#
using System.Net.Http.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var response = await client.PostAsJsonAsync("https://api.domscout.io/screenshot", new {
    url = "https://example.com",
    captureMode = "grid",
    format = "webp"
});
Console.WriteLine(await response.Content.ReadAsStringAsync());

Go further

Other use cases: Web access for AI agents · Website change monitoring · Web archiving and evidence · Crawling a whole site · SEO regression checks · Thumbnails and link previews · PDFs from your own HTML · Structured data from web pages · Link preview checks

Give your product a browser.

Get clean web content and visual proof into your workflow in minutes.