Every image my agents publish passes through one free API before it touches WordPress. This morning it took a 142,497-byte featured image down to 34,819 bytes — 75.6% saved — and the version you are looking at on this page is the small one.
The tool is the Tinify API — the engine behind TinyPNG. It’s today’s Tool Thursday pick, and not because it compresses images. It’s here because of one header almost nobody reads.
What Tinify actually does in my stack
My image pipeline is four hops: Replicate generates it, Tinify compresses it, Cloudinary serves it, WordPress stores it. Compression is step 2 of 6 and it is a hard gate — my script refuses to send an uncompressed image to the site. Ever.
That rule is not fussiness. A featured image at 142KB instead of 35KB is four times the bytes on every single page view, on mobile, on a hotel wifi connection in Ubud. You don’t feel it. Your Core Web Vitals do.
The part nobody tells you: it fails at the worst possible moment
On 10 September my whole fleet’s image production stopped. Tinify returned HTTP 429 and a number: compression-count: 1711. Monthly quota gone. It stayed gone for four days.
Here’s what made it expensive. Because compression is a mandatory gate, the pipeline didn’t degrade — it died. No compressed image meant no image at all, which meant no blog post, no social post, nothing. One free API at 500 compressions a month took down five skills across ten brand containers, and the first I heard about it was a failed run.
Why 500 wasn’t enough is the unglamorous part: I run one key across the whole fleet. I measured the actual burn this week — 2,569 compressions on Monday evening, 3,224 on Wednesday evening. That’s 655 in 48 hours, about 327 a day. A 500-a-month free tier lasts my setup roughly a day and a half.
The free tool inside the free tool
Here’s the bit worth stealing. Every Tinify API response carries a Compression-Count header — their docs describe it as “the number of compressions made with this account during the current calendar month.”

⚡ GET THE AI EDGE
Weekly AI tips that actually save you time and money. No fluff, no hype — just what works.
Including the error responses. Send a deliberately empty body and Tinify rejects it — and still tells you exactly where you stand:
curl -s -D - -X POST "https://api.tinify.com/shrink" \
-u "api:$TINIFY_API" --data-binary "" | grep -i compression-count
I ran that three times in a row this morning. 3378, 3378, 3378 — a 400 error every time, and not one compression consumed. Then I ran my real pipeline once and probed again: 3379. The probe is free. The work costs exactly one.
So the sequence is now: check the quota first, then spend the ~$0.08 on generating an image you might not be able to use. Cheap call before expensive call. Same instinct as reading the count from the header instead of the response body — the answer was sitting there the whole time.
Today’s takeaway
Two rules, and the second one is bigger than Tinify:
- Probe before you spend. If a paid step feeds a metered step, ask the meter first. It’s usually one free call.
- Find every mandatory gate in your pipeline and go read its limit today. Not when it 429s. A gate you can’t skip is a single point of failure with a number attached — and that number is knowable in advance.
Go look at the automation you rely on most. Which step can’t be skipped, and what’s its quota? If you don’t know, you’ll find out the way I did.
Building something that runs without you and want the failure modes mapped before they bite? Book an automation strategy session and we’ll go through your pipeline gate by gate.
— Jon

📥 FREE: THE AI PLAYBOOK
The exact tools and workflows I use to run a one-person agency. 25 years of marketing experience distilled into an actionable guide. Yours free.
