Skip to content

Image Tools API — Free for Developers & AI Agents

Resize, compress, and convert images, or screenshot any URL, server-side. No signup, no API key, no image storage.

Built to be called unattended

The tools on this site run entirely in your browser — nothing is uploaded. This API is the exception: a small, free, server-side endpoint for cases where there is no browser in the loop at all, such as a backend job, an automation script, or an AI agent acting on behalf of a client. It requires no account or API key, doesn't store uploaded images (each request is processed and discarded), and behaves the same way every time for the same input.

Endpoints

POST/api/tools/resize

Resize an image to exact dimensions, or scale it proportionally.

FieldTypeNotes
image*fileThe image to resize.
widthintegerTarget width in px. At least one of width/height is required.
heightintegerTarget height in px.
formatjpeg | png | webpDefaults to the input image's format.
quality1-100Default 85. Ignored for png.

Supply both width and height for an exact (possibly distorted) size. Supply only one to auto-scale the other, preserving aspect ratio.

POST/api/tools/compress

Shrink an image's file size at its original dimensions.

FieldTypeNotes
image*fileThe image to compress.
formatjpeg | png | webpDefaults to the input image's format.
quality1-100Default 70. Ignored for png.
POST/api/tools/convert

Convert an image between PNG, JPEG, and WebP.

FieldTypeNotes
image*fileThe image to convert.
format*jpeg | png | webpTarget format.
quality1-100Default 90. Ignored for png.
GET/api/tools/screenshot

Screenshot a public webpage as a PNG image.

FieldTypeNotes
url*query stringThe public http/https URL to capture. Private/internal addresses are rejected.
widthintegerViewport width in px. Default 1280, max 3000.
heightintegerViewport height in px. Default 800, max 3000.
fullPagetrue | falseDefault true. Set false to capture only the viewport.

Query-string GET request, not a file upload — unlike the other endpoints, this one fetches external content server-side. Times out after 15s.

The resize/compress/convert endpoints are multipart/form-data POST requests; the screenshot endpoint is a plain GET with query parameters. All responses are the raw processed image with a matching Content-Type, plus rate-limit and (for the image endpoints) size/dimension headers. Errors come back as JSON: { "error": "..." }.

Example: curl

curl -X POST https://fullpagecapture.com/api/tools/resize \
  -F "image=@photo.png" \
  -F "width=800" \
  -F "format=webp" \
  -o resized.webp

Example: JavaScript / tool call

const form = new FormData();
form.append("image", fileBlob, "photo.png");
form.append("format", "webp");
form.append("quality", "80");

const res = await fetch("https://fullpagecapture.com/api/tools/convert", {
  method: "POST",
  body: form,
});

if (!res.ok) throw new Error((await res.json()).error);
const outputBlob = await res.blob();

Example: screenshot a URL

curl "https://fullpagecapture.com/api/tools/screenshot?url=https://example.com&width=1280&fullPage=true" \
  -o screenshot.png

Unlike the other endpoints, this one fetches external content server-side using a headless browser — it can also be dropped directly into an <img src="..."> tag.

Limits & machine-readable discovery

  • Max upload size: 15MB (resize/compress/convert)
  • Max output dimension: 6000px per side (resize/compress/convert), 3000px viewport (screenshot)
  • Screenshot render timeout: 15 seconds; private/internal URLs are rejected
  • Rate limit: 30 requests per minute per IP, no authentication required
  • No image storage — each request is processed in memory and discarded

A full OpenAPI 3.1 spec is published at /api/tools/openapi.json for agent frameworks and API clients that support automatic tool discovery, and a summary is linked from /llms.txt.