Photography — entry 020 of 25

ReSmush.it

Verified Jul 2026

ReSmush.it is a free, keyless image-optimization API — best known as the backend behind the ReSmush.it WordPress plugin — that accepts a source image URL and returns a JSON payload with the compressed image's URL plus original size, compressed size, and percent reduction. A live call against api.resmush.it needed no credentials and returned Access-Control-Allow-Origin: *, so it works directly from browser JavaScript. The plain http:// endpoint immediately redirects to https, so the service is https-only despite requiring no API key.

ReSmush.it is a free, keyless image-optimization API — best known as the backend behind the ReSmush.it WordPress plugin — that takes a source image's URL, compresses it server-side, and returns a JSON payload with the compressed image's own URL plus the original size, compressed size, and percent reduction. There is no upload endpoint for this GET form: the image itself must already be reachable at a public URL for the API to fetch and re-encode.

image-optimizationimage-compressionfree-apiwordpress-plugin
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/resmush-it/"><img src="https://greatapis.com/badge/resmush-it.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. No API key or account is needed — pass the source image's URL as the img query parameter to a bare GET and the response comes back immediately.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Optimize an image by URL

GEThttps://api.resmush.it/ws.php?img=https://picsum.photos/id/237/800/600.jpg

200 application/json

{"client_type":null,"src":"https:\/\/picsum.photos\/id\/237\/800\/600.jpg","dest":"http:\/\/fal1.static.resmush.it\/5931d0a372c0231a096f0c9a28e7063c\/600.jpg","src_size":71743,"dest_size":71537,"percent":0,"output":"json","expires":"Tue, 04 Aug 2026 11:04:15 +0200","generator":"reSmush.it rev.3.0.11.20240125"}

Captured byte-for-byte from this run's live probe against a real Lorem Picsum JPEG, no truncation. percent came back 0 for this particular source image — it was already a well-compressed JPEG with little left to shrink — confirming the API's own reduction figure rather than assuming a non-zero saving.

Developer reference

Gotchas & limits

  • dest is served over plain http://, not https://, even though the request itself was HTTPS — the compressed-image host (fal1.static.resmush.it in this probe) does not support TLS, so downstream code that hotlinks it must tolerate a mixed-content URL or re-fetch and re-host it.
  • percent can legitimately be 0 (or, per the API's own docs, occasionally negative if re-compression makes a file marginally larger) — it is not an error signal, and a caller expecting a guaranteed saving should check dest_size against src_size directly rather than assuming percent > 0.
  • The compressed file at dest is not permanent — the response's own expires field (a few hours out from request time in this probe) documents that it is cleaned up, so it must be downloaded/re-hosted promptly rather than linked to long-term.
  • The bare http://api.resmush.it host redirects to https:// (confirmed live), so despite needing no API key the service is effectively HTTPS-only for the request itself — call the https base directly to skip the extra round trip.
  • There is no batch mode on this endpoint — one img URL per request. Optimizing many images means one GET per image, and the API's own docs ask for reasonable request pacing since it fetches and re-encodes the source image synchronously on each call.