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
- 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.
- Press Compare, keep typing (it re-runs automatically after a brief pause), or press Ctrl+Enter to compare instantly.
- 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.
- 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
| Feature | Online Tool Store | oasdiff | SpecShield |
|---|---|---|---|
| Compares your spec entirely in your browser | Yes - nothing leaves your device, including uploaded files | No - processed on their server | No - processed on their server, then discarded |
| Accepts OpenAPI 3.x as JSON or YAML, pasted or uploaded | Yes - paste, drag-and-drop, or Upload file | Paste or upload | Paste or upload |
| Groups results into breaking, safe, and other changes | Yes, with click-to-filter badges | Yes, via a dedicated Breaking Changes mode | Yes, the same three groups |
| Handles allOf/oneOf/anyOf schema composition | Yes - allOf is merged before diffing; oneOf/anyOf variant changes are flagged | Not documented on the public diff page | Not documented |
| Flags security, deprecation, and server URL changes | Yes, all three (shown as informational, not breaking/safe) | Security and deprecation, via oasdiff's underlying engine | Not documented |
| Free, with no account required | Yes | Yes, for the basic diff | Yes, 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.