Article

API Security Testing Tools: What Each Category Finds, and the Gap They All Share

API security tools split into four categories — proxies, spec fuzzers, template scanners and injection specialists. All four share one blind spot: a broken authorisation check returns a syntactically perfect 200 OK, detectable only by holding two accounts and comparing.

By Paul Rudenko, Security ResearcherUpdated Sep 21, 20268 min read

Every tool on this page is real and useful. None of them finds the bug that matters most on an API — a valid 200 OK returned to the wrong caller — unless you give it two accounts and tell it what to compare. This is what each category actually covers, and what you still have to do yourself.

The four categories, and what each one can honestly find

1. Proxies and manual testing platforms

Burp Suite and OWASP ZAP sit between the client and the API and let you see, replay and modify every request. This is where real API testing happens, because it is the only category that lets you ask an arbitrary question. Their automated scanners find injection, reflected input and hygiene issues; their value for authorisation comes from replay — send the same request with a different session and look at what comes back.

For authorisation specifically, the Burp extension Autorize is the one to know: you give it a low-privilege session, browse as the high-privilege user, and it replays each request as the low user and flags where responses match. ZAP's access-control testing add-on does the same thing with a context and two users. Both need you to define the accounts — which is the whole point.

2. Spec-driven fuzzers

Schemathesis and similar tools read your OpenAPI or GraphQL schema and generate requests that conform to it — and requests that deliberately do not. They are excellent at finding 500s, schema violations, and endpoints that accept values the spec says are impossible. They run in CI, they are fast, and they require no credentials beyond a token.

Their blind spot is the same one: a fuzzer checks that a response matches the schema, not that the response belongs to the caller. An endpoint that cheerfully returns another tenant's invoice is schema-valid.

3. Template scanners

Nuclei matches thousands of community templates against a target: exposed Swagger UI, public GraphQL introspection, default credentials on management endpoints, known CVEs in API gateways, leaked .env files. On an API perimeter this is genuinely high yield and takes minutes — see the Nuclei guide for how to run it sanely. It finds known things in known shapes; your custom authorisation logic is neither.

4. Injection specialists

sqlmap goes far deeper on a suspected SQL injection than any general scanner: it confirms, fingerprints and demonstrates exploitability. Use it as the second step after a general probe raises a signal, pointed at one parameter — not as a broad sweep.

The gap every category shares

Broken object level authorization — IDOR/BOLA, the number-one item in the OWASP API Top 10 — produces a response that is syntactically perfect. There is no error string, no payload reflection, no anomalous status code. The only signal is semantic: this data belongs to someone else. A tool can only detect it if it holds two authenticated sessions simultaneously and has an oracle for deciding when one received the other's data.

That oracle is harder than it sounds. Comparing whole response bodies fails immediately, because two tenants routinely get the same rows in a different order, and timestamps or session identifiers differ on every request. What works is marking account A's data — an email, an account number, an invoice reference — and asking whether those markers appear in account B's response, plus an order-independent comparison of the returned record set. Get that wrong in either direction and you either miss real leaks or drown the report in noise.

The false positive that costs a day: two test accounts in the same organisation, tenant or workspace are supposed to see the same data. Every authorisation tool will flag it, and it is not a bug. Before you test, confirm the two accounts are in genuinely separate tenants — and when a result says B saw A's rows, check the tenancy before writing it up. Full detail in the IDOR guide.

A stack that covers the ground

  • Perimeter, weekly, no credentials: certificate transparency for forgotten api-staging. hosts, plus TLS, headers and cookie flags on each one. Cheap, automatable, and where the embarrassing findings live.
  • Inventory, per release: OpenAPI + GraphQL introspection + endpoints extracted from the front-end JS bundle, merged and de-duplicated. The bundle is the source that catches undocumented routes.
  • Schema fuzzing, in CI: Schemathesis against the spec, failing the build on 5xx.
  • Authorisation matrix, per release: two accounts, every id-scoped endpoint, four requests each — owner, other account, unauthenticated, low-privilege on a privileged-looking path.
  • Business logic, twice a year: a human with your domain context.
# The minimum CI test almost nobody writes — ten lines, catches the number-one API risk
def test_other_account_cannot_read_invoice(client, invoice_of_user_a, session_b):
    r = client.get(f"/api/invoices/{invoice_of_user_a.id}", headers=session_b)
    assert r.status_code == 404          # same 404 as a non-existent id, never 403

What our tooling does — and does not — cover

Our free tools are deliberately the perimeter half, because that half can be run without your credentials and without your permission being in question. The subdomain finder reads certificate transparency logs and shows which api./staging. hosts are publicly visible; the security score covers transport, headers, cookies and exposed files on a host; the CSP checker grades the policy. One request per host, nothing crafted, no login.

The authorisation half is not something a free tool can do, because it requires accounts on your system and your written authorisation. That is what our deep audit is: the endpoint inventory, then the two-account matrix, then proof in the report rather than a severity label.

Deep audit: endpoint inventory from spec + bundle, two-account authorisation matrix (BOLA, BFLA, excessive data exposure), read-only injection probes, and a report that shows 'logged in as B, read A's invoice' rather than a CVSS number. Quoted per application, from €900.

Ask about a deep audit

If you are choosing where to start, read the API security testing guide for the order that costs least, and attack surface management for keeping the perimeter half from drifting between releases; the API security checklist turns both into lines you can tick off.

Frequently asked questions

What is the best API security testing tool?

There is no single one, because the categories do different jobs. An intercepting proxy such as Burp Suite or OWASP ZAP is the core of manual testing and the only way to ask an arbitrary question about an endpoint. A spec-driven fuzzer such as Schemathesis runs in CI and finds crashes and schema violations without human attention. A template scanner such as Nuclei sweeps the perimeter for known exposures — public Swagger UI, open GraphQL introspection, leaked environment files — in minutes. An injection specialist such as sqlmap confirms and demonstrates a suspected SQL injection more thoroughly than any generalist. A workable stack uses one from each category; picking a single tool means accepting whichever gap it has.

Can any scanner detect IDOR or BOLA automatically?

Only one that holds two authenticated sessions at the same time and has an oracle for deciding when one session received the other's data. Burp's Autorize extension and ZAP's access-control add-on do this, and so do purpose-built audit engines, but all of them require you to supply two accounts and define what counts as a match. A single-session scanner cannot detect it at all, because the vulnerable response is a valid 200 OK with real business data and nothing in it is anomalous. The oracle also has to be built carefully: comparing full response bodies produces false results because tenants receive the same rows in different orders and timestamps differ on every request, so marker matching plus an order-independent record comparison is what actually works.

Is Nuclei useful for API security testing?

Yes, for the perimeter half. Nuclei matches community templates against a target and is high yield on exactly the things teams forget: an exposed Swagger or GraphQL playground in production, an API gateway with a known CVE, default credentials on a management endpoint, a leaked .env file, a staging API answering on a public hostname. That takes minutes and belongs in a weekly job. What it cannot do is evaluate your authorisation logic, because there is no template for 'this invoice belongs to a different customer'. Treat it as perimeter coverage and run a two-account authorisation matrix separately.

What should run in CI versus what needs a person?

In CI: schema fuzzing against your OpenAPI document failing the build on 5xx responses, a cross-account test for every id-scoped route asserting a 404 when a second account requests the first account's object, and a perimeter check for new public hostnames and transport hygiene. Those are mechanical, they regress in ordinary refactors, and catching them costs nothing per run. A person is needed for business-logic abuse — a refund endpoint accepting a negative amount, a checkout step callable out of order, a support role reading an audit log, a workflow that can be replayed. No tool has the business context to know those are wrong, so schedule a human review perhaps twice a year and automate everything below it.

Related guides

See your whole external attack surface

One page is a start. The full external scan covers TLS, headers, DNS, exposed files, open services and known-exploited CVEs across your whole domain.

See the full scan →