An API penetration testing checklist keeps a test focused on the risks that actually cause API breaches. The 85 checks below follow the natural order of an engagement: scope, discover, authenticate, then attack authorization, properties, inputs, business logic, and configuration. Each phase lists its OWASP API Security Top 10 category so your report maps cleanly to a recognized standard.
This article was created with AI assistance. Test only systems you own or are explicitly authorized to test.
How to use this checklist
- For a manual pentest: work through the phases in order and record evidence for each check, including “not applicable” with a reason.
- For a scanner evaluation: mark which checks your tool performs automatically. The gaps are what your manual testing or threat modeling must cover.
- For a release gate: automate the authorization, authentication, and configuration phases on every release candidate, and schedule the rest.
Phases 3 to 5 depend on Phase 1. Without two users per role and two tenants, you cannot test BOLA, BFLA, or tenant isolation at all.
Phase 1: Scope and preparation
Most failed API tests fail before the first request: the wrong environment, a single test account, or no agreement on what is in scope. OWASP mapping: all categories.
- Get written authorization that names the hosts, environments, and testing window.
- Agree on excluded systems, maximum request rates, and an escalation contact for incidents.
- Use a non-production environment with production-like configuration and disposable test data.
- Create at least two users per role, plus users in two different tenants or organizations.
- Seed each test user with objects they own (orders, invoices, projects, files) so cross-user tests have targets.
- Collect the API definition: OpenAPI/Swagger spec, Postman collection, or recorded HAR traffic.
Phase 2: Discovery and inventory
You can only test what you know exists. Build a complete operation inventory before testing anything else. OWASP mapping: API9 Improper Inventory Management.
- List every operation (method + path) from the spec and compare it with what the gateway or traffic shows.
- Request older version prefixes such as
/v1/,/v2/,/beta/, and/internal/. - Check for publicly exposed schema documents (
/openapi.json,/swagger.json,/api-docs, GraphQL introspection). - Probe for debug, health, metrics, and admin surfaces (
/actuator,/debug,/metrics,/admin). - Identify every parameter that carries an object identifier: path, query, body, and headers.
- Identify every parameter that accepts a URL, file, or XML document.
- Record which operations change state (POST, PUT, PATCH, DELETE) and which move money or create accounts.
- Map the expected access for each operation and role. This matrix drives the authorization phase.
Phase 3: Authentication
Authentication bugs let attackers become someone else. Test the token, the login, and the recovery paths. OWASP mapping: API2 Broken Authentication.
- Call every protected operation with no credentials and confirm a 401.
- Send malformed, truncated, and random tokens; confirm they are rejected without stack traces.
- Replay an expired token and confirm rejection; check how long access tokens remain valid.
- Set the JWT
algheader tononeand remove the signature. - Re-sign a JWT with a different key, and test HS256/RS256 algorithm confusion.
- Modify JWT claims (subject, role, tenant) without re-signing and confirm the signature is enforced.
- Try to brute-force common secrets for HMAC-signed tokens using an offline wordlist.
- Compare login and password-reset responses for existing and non-existing accounts to detect enumeration.
- Send repeated failed logins and confirm throttling, lockout, or CAPTCHA.
- Test default and well-known credentials on admin and service accounts.
- Confirm tokens are invalidated on logout and password change.
- Confirm that sensitive actions (email change, password change, MFA reset) require re-authentication.
Phase 4: Authorization
This is the highest-value phase. Most serious API breaches come from authorization failures, and they are invisible to single-user testing. OWASP mapping: API1 BOLA, API5 BFLA.
- For every operation with an object ID, replay User A’s request with User B’s ID (same role).
- Repeat cross-user tests for read, update, and delete—protection on
GETdoes not imply protection onPATCHorDELETE. - Replay requests across tenants with IDs from the other organization.
- Test identifiers in every location: path, query string, JSON body, nested objects, and custom headers.
- Check list, search, and export endpoints for records belonging to other users.
- Try predictable IDs (sequential integers) and IDs leaked by other responses for UUID-based APIs.
- Call every admin-only operation with every lower-privilege role.
- Call privileged operations with alternate HTTP methods on the same path.
- Change role or tenant hints in the request (
X-Tenant-ID,?orgId=, body fields) and see whether the server trusts them. - Check whether a user can attach another user’s object to their own (for example, add someone else’s payment method to an order).
- Confirm that error responses for unauthorized objects do not reveal whether the object exists.
- Re-run the full authorization matrix after every role or permission change.
Phase 5: Object properties
Even when access to an object is correct, individual fields can leak or be overwritten. OWASP mapping: API3 Broken Object Property Level Authorization.
- Review each response for fields the client does not need: internal IDs, hashes, tokens, flags, other users’ personal data.
- Compare responses for the same object across roles; lower roles should see fewer fields.
- Add privileged properties to create and update requests (
role,isAdmin,ownerId,tenantId,status,price). - Read the object back after each write to confirm whether injected properties persisted.
- Send properties in nested objects and arrays, not only at the top level.
- Check whether read-only fields in the schema (
readOnly: true) are actually enforced on write.
Phase 6: Input handling and injection
Injection is no longer a standalone API Top 10 category, but it remains common in APIs that build queries or commands from input. OWASP mapping: API8 Security Misconfiguration, API7 SSRF.
- Test string parameters for SQL injection using error-based, boolean, and time-based techniques.
- Test JSON bodies for NoSQL operator injection (
{"$ne": null},{"$gt": ""}). - Test parameters that reach shells or file names for command injection.
- Test parameters rendered into templates or emails for server-side template injection.
- Test file and path parameters for traversal (
../and encoded variants). - Send XML to endpoints that accept it and test for XXE.
- Supply internal addresses and a callback URL you control to every URL parameter (SSRF).
- Send wrong types, nulls, very long strings, and unexpected enum values; confirm 4xx responses, not 500s.
- Upload files with dangerous extensions, mismatched content types, and oversized payloads.
- Confirm that validation errors do not leak stack traces, SQL, or framework versions.
Phase 7: Business logic
Business-logic flaws use valid requests in invalid sequences or with invalid values. Scanners help with common patterns; your threat model covers the rest. OWASP mapping: API6 Unrestricted Access to Sensitive Business Flows.
- Tamper with client-supplied prices, totals, discounts, and currencies.
- Submit negative, zero, fractional, and very large quantities.
- Change the payment amount between authorization and capture.
- Skip steps in multi-step flows (checkout, onboarding, approval) by calling the final step directly.
- Replay one-time actions: coupon redemption, referral credit, trial activation.
- Race concurrent requests against limited resources (inventory, balances, invites).
- Automate high-value flows (sign-up, reservations) at speed and check for anti-automation controls.
- Confirm that state transitions (for example, refunded → shipped) are validated server-side.
Phase 8: Rate limiting and resource consumption
Unbounded APIs are expensive to run and easy to take down. OWASP mapping: API4 Unrestricted Resource Consumption.
- Check for
429responses and rate-limit headers on login, OTP, and password-reset endpoints. - Request very large page sizes (
?limit=100000) and deeply nested expansions. - Send batch requests with thousands of items.
- Trigger costly third-party actions (SMS, email, document generation) repeatedly.
- Upload files beyond the documented maximum and confirm rejection before processing.
- Confirm that timeouts and request-size limits are enforced at the gateway and the service.
Phase 9: Configuration and transport
Misconfiguration checks are quick and highly automatable. Run them on every environment. OWASP mapping: API8 Security Misconfiguration.
- Confirm TLS everywhere and that plain HTTP redirects or is refused.
- Send an arbitrary
Originheader and check whether it is reflected withAccess-Control-Allow-Credentials: true. - Check for server and framework version headers.
- Confirm unused HTTP methods (TRACE, PUT on read-only resources) are disabled.
- Check security headers relevant to API responses (
Cache-Controlon sensitive data,Content-Typecorrectness). - Trigger errors and confirm generic messages in non-debug mode.
- Confirm that internal endpoints are not reachable from the internet.
- Check that secrets do not appear in responses, logs exposed through APIs, or client bundles.
Phase 10: Third-party APIs and webhooks
Data from integrations deserves the same suspicion as user input. OWASP mapping: API10 Unsafe Consumption of APIs.
- Send unsigned or incorrectly signed webhook payloads and confirm rejection.
- Replay a valid webhook and confirm idempotency or replay protection.
- Review whether data from partner APIs is validated before use in queries, redirects, or decisions.
- Confirm outbound calls use TLS and do not follow redirects to arbitrary hosts.
Phase 11: Reporting and retesting
A finding is only useful if an engineer can reproduce it and you can prove it is fixed. OWASP mapping: all categories.
- Record the exact request, response, user, and role for every finding.
- Map each finding to an OWASP API Top 10 category and a severity.
- Write remediation guidance that names the control, not only the symptom.
- Retest every fixed finding and record the result.
- Convert confirmed findings into automated regression tests so they stay fixed.
Which checks to automate
Roughly two-thirds of this checklist can run automatically on every release if your scanner understands your API definition and your roles. The authorization phase is the most valuable to automate, because it is tedious by hand—every operation multiplied by every role multiplied by every owner—and because authorization regressions are easy to introduce in new endpoints.
| Phase | Automation fit |
|---|---|
| Discovery and inventory | Spec-driven surface and schema exposure; shadow APIs need traffic data |
| Authentication | Token tampering, enumeration, rate-limit, default credentials |
| Authorization | BOLA, BFLA, and cross-tenant tests when roles and owners are configured |
| Object properties | Mass assignment and sensitive data exposure |
| Input handling | SQL/NoSQL/command/template injection, traversal, XXE, SSRF, uploads |
| Business logic | Price, quantity, and payment tampering; flow-specific abuse needs people |
| Resource consumption | Missing rate limits and upload limits |
| Configuration | CORS, error leakage, fingerprinting, debug surfaces |
| Third-party and webhooks | Unsigned webhook acceptance; integration design needs review |
DastPilot automates the rows marked above from an OpenAPI spec or Postman collection plus your role definitions, and records the request and response behind every finding. Pair it with a focused manual test of business flows, and use our CI/CD guide to make the automated part run on every release.
Frequently asked questions
What should an API penetration test include?
At minimum: endpoint discovery, authentication and token testing, object- and function-level authorization testing with multiple users and roles, property-level checks for mass assignment and data exposure, injection testing, business-logic abuse, rate limiting, configuration review, and a report with reproducible evidence.
How long does an API penetration test take?
It depends on the number of operations and roles. A small API with a few dozen operations may take a few days manually; large APIs take weeks. Automating authentication, authorization, and configuration checks shortens the manual portion considerably.
Do I need more than one test account?
Yes. Authorization flaws such as BOLA, BFLA, and cross-tenant access can only be detected by comparing what different users and roles can access. Plan for at least two users per role and two separate tenants.
How often should APIs be penetration tested?
Run automated security tests on every release and schedule manual penetration tests at least annually or after major architectural changes. Many compliance programs require an annual test; continuous automated testing catches regressions between them.
Automate the repetitive two-thirds
DastPilot runs the authentication, authorization, property, injection, and configuration checks on every scan, with HTTP evidence for each finding. Start a 30-day free trial.
Start Free Trial