AIIPWorld

Screenshot API

Send a public URL or your own HTML and get a PNG or JPEG back. Set the viewport, capture the entire page, clip a region, or render at a higher pixel density. It runs on headless Chromium.

What it does

Example: full page capture of an HTML page

Set AIIPWORLD_API_KEY to a key from your dashboard. The request below produced the example output further down.

curl -X POST https://api.aiipworld.com/v1/render \
  -H "Authorization: Bearer $AIIPWORLD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html":"<!doctype html><html><head><meta charset=\"utf-8\"><style>\nbody{margin:0;font-family:Helvetica,Arial,sans-serif;color:#1a1a1a}\nsection{height:560px;padding:40px;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center}\nh1{margin:0 0 12px;font-size:40px}p{font-size:20px;margin:0;max-width:560px;line-height:1.5}\n.a{background:#eef1ff}.b{background:#fff6e0}.c{background:#e6f7ee}\n</style></head><body>\n<section class=\"a\"><h1>Top of the page</h1><p>This sample page is about three screens tall. A normal screenshot would stop at the bottom of the first screen.</p></section>\n<section class=\"b\"><h1>Middle</h1><p>With full_page set to true (an API option) the capture continues down the page.</p></section>\n<section class=\"c\"><h1>Bottom</h1><p>The whole page is in one image.</p></section>\n</body></html>","output":"png","options":{"viewport":{"width":800,"height":600},"full_page":true}}'

# returns {"job_id": "...", "status": "queued"}; then poll:
curl https://api.aiipworld.com/v1/jobs/JOB_ID -H "Authorization: Bearer $AIIPWORLD_API_KEY"

Example: a 1200 x 630 image for link previews

curl -X POST https://api.aiipworld.com/v1/render \
  -H "Authorization: Bearer $AIIPWORLD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html":"<!doctype html>\n<html><head><meta charset=\"utf-8\">\n<style>\n  * { box-sizing: border-box; }\n  html, body { margin: 0; width: 1200px; height: 630px; }\n  body { font-family: Helvetica, Arial, \"Noto Sans\", \"Noto Sans CJK SC\", sans-serif; color: #ffffff;\n    background: linear-gradient(135deg, #1e2a78, #2f4bff); display: flex; flex-direction: column; justify-content: center;\n    padding: 80px 90px; position: relative; text-align: left; align-items: flex-start; overflow: hidden; }\n  .bar { width: 96px; height: 10px; background: #ffd166; border-radius: 5px; margin-bottom: 36px; }\n  h1 { margin: 0; font-size: 84px; line-height: 1.12; font-weight: 800; overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }\n  p { margin: 28px 0 0; font-size: 34px; line-height: 1.3; opacity: .88; overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }\n  .site { position: absolute; left: 90px; right: 90px; bottom: 52px; font-size: 28px; font-weight: 600; color: #ffd166; text-align: left; }\n</style></head><body>\n<div class=\"bar\"></div>\n<h1>How to ship a faster website</h1>\n<p>Five changes that cut load time without a rewrite</p>\n<div class=\"site\">example.com</div>\n</body></html>","output":"png","options":{"viewport":{"width":1200,"height":630}}}'

# returns {"job_id": "...", "status": "queued"}; then poll:
curl https://api.aiipworld.com/v1/jobs/JOB_ID -H "Authorization: Bearer $AIIPWORLD_API_KEY"

Example output

Full page capture of a three-section sample page
Result of the full_page request shown below (800 x 1680 px). Generated by this site's own engine. Open the file.

Options

Options go in the options object and are passed to the engine, which rejects unknown names.

OptionWhat it does
viewportWindow width and height, 100 to 4000 px each (1280 x 800 by default).
full_pageCapture the whole page. Limited to 16384 px of output height; a taller page is cut and the result says truncated. Costs more for tall pages, see Pricing below.
clipCapture a rectangle: x, y, width, height.
device_scale_factorPixel density from 1 to 3.
qualityJPEG quality (80 by default).
omit_backgroundTransparent background for PNG, where the page does not paint its own.
color_scheme, mediaPreferred colour scheme; the media type (screen by default).
wait_until, wait_for_selector, delay_msWhen to consider the page ready; an extra delay up to 10 seconds.
javascript, headers, user_agentTurn scripts off; up to 20 request headers; user agent.

Pricing

One credit pool covers every tool and the API. A screenshot costs 1 credit. A full page screenshot costs 2 credits for an image up to 5,000 px tall, plus 1 credit for each further 5,000 px (or part of), up to 16,384 px (5 credits at most). Height is counted in output pixels, so device_scale_factor 2 doubles it. The job is reserved at 2 credits and settled on the real image height. Results beyond 5 MB cost more. Failed jobs are refunded. Apart from the full page rule, credit costs are provisional until launch.

Free

$0

100 credits per month

Starter

$19 / month

2,750 credits per month

Pro

$59 / month

10,000 credits per month

Business

$149 / month

30,000 credits per month

Credit pack: $10 for 1,400 credits that do not expire. Rate limits and result retention depend on the plan: see pricing.

Questions

How do I take a full page screenshot?

Set full_page to true in options. Captures are limited to 16,384 px of output height; a taller page is cut there and the job result says truncated. A full page screenshot costs 2 credits for an image up to 5,000 px tall, plus 1 credit for each further 5,000 px (or part of), up to 16,384 px (5 credits at most). Height is counted in output pixels, so device_scale_factor 2 doubles it. The job is reserved at 2 credits and settled on the real image height.

Which formats can I get?

PNG and JPEG. WebP is not supported yet and the API returns an error if you ask for it. JPEG quality is an option (80 by default).

Can I use it to generate Open Graph images?

Yes. Send your own HTML at a 1200 x 630 viewport with output png. The OG image generator on this site does exactly that. Templates with JSON data are not available yet.

How much does a screenshot cost?

1 credit for a normal screenshot. A full page screenshot costs 2 credits for an image up to 5,000 px tall, plus 1 credit for each further 5,000 px (or part of), up to 16,384 px (5 credits at most). Height is counted in output pixels, so device_scale_factor 2 doubles it. The job is reserved at 2 credits and settled on the real image height. Results over 5 MB cost one more credit for each further 5 MB. Failed jobs are refunded. The 5 MB surcharge is provisional until launch.

Can I capture pages behind a login?

You can send custom request headers (up to 20) and a custom user agent. There is no cookie option. Only capture pages you are allowed to copy.

What stops it from reaching private servers?

Every request, including redirects and sub-resources, is checked and private, local and cloud metadata addresses are blocked.

Is there a free tier?

Yes. A free account includes 100 credits a month. The free web tools work without an account within per-visitor limits.

Related tools