Detect Breaking Changes in OpenAPI Specifications

oasdiff compares OpenAPI specs and identifies every breaking change: endpoints removed, required fields added, response types changed, and over 300 more. Open source. CI-ready.

Supports OpenAPI 3.0 and 3.1 (beta).

★ 1,100+ GitHub stars · Apache-2.0 license · No account required

terminal
$ oasdiff breaking base.yaml revision.yaml

error [response-property-removed] at revision.yaml:38
      in API GET /users
          response property 'email' removed from status '200'

error [request-parameter-type-changed] at revision.yaml:15
      in API GET /products
          parameter 'limit' type changed from 'integer' to 'string'

2 breaking changes found

How teams use oasdiff

Works wherever your API lives — local, CI, or the browser.

CLI
# install
brew install oasdiff

# check for breaking changes
oasdiff breaking \
  base.yaml revision.yaml

# generate changelog
oasdiff changelog \
  base.yaml revision.yaml
Install guide →
GitHub Action
- uses: oasdiff/oasdiff-action@main
  with:
    base: base.yaml
    revision: openapi.yaml

# Pro: post PR comment
- uses: oasdiff/oasdiff-action/pr-comment@main
  with:
    base: base.yaml
    revision: openapi.yaml
    oasdiff-token: ${{ secrets.OASDIFF_TOKEN }}
Action setup →
Web Tool

Paste two OpenAPI specs and get breaking changes, changelog, raw diff, or a side-by-side view — instantly, no install required.

Supports YAML and JSON. Results are processed server-side and not stored.

Open Diff Calculator →

300+ breaking change rules

Most tools check a handful of obvious rules. oasdiff checks 300+ categories of breaking changes — every way an API modification can break an existing client, across every part of the OpenAPI spec.

Each rule has an ID, severity level, and a detailed description of what changed and why it matters. Results include the exact file and line number of the change.

What counts as a breaking change? →
Request body
Required fields, types, formats
Response body
Removed fields, narrowed types
Path parameters
Added requirements, type changes
Query parameters
New required params, removals
Response codes
Success codes removed, added errors
Security
Auth requirements added or changed
Headers
Required headers, type changes
Endpoints
Paths removed, methods removed

What counts as a breaking API change?

A breaking change is any modification that can cause existing client code to fail — without the client making any changes of its own. oasdiff detects all of them.

ChangeBreaking?Why
Required request property removed✅ YesClients that send it may get unexpected errors
New required request property added✅ YesExisting clients don't send it — requests fail
Response property removed✅ YesClients reading that field will get null or crash
Response property type changed✅ YesClient type parsing will fail or produce wrong values
Endpoint path removed✅ YesAll callers get 404
HTTP method removed✅ YesAll callers get 405
Success response code removed✅ YesClients checking for specific codes will break
New optional response propertyNoClients can ignore unknown fields
New optional request propertyNoClients that omit it still work
Endpoint description updatedNoDocumentation only — no runtime impact

Full breaking change reference →

oasdiff Pro

Catch breaking changes where you review code

oasdiff Pro posts a single auto-updating comment on every pull request that touches your API spec — breaking changes at the top, organized by severity, linked to the exact line in the spec.

No context-switching to CI logs. No manually running oasdiff. The review happens where the code review happens.

See pricing →
o
oasdiff-botcommented
oasdiff API Change Report
🔴 2 breaking changes·🟡 1 warning·🟢 3 info
Breaking changes
response-property-removed · GET /users · revision.yaml:38
request-parameter-type-changed · GET /products · revision.yaml:15
Powered by oasdiff · commit abc1234
OpenAPI 3.0 & 3.1

oasdiff fully supports OpenAPI 3.0.
OpenAPI 3.1 support is in beta — try it and report issues.

Searching for a Swagger diff tool?

Swagger was the original name for what is now the OpenAPI Specification. If your spec file starts with openapi: "3., oasdiff supports it.

Multi-file specs

oasdiff resolves $ref references across files and reports the correct source location for each change, even in complex multi-file API definitions.