Online Tool Store Online Tool Store

API Contract Checker

Compare OpenAPI 3.x specs for breaking, safe, security, and allOf/oneOf changes, with file upload and 3.1 support - 100% in your browser, nothing uploaded.

🔒 This tool runs entirely in your browser. Your files are never uploaded to a server.

Browser tool

API Contract Checker

Either box accepts OpenAPI 3.x as JSON or YAML — paste it, drag a file onto the box, or use Upload file. Nothing is uploaded to a server — the comparison runs entirely in your browser. Press Ctrl+Enter to compare immediately.

How it works

  1. Paste your base (old) and revision (new) OpenAPI 3.x spec into the two boxes - or drag a .json/.yaml/.yml file onto either one, or use its Upload file button. JSON or YAML both work, and you don't need to match formats.
  2. Press Compare, keep typing (it re-runs automatically after a brief pause), or press Ctrl+Enter to compare instantly.
  3. Results are grouped into breaking changes, safe/additive changes, and other modifications - including security, deprecation, server, and allOf/oneOf/anyOf changes - with a count of each at the top. Click a count badge to hide or show that group.
  4. Pick a report format (Text, Markdown, or JSON) and press Download report to save the full diff.

FAQ

What does this tool actually check?

You paste (or upload) a base (old) and a revision (new) OpenAPI 3.x specification, and it walks every path, parameter, request body, response, security requirement, and schema in both, then reports what changed: added or removed endpoints, parameter and request-field requirement changes, narrowed types or enums, response fields or status codes that disappeared, security requirement changes, and allOf/oneOf/anyOf composition changes.

What counts as a "breaking" change?

Anything that could stop an existing client from working: a removed endpoint, a parameter or request field that became required, a response field or status code that was removed, a field that is no longer guaranteed in a response, or a type/enum that got narrower (including OpenAPI 3.1 nullable type arrays, e.g. removing "null" from `["string", "null"]`). New endpoints, new optional fields, and new response fields are additive and shown separately as safe.

Does it check security scheme and deprecation changes?

Yes. Added/removed security requirements (global and per-operation), security scheme definition changes (e.g. an API key moving from a header to a query parameter), newly-deprecated operations, and server URL changes are all reported - as informational findings rather than breaking or safe, since (matching the default severity oasdiff itself assigns these checks) neither direction is universally right or wrong; you decide whether it matters for your API.

Does it handle allOf, oneOf, and anyOf schema composition?

Yes. `allOf` members are resolved and merged before diffing, so a required field added deep inside a composed schema is still caught. `oneOf`/`anyOf` variant sets are compared and flagged as informational when a variant is added or removed, since whether that specific change is breaking depends on how your clients discriminate between variants.

Does it support Swagger 2.0?

No - this compares OpenAPI 3.x specs only. Swagger 2.0 (the older format) structures parameters and bodies differently, so applying the same rules to it would give wrong answers. Pasting a Swagger 2.0 document produces a clear error instead of a silently wrong diff.

Is my spec sent anywhere?

No. Parsing and comparison both run in your browser - your spec never leaves your device, unlike most other OpenAPI diff tools, which process the upload on their own server even when they say they don't store it. This is also true when you use the file upload/drag-and-drop option: the file is read locally, never transmitted.

What does it not check?

It compares `application/json` request and response bodies, which covers the large majority of REST APIs, but it does not evaluate other content types, response headers, descriptions, or examples. A `$ref` that points outside the document (a separate file or URL) is reported as unresolvable rather than silently skipped.

Can I paste YAML instead of JSON, or upload a file?

Yes to both. Each box accepts JSON or YAML independently and detects which one you used, so you can compare a JSON base spec against a YAML revision or vice versa. You can also drag a .json/.yaml/.yml file onto either box, or use its Upload file button - the file is read in your browser and never uploaded anywhere.

Does it support OpenAPI 3.1, not just 3.0?

It works against any document with an "openapi": "3.x" field and a "paths" object, which covers both 3.0 and 3.1 - including 3.1's array-form `type` (e.g. `["string", "null"]`) - and only rejects documents that look like Swagger 2.0 instead.

Can I export the diff as JSON, Markdown, or HTML?

Text (.txt), Markdown (.md), and JSON (.json) are all supported - pick one from the format dropdown next to Download report before you download. The JSON export includes the full list of findings plus per-severity counts, so it can be piped into another script (e.g. a CI check) if you need that.

Does it update as I type, or do I have to click Compare?

Both work: press Compare for an instant re-run, or just keep typing - after a brief pause it re-compares automatically. You can also press Ctrl+Enter (Cmd+Enter on Mac) from either box to compare immediately without waiting.

How we compare

FeatureOnline Tool StoreoasdiffSpecShield
Compares your spec entirely in your browser Yes - nothing leaves your device, including uploaded filesNo - processed on their serverNo - processed on their server, then discarded
Accepts OpenAPI 3.x as JSON or YAML, pasted or uploaded Yes - paste, drag-and-drop, or Upload filePaste or uploadPaste or upload
Groups results into breaking, safe, and other changes Yes, with click-to-filter badgesYes, via a dedicated Breaking Changes modeYes, the same three groups
Handles allOf/oneOf/anyOf schema composition Yes - allOf is merged before diffing; oneOf/anyOf variant changes are flaggedNot documented on the public diff pageNot documented
Flags security, deprecation, and server URL changes Yes, all three (shown as informational, not breaking/safe)Security and deprecation, via oasdiff's underlying engineNot documented
Free, with no account required YesYes, for the basic diffYes, for the basic diff

Good for a quick, private breaking-change check before you release a new API version - especially when the spec itself is sensitive and you'd rather not send it, or an uploaded file, to a third-party server.

Explore related tools

Embed this tool

Paste this on your own site — it stays free, and every file still stays in your visitor's browser, not yours or ours.