checklists

API Testing Checklist.

API Testing A thorough checklist for testing REST APIs covering endpoints, HTTP methods, status codes, request validation, response schema, authentication, authorization, pagination, filtering, error handling, security basics, and OpenAPI/documentation conformance.

9
sections
44
items
3–4 hours
time
QA engineersSDETsAutomation engineersDevelopers

When to use this checklist

  • When testing a new API endpoint or a new API version before it ships
  • As a regression suite for a stable API that is being refactored
  • During a third-party API integration review
  • Before signing off a microservice for production deployment
  • As a reference when authoring Postman collections or Playwright API tests

This checklist covers every layer of API quality: correct HTTP semantics, request and response schema fidelity, authentication and authorisation enforcement, pagination and filtering correctness, error response consistency, and security hygiene. It assumes a JSON REST API but most items also apply to GraphQL endpoints. Items marked automationCandidate are well-suited to a Playwright APIRequestContext or Supertest suite running in CI.

0/44

Endpoint Discovery & HTTP Methods

0/4

Verify that each endpoint exists, supports the correct HTTP methods, and rejects unsupported ones cleanly.

Request Validation

0/6

Confirm the API validates all incoming data and rejects malformed or missing fields with descriptive errors.

Response Schema & Consistency

0/5

Assert that every response matches its documented schema and that the API is internally consistent.

Authentication

0/5

Verify that protected endpoints enforce authentication and that tokens are validated correctly.

Authorization (Access Control)

0/4

Verify that users can only access and modify resources they are permitted to.

Pagination, Filtering & Sorting

0/7

Confirm that collection endpoints handle large datasets correctly and that cursor/offset parameters behave as documented.

Error Response Consistency

0/4

Verify that all error responses use consistent HTTP status codes and a uniform JSON error body format.

Security Basics

0/5

Verify that the API enforces rate limiting, uses secure headers, and does not leak sensitive data.

OpenAPI / Documentation Conformance

0/4

Confirm that the live API matches its OpenAPI spec — endpoints, schemas, and status codes must all agree.

Common Bugs

Returns HTTP 200 with an error body instead of a 4xx/5xx status

The API returns {"success": false, "error": "Not found"} with status 200. HTTP clients that branch on status code (axios interceptors, fetch response.ok) silently treat this as success. Every error condition must use the appropriate HTTP status code.

Expired or revoked tokens accepted because token expiry is not validated

The server only validates the JWT signature, not the exp claim. A token issued months ago with a valid signature continues to grant access indefinitely. Always validate exp, nbf, and any server-side revocation list.

IDOR via sequential integer IDs — user can access another user's data by incrementing the path param

GET /orders/1042 returns User A's order. GET /orders/1041 returns User B's order. The server checks that the user is authenticated but not that the resource belongs to the requesting user. Fix: enforce row-level ownership checks, and prefer UUIDs over sequential IDs.

Mass assignment — extra fields in POST body are accepted and persisted

Sending {"username": "alice", "role": "admin"} to a user-registration endpoint silently sets the role to admin because the ORM binds all incoming fields. Always use an explicit allowlist of permitted fields.

Unbounded collection endpoint returns all rows without pagination

GET /events with no limit parameter returns all 500,000 events in a single response, causing a 30-second timeout and eventual OOM. Always enforce a maximum page size server-side, regardless of what the client requests.

sort_by parameter accepts arbitrary values leading to SQL injection via ORDER BY clause

ORDER BY is a clause that many ORMs do not parameterise. Passing sort_by=1;DROP+TABLE+users-- can execute arbitrary SQL. Validate sort_by against a strict allowlist of permitted column names before building the query.

Recommended Tools

Postman

Comprehensive API client with collection runner, environment variables, and built-in test scripting. Good for exploratory testing and sharing requests with the team.

Bruno

Git-native API client that stores collections as plain files. Ideal for version-controlling API tests alongside the source code.

Hoppscotch

Open-source, browser-based API client. Useful for quick ad-hoc requests and teams that want a self-hosted alternative to Postman.

OWASP ZAP

Open-source DAST scanner. Point it at your API to automatically probe for OWASP Top 10 vulnerabilities including injection, auth bypass, and excessive data exposure.

k6

JavaScript-based load testing tool. Use it to validate that your API holds up under the rate-limiting thresholds and pagination edge cases described in this checklist.