Ready-to-copy Java code for capturing website screenshots, generating PDFs, and processing pages at scale. Uses java.net.http.HttpClient (Java 11+).
The simplest way to capture a screenshot. Just a URL and your API key.
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.screenshotdev.com/v1/screenshot?url=https://example.com&access_key=YOUR_ACCESS_KEY"))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
Files.write(Path.of("screenshot.png"), response.body());Complete working script with options for viewport, format, full page capture, and error handling.
import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class Screenshot {
private static final String API_KEY = "YOUR_ACCESS_KEY";
private static final String BASE_URL = "https://api.screenshotdev.com/v1/screenshot";
private static final HttpClient client = HttpClient.newHttpClient();
public static byte[] takeScreenshot(
String url, String format, int width, boolean fullPage
) throws IOException, InterruptedException {
var query = String.join("&",
"url=" + URLEncoder.encode(url, StandardCharsets.UTF_8),
"access_key=" + API_KEY,
"format=" + format,
"width=" + width,
"full_page=" + fullPage
);
var request = HttpRequest.newBuilder()
.uri(URI.create(BASE_URL + "?" + query))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
if (response.statusCode() != 200) {
throw new IOException("Screenshot failed (" + response.statusCode() + "): "
+ new String(response.body()));
}
return response.body();
}
public static void main(String[] args) throws Exception {
byte[] img = takeScreenshot("https://example.com", "webp", 1440, true);
Files.write(Path.of("screenshot.webp"), img);
System.out.printf("Saved screenshot.webp (%d bytes)%n", img.length);
}
}PDF generation, batch processing, webhooks, CSS/JS injection, and S3 upload.
var query = String.join("&",
"url=" + URLEncoder.encode("https://example.com", StandardCharsets.UTF_8),
"access_key=YOUR_ACCESS_KEY",
"format=a4",
"landscape=false",
"margin=20px"
);
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.screenshotdev.com/v1/pdf?" + query))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
Files.write(Path.of("page.pdf"), response.body());var urls = List.of(
"https://example.com",
"https://github.com",
"https://news.ycombinator.com"
);
var futures = urls.stream().map(url -> CompletableFuture.supplyAsync(() -> {
try {
byte[] img = takeScreenshot(url, "webp", 1280, false);
var host = URI.create(url).getHost();
Files.write(Path.of(host + ".webp"), img);
return host + ".webp (" + img.length + " bytes)";
} catch (Exception e) {
return "Failed: " + url + " — " + e.getMessage();
}
})).toList();
futures.forEach(f -> System.out.println(" " + f.join()));var body = """
{
"url": "https://example.com",
"access_key": "YOUR_ACCESS_KEY",
"webhook_url": "https://your-app.com/api/webhooks/screenshot",
"format": "webp",
"full_page": true
}
""";
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.screenshotdev.com/v1/screenshot"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Job queued: " + response.body());var query = String.join("&",
"url=" + URLEncoder.encode("https://example.com", StandardCharsets.UTF_8),
"access_key=YOUR_ACCESS_KEY",
"inject_css=" + URLEncoder.encode(
"body { font-family: 'Inter', sans-serif; } .ad { display: none; }",
StandardCharsets.UTF_8),
"inject_js=" + URLEncoder.encode(
"document.querySelectorAll('[data-cookie-banner]').forEach(el => el.remove())",
StandardCharsets.UTF_8),
"block_ads=true"
);
var request = HttpRequest.newBuilder()
.uri(URI.create(BASE_URL + "?" + query))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
Files.write(Path.of("clean.webp"), response.body());import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
// 1. Capture
byte[] img = takeScreenshot("https://example.com", "webp", 1280, false);
// 2. Upload
var s3 = S3Client.create();
s3.putObject(
PutObjectRequest.builder()
.bucket("my-screenshots")
.key("captures/example-com.webp")
.contentType("image/webp")
.build(),
RequestBody.fromBytes(img)
);Test the API in the interactive playground — pre-filled with Java snippets.
Install the HTTP library used in the examples above.
# No dependencies — uses java.net.http from Java 11+Uses java.net.http.HttpClient (Java 11+). Any HTTP client that supports GET requests will work.
100 free API calls per month. No credit card. First screenshot in under 30 seconds.