BYTETOOLS

wsrv.nl (Images.weserv) API

Free image proxy and resizing API with no key: fetch any public image through a URL, resize, crop, convert format and serve it from a CDN. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the wsrv.nl (Images.weserv) API?

wsrv.nl is a free image proxy and manipulation service needing no API key. Pass any public image URL and it fetches, transforms and serves the result from Cloudflare's CDN, with resizing, cropping, format conversion and filters all controlled by query parameters.

This is an image pipeline you do not have to run. Point it at a public image URL, add parameters for width, height, fit mode, output format and quality, and it returns the transformed result from a CDN edge. Built on libvips, it is fast, and it has been operating free of charge for well over a decade — long enough that a great many sites quietly depend on it.

Two things save the most work in practice. Automatic format negotiation means adding `output=webp` or letting it detect browser support serves modern formats without you maintaining variants. And because it fetches over HTTP itself, it neatly solves the mixed-content problem: an http-only image can be served to an https page through the proxy. The URL you pass does not need its scheme — `?url=picsum.photos/400` works, and https is assumed. Do note that you are handing a third party your image traffic, and that only publicly reachable URLs can be fetched.

Quick facts

Base URL
https://images.weserv.nl
Authentication
No API key and no account. The service has been free since 2007 and is funded by donations.
Rate limit
No published limit, but the service asks that you not use it as a permanent origin for very high traffic. Results are CDN-cached.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the wsrv.nl (Images.weserv) API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Resize a remote image through the proxy

GET https://images.weserv.nl/?url=picsum.photos/400&w=120

curl
curl 'https://images.weserv.nl/?url=picsum.photos/400&w=120'
JavaScript (fetch)
const res = await fetch("https://images.weserv.nl/?url=picsum.photos/400&w=120");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://images.weserv.nl/?url=picsum.photos/400&w=120", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
# This endpoint returns image/jpeg, not JSON.
# The response body is the image itself, so it can be used directly as an
# <img src="..."> or saved to a file — there is nothing to parse.
#
# Verified: HTTP 200, Content-Type: image/jpeg

Parameters

ParameterTypeRequiredDescription
urlqueryRequiredThe source image URL. The scheme can be omitted — https is assumed. picsum.photos/400
w / hqueryOptionalTarget width and height in pixels. 120
fitqueryOptionalHow to fit the target box: `inside`, `outside`, `cover`, `fill` or `contain`. cover
outputqueryOptionalOutput format — `webp`, `avif`, `jpg`, `png` or `gif`. webp
qqueryOptionalOutput quality, 1 to 100. 80
blur / sharp / filtqueryOptionalImage filters: blur radius, sharpening, and named filters such as greyscale or sepia. 5
wequeryOptionalSet to serve WebP to browsers that support it and the original format otherwise. 1

Response fields

(body)image
The transformed image bytes. There is no JSON — the URL is the API.
Content-Typeheader
Reflects the output format, which is JPEG unless you asked for something else.
(CORS)header
A permissive Access-Control-Allow-Origin header is sent, so canvas and fetch access work — unusual among image services.
(errors)image
Failures come back as a rendered error image rather than an HTTP error status, which can hide problems in an `img` tag.

What you can build with the wsrv.nl (Images.weserv) API

  • Serve responsive image sizes without building an image pipeline
  • Convert legacy JPEGs to WebP or AVIF on the fly
  • Proxy http-only images into an https page without mixed-content warnings
  • Generate thumbnails from user-supplied image URLs

Common errors and how to fix them

An error image is displayed

Failures are rendered as an image rather than returned as an HTTP status.

Fix: Fetch the URL directly when debugging rather than relying on the `img` tag, which will happily display the error picture.

Source could not be fetched

The URL is not publicly reachable.

Fix: The proxy fetches from the open internet. Anything behind authentication, a firewall or localhost will fail.

Unexpected crop

The default fit mode may not be what you assumed.

Fix: Set `fit` explicitly. `cover` crops to fill, `inside` scales to fit within the box.

Slow first request

The first fetch of an image is uncached.

Fix: Subsequent requests come from the CDN edge. Warm frequently used sizes if first-paint latency matters.

wsrv.nl (Images.weserv) API — frequently asked questions

Is wsrv.nl really free?

Yes, with no key and no account. It has operated free of charge since 2007 and is donation-funded. The operators ask that you not treat it as a permanent origin for very high traffic.

What can it do to an image?

Resize, crop, rotate, convert format, adjust quality, blur, sharpen and apply named filters, all through query parameters on the URL.

Can it fetch images from behind a login?

No. Only publicly reachable URLs can be proxied, since the service fetches them itself over the open internet.

Why do I see a picture of an error message?

Because failures are rendered as an image rather than returned as an HTTP error. Request the URL directly when debugging to see what actually went wrong.

Tools that pair with this API

wsrv.nl (Images.weserv) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.