API breaking change classification rules.
Replay ParityDiff classification rules for request narrowing, response changes, deprecation, and uncertain evidence. Inspect policy inputs and recorded rule IDs.
Which recorded rules can I inspect?
request.enum_removed: The new request schema rejects a value the previous schema accepted. Locate callers that send the removed value; the rule does not choose a replacement.request.now_required: An existing caller can omit a field that the revised request requires. Supply a value based on application intent and validate the complete request.response.removed: The revised response no longer promises a property used by existing consumers. Inspect field reads and missing-value behavior; a cast alone is not a runtime check.response.now_optional_or_nullable: The revised response can omit a previously required property or allow null where it was excluded. Existing consumers need to handle the wider set of responses.request.removed_unknown_strictness: A removed request field can be tolerated or rejected by the server. Without an established unknown-field policy, ParityDiff leaves the classification ambiguous.
Policy inputs matter. A removed request field remains ambiguous when the server's unknown-field policy is unknown. The inspector classifies detector evidence, not arbitrary uploaded contracts or repository impact.
Online OpenAPI and JSON Schema compatibility checks
Use this free API compatibility checker to understand how a contract change affects existing integrations. Replay a captured OpenAPI finding from OpenAI or Sentry, inspect its classification rule, or compare a pair of JSON Schemas. The examples run without an account or repository access. Each result separates contract evidence from the question of whether your application uses the affected operation.
Request narrowing
The revised request schema must accept the inputs existing callers could send. Increasing a minimum, decreasing a maximum, or tightening a string constraint can reject previously valid requests. Check the affected field and the acceptance direction.
Enum value removal
Removing a request enum value leaves callers using that value outside the new contract. Inspect where the value is selected before choosing an alternative; the specification finding does not invent a replacement for your application.
Recorded rule:
request.enum_removedRequired request field addition
Adding a required property, or making an optional request field required, can reject older payloads that omit it. A compatible migration needs an appropriate application value, not simply a placeholder added to satisfy the schema.
Response widening
Existing consumers must handle the outputs allowed by the revised response. A field becoming optional or nullable, a new enum value, or a broader type can invalidate assumptions in parsing, branching, and typed response handling.
Recorded rule:
response.now_optional_or_nullable
The JSON Schema comparison checks directional acceptance and reports equivalent, different, or undetermined. A validated counterexample demonstrates a specific difference; unsupported constructs or missing proof remain undetermined. OpenAPI detector findings have their own recorded classification rules. Schema comparison is not a complete OpenAPI upload diff or proof of repository impact. Use public or illustrative schemas, inspect the evidence, and run your own CI before merging.
Explore API specification history ยท Contract and repository coverage
API compatibility guides and tools
- oasdiff and API code impact analysis answer different questions.
- Detect breaking API changes in a GitHub workflow.
- Why a TypeScript build can pass after an API changes.
- OpenAI OpenAPI breaking changes: a captured response change.
- Sentry OpenAPI breaking changes: removed replay query values.
- Inspect classification rules interactively
- Compare JSON Schemas
- Plan your business evaluation
Rule reference
request.enum_removed: Request enum value removedrequest.now_required: Request property becomes requiredresponse.removed: Response property removedresponse.now_optional_or_nullable: Response property becomes optional or nullablerequest.removed_unknown_strictness: Request property removed, server strictness unknown