OpenAPI 3.x breaking-change diff

$0.005 USDC per call · Developer and security · POST /api/v1/openapi-breaking-change · Id openapi-breaking-change

Diffs two OpenAPI 3.x documents and classifies every delta as breaking, compatible or informational. Breaking: removed path/operation/response status/media type, type/format/pattern tightening, enum value removed, required property added, request body became required, maximum lowered or minimum raised, nullable removed. Compatible: additions (new paths, optional params, enum values, response statuses, media types), relaxed constraints, operationId renames. Informational: operations marked deprecated. Returns an array of changes with JSON-pointer paths and a count per severity, so CI can `fail` on breaking > 0.

What you get

Review time on API PRs collapses once a bot comments 'required field X added — this breaks clients built against commit Y.' This is the reference for that bot.

Call it

Send the JSON body below to https://agents.writerslogic.com/api/v1/openapi-breaking-change. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.

curl -i -X POST https://agents.writerslogic.com/api/v1/openapi-breaking-change \
  -H 'content-type: application/json' \
  -d '{"base":{"openapi":"3.1.0","paths":{"/pets":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}}}}}}}}}},"head":{"openapi":"3.1.0","paths":{"/pets":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}}}}}}}}}'

Input

FieldTypeRequiredDescription
baseobjectyesThe previously-published OpenAPI 3.x document.
headobjectyesThe proposed OpenAPI 3.x document.

Example request body

{
  "base": {
    "openapi": "3.1.0",
    "paths": {
      "/pets": {
        "get": {
          "responses": {
            "200": {
              "content": {
                "application/json": {
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "integer"
                        },
                        "name": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "head": {
    "openapi": "3.1.0",
    "paths": {
      "/pets": {
        "get": {
          "responses": {
            "200": {
              "content": {
                "application/json": {
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Result

The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.

FieldTypeRequiredDescription
statusstring; one of "pass", "fail", "unknown", "unsupported"nopass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass.
breakingCountintegerno
compatibleCountintegerno
informationalCountintegerno
changesarray<object>no
baseVersionstringno
headVersionstringno
witnessesarray<object>no
versionsobjectnoEvery semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile).
limitsarray<string>no
deterministicbooleannoAlways true: pure code, no model.

Pay and connect

Available through: x402 (USDC on Base), MCP. MCP clients reach it through the code-preflight-kit package.

Machine-readable