Screenshot API for C#

Capture screenshots and PDFs from C# and .NET using HttpClient. No package required.

There is no official .NET package. HttpClient with System.Net.Http.Json covers the API in a few lines.

Install

// nothing to install - HttpClient is part of .NET

Your first screenshot in C#

One POST, one JSON body, one URL back. The response is a CDN link to the finished image.

HttpClient

using System.Net.Http.Json;

using var client = new HttpClient
{
    Timeout = TimeSpan.FromSeconds(60)
};
client.DefaultRequestHeaders.Add("X-API-Key", "sk_live_YOUR_KEY");

var response = await client.PostAsJsonAsync(
    "https://api.getsnap.dev/v1/screenshot",
    new { url = "https://github.com", format = "png" });

response.EnsureSuccessStatusCode();

var result = await response.Content.ReadFromJsonAsync<ShotResult>();
Console.WriteLine(result!.Url);   // CDN URL to your screenshot

record ShotResult(string Url);

Full-page captures and other options

Every option is a field in the same JSON body. The common ones are full-page capture, popup and ad removal, viewport size, and lazy-load scrolling.

var response = await client.PostAsJsonAsync(
    "https://api.getsnap.dev/v1/screenshot",
    new
    {
        url             = "https://example.com",
        format          = "png",
        full_page       = true,
        remove_popups   = true,
        block_ads       = true,
        viewport_width  = 1280,
        viewport_height = 720,
    });

Saving the image to disk

By default you get a CDN URL. Ask for a binary response instead and you get the bytes directly, which saves a round-trip when you are storing the file yourself.

var response = await client.PostAsJsonAsync(
    "https://api.getsnap.dev/v1/screenshot",
    new
    {
        url           = "https://example.com",
        format        = "webp",
        quality       = 90,
        response_type = "binary",
    });

await using var file = File.Create("screenshot.webp");
await response.Content.CopyToAsync(file);

Handling errors

Every failure returns JSON with an error code and a human-readable message. These are the ones worth branching on:

StatuserrorWhat it means
400validation_errorA field is missing or out of range. The body names the field.
401unauthorizedMissing or unknown API key.
402quota_exceededMonthly capture limit reached.
429rate_limit_exceededToo many requests this minute. Back off and retry.
500capture_failedThe page could not be rendered - usually a timeout on a page that never settles.
var response = await client.PostAsJsonAsync(
    "https://api.getsnap.dev/v1/screenshot",
    new { url = "https://example.com" });

if (!response.IsSuccessStatusCode)
{
    // e.g. {"error":"rate_limit_exceeded","message":"..."}
    var problem = await response.Content.ReadAsStringAsync();
    throw new InvalidOperationException(
        $"{(int)response.StatusCode} {problem}");
}

Rate limits and quotas

PlanCaptures / monthRequests / minute
Free1005
Starter5,00030
Pro25,00060
Business100,000120

Exceeding the per-minute limit returns 429; exceeding the monthly quota returns 402. See pricing for the full breakdown.

Frequently asked questions

Is there an official C# SDK for taking screenshots?

No, and you do not need one. The API is a single JSON POST to one endpoint, so C#'s standard HTTP client is enough. Everything on this page uses it.

Do I need to run or manage a headless browser?

No. getSnap.dev runs Chromium server-side and returns a finished image, PDF or video. You never install Playwright or Puppeteer, and you never maintain a browser pool.

Is there a free tier?

Yes - 100 captures a month at 5 requests a minute, with no credit card required. Paid plans start at $9/month for 5,000 captures at 30 requests a minute.

How do I capture a page that requires login from C#?

Pass your own cookies or HTTP headers in the request body and the capture runs authenticated. Use a dedicated least-privilege account rather than your own session.

Next steps

Related reading

Start capturing from C#

100 screenshots a month on the free tier. No credit card required.

Get Free API Key