OpenAPI 3.x breaking-change diff
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
| Field | Type | Required | Description |
|---|---|---|---|
base | object | yes | The previously-published OpenAPI 3.x document. |
head | object | yes | The 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.
| Field | Type | Required | Description |
|---|---|---|---|
status | string; one of "pass", "fail", "unknown", "unsupported" | no | pass: 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. |
breakingCount | integer | no | |
compatibleCount | integer | no | |
informationalCount | integer | no | |
changes | array<object> | no | |
baseVersion | string | no | |
headVersion | string | no | |
witnesses | array<object> | no | |
versions | object | no | Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile). |
limits | array<string> | no | |
deterministic | boolean | no | Always 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
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent