AI & ML
The API worked. The payload didn’t.
Avi Natani DEV Community
1 views
I kept shipping APIs I hadn’t really looked at.
I’d ask whatever assistant was open Cursor, Claude, Antigravity, Trae for a users endpoint. It generated the route, the DTO, the response. The page rendered. I moved on.
Then I opened DevTools → Network.
Full objects on a list view
Nulls everywhere
Verbose keys
Extra timestamps
Fields the UI never used
Gzip made the response look small, so I ignored it.
That was the mistake.
Working is not the same as small
This is not only a backend problem. Frontend apps consume these payloads too.
If the client receives something like 500KB and only needs 50KB, both sides pay for it, whether the contract was written by you, your team, or an agent.
Compression hides sloppy JSON. It doesn't delete fields you shouldn't have sent.
A normal-looking user list I ran through this looked like:
3.01 KB raw
score 52/100
about 54% of the bytes looked optional
pretty-print whitespace alone: 904 B
the same preferences object repeated on every row: 528 B
Then Gzip crushed it to a few hundred bytes. That’s how this survives code review. The wire looks fine. The shape is still fat.
I didn’t want another dashboard
I didn’t want a place where I paste a giant JSON blob and stare at charts.
I wanted the same agent that wrote the endpoint to look at it and say: we don’t need all this.
So I built BandwidthGuard.
Two ways in.
1. You have the response
Go to /analyze.
Paste JSON, drop a HAR, or paste cURL. It stays in the browser. Nothing gets uploaded.
You get a score, a field-level breakdown, Gzip / Brotli / Zstd / MessagePack / CBOR on that payload, and fixes split into:
safe
review with the team
this changes the contract
That last split matters more than the codec table. Minifying JSON is easy. Pulling email off a list endpoint is not the same kind of change.
2. You don’t want to paste JSON first
This is the path I actually use when I just generated the endpoint.
On the homepage, open Feed Payload Insights into Your AI Coding Agent.
Pick Cursor, Claude, ChatGPT, Gemini, DeepSeek, Grok, or Antigravity
Type GET /v1/users or just User list
Copy the prompt
Drop it into the same chat that wrote the endpoint
The prompt already tells the agent to find bloat, clean the serializer, compare compression, show before/after, and check work in the analyzer. It also points to /llms.txt so the model isn’t inventing a process.
Generate → inspect one payload, or skip straight to the prompt → slim the serializer → paste the new response back if you want proof.
What this is not
It is not an APM.
It is not your cloud invoice.
It will not cut a bill by some fixed percentage just because Gzip exists.
If compression is already on, the useful win is structural: stop sending unused fields.
If you try it
Use a list endpoint you didn’t hand-write. Detail endpoints are usually less embarrassing.
Then look at two things only:
Which fields are marked unused
Whether the suggested fix is safe or a contract change
Free. No account. Runs in the tab.
https://bandwidthguard.chidkoli.com/
I built this because I got tired of shipping apps that worked and still moved more data than they needed.
Cover image: the 5:2 two-card graphic (agent-cards-5x2-wide.jpg).
Read original: https://dev.to/avi_natani_732ee2ebef2121/the-api-worked-the-payload-didnt-1nhe
← Previous
Ten NocoBase workflows, one increment: measuring lost updates
Next →
What Should Block an AI Agent Release?
Related
AI Development Cost Guide for Businesses
AI & ML
0
Dev.to (EN Zone)
With AI, The Real Edge Is Knowing What to Build
AI & ML
0
Dev.to (EN Zone)
MCP 2026-07-28 Went Stateless: A Planted Prompt Is a Credential
AI & ML
1
DEV Community
The Cursor Allowlist Bypass That Starts With a File Named curl
AI & ML
0
DEV Community
Comments0
No comments yet — be the first