API abuse: the endpoint works exactly as intended

API abuse means using an interface the way it was built to be used, at a volume or in a sequence nobody designed for. There is no broken request and no exploit. A single call is indistinguishable from a legitimate one because it is one, which makes the decision a question of intent rather than of validity.

Section Attacks Updated Shapes three

Quick facts

Layer
Application (7)
Vector
Valid calls to working endpoints, in volume or in unexpected sequences
Goal
Exhaust resources, extract data, or exploit business logic
In your logs
Successful responses; the anomaly is in pattern, not in status
Does a WAF stop it?
Yes for the volume side, through limits and authorisation. Design flaws behind an endpoint are fixed in the application

Why it looks different from a flood

A flood is about quantity of the same thing. Abuse is often about the shape of the interaction.

Interfaces built for programs are more generous than pages built for people: they return structured data, they accept parameters that select what to return, and they are designed to be called repeatedly. Each of those properties is useful and each of them is also a lever. A call that returns one record can be made many times to return everything, and a parameter that selects a page of results can select a much larger one.

The consequence is that abuse frequently arrives at rates that would never alarm anyone, because the lever per call is high enough that volume is unnecessary.

The three shapes

Resource abuse. Calling an expensive endpoint often enough to exhaust what is behind it: a search, a report, an operation that fans out into several internal calls. This is the form closest to a flood and the one limits address directly.

Data extraction. Retrieving far more than any single user needs, one legitimate response at a time. Nothing in any individual call is wrong; the total is the problem, and totals are not what most defences measure.

Logic abuse. Using the sequence rather than the volume: repeating an operation that was meant to happen once, taking a step out of order, or exploiting the gap between two calls that were assumed to be adjacent. Rates here can be trivially low.

The third form is where filtering helps least and where the actual fix belongs to whoever designed the endpoint.

What separates abuse from use

Four properties, and none is decisive alone.

Breadth against depth. Real clients look at what concerns them. Access that walks systematically across identifiers or ranges is a different behaviour from access that returns to the same few.

BREADTH AGAINST DEPTH, ACROSS A RANGE OF IDENTIFIERS A REAL CLIENT — RETURNS TO THE SAME FEW WHAT CONCERNS THEM, AND NOTHING ELSE SYSTEMATIC ACCESS — WALKS THE RANGE EVERY IDENTIFIER, ONCE — AND NO SINGLE CALL IS WRONG // the total is the problem, and totals are not what most defences measure
// none of these four properties is decisive alone

Absence of the rest of the application. Interfaces are usually called alongside something else: a session, an interface, a workflow. Calls arriving without any of that context are automation, which is not automatically abuse but is worth knowing.

Timing that no person produces. Even intervals, or bursts arriving faster than an interface could reasonably drive.

Cost per client wildly out of line. The most reliable signal available, because it does not depend on guessing intent: a client consuming far more work than any plausible user is a fact rather than an inference.

Where the real fix lives

Filtering is often applied to problems it cannot solve.

If an endpoint returns records belonging to whoever asks, the defect is authorisation, and no rate limit repairs it: a limit slows extraction without preventing it. If an operation can be replayed to produce an effect twice, the defect is in the operation, and limiting how fast it can be replayed leaves it replayable.

A LIMIT CHANGES WHEN, NOT WHETHER WITHOUT A LIMIT ALL OF IT, QUICKLY WITH A RATE LIMIT ALL OF IT, LATER — THE SAME TWENTY RECORDS // if the endpoint returns records to whoever asks, the defect is authorisation // and no rate limit repairs it
// filtering applied to a problem it cannot solve

The classes of flaw behind these are documented in the material on application security rules, and that is the right place for them. What belongs on this page is the traffic-side answer, which is narrower and honest about its narrowness.

Mitigation by layer

Four measures, and the first two do most of the work.

Limit per endpoint and per client, weighted by cost. A uniform limit across an interface either throttles cheap calls needlessly or leaves expensive ones open. The general approach to designing such limits belongs with the material on rate limiting.

Bound what a single call may return. Maximum page sizes and ranges turn extraction into something that needs many calls, which is what limits can then see.

Require identity for anything expensive. Authenticated access ties consumption to an account rather than to an address, which survives distribution across many sources, and it makes revocation possible.

Watch totals per account, not just rates. Extraction is a sum, not a rate. A client whose weekly total is unlike every other client is visible in a way that per-minute counters never show.

What does not help on its own: blocking by address, since interfaces are called from infrastructure rather than from browsers, and matching request content, since the content is correct.

The cost of getting it wrong

Every measure here can break an integration that someone is paying for.

Partner systems and internal automation look exactly like abuse: no browser, no session, even timing, high volume. Limits applied without knowing who legitimately calls you produce a failure that is invisible on your side and highly visible on theirs, often arriving as a support ticket days later.

Two things reduce the risk. Know which clients are expected before enforcing anything, which usually means issuing them identity instead of guessing from addresses. And prefer measures that slow rather than refuse, because a slowed integration retries and a blocked one fails.

Where the platform sits

Bridge WAF inspects requests before they reach your origin and applies rate limiting per domain, which addresses the volume side. What it does not do is repair an endpoint that returns data to whoever asks, or an operation that can be replayed for effect. Those are application defects, and any product claiming to fix them from outside is describing something else. See what the platform offers at Bridge CDN.

Questions

What is API abuse?

Using endpoints exactly as designed, at volumes or in sequences nobody anticipated. Nothing is broken into and nothing malfunctions, which is what makes it awkward: the system behaves correctly throughout, and the damage comes from the correct behaviour being repeated.

How is it different from an HTTP flood?

A flood works through quantity, so it is visible in any rate measurement. Abuse works through what each call is worth, extracting or costing a great deal every time, so it can achieve its purpose at rates that trigger no alarm and appear in no graph as unusual.

Does a WAF stop API abuse?

It addresses the volume and extraction sides, through limits per client and through requiring identity. What it cannot address is a missing authorisation check or an operation that can be replayed, because those are properties of the application and have to be fixed there.

Why do address blocks not work?

Because interfaces are called from infrastructure rather than from personal devices, and infrastructure changes addresses trivially while sharing them widely. Blocking one address removes a caller for a few minutes and may remove several unrelated legitimate callers permanently, which is the worse half of that trade.

What is the most reliable signal?

Cost consumed per identified client, because it is a measurement rather than an inference. Headers, addresses, and traffic shape all invite guesses about who someone is; what an endpoint costs to answer is a fact you already possess and can act on defensibly.

How do I avoid breaking partners?

Three habits, in order. Establish which clients are expected before you enforce anything, give each of them an identity so limits can be set per client rather than per address, and prefer slowing a caller down to refusing it, since a slowed integration reports the problem while a refused one breaks.

Where the platform sits

The volume side, and honest about the rest: an application defect is not repairable from outside.

off

No request is inspected and no allowance is counted.

monitor

What a limit would have refused is recorded while every call is still answered.

block

Calls past the allowance are refused at the edge, and still recorded.

The firewall layer is included with Bridge CDN. Start in monitor: nothing is refused until you decide it should be.

Get started