{"uid":"cap_eiYKPXDTFRMD41oCIPniP","slug":"breakra-openapi-breaking-change-analyzer-027f5da1","name":"Breakra OpenAPI Breaking-Change Analyzer","description":"Compare two OpenAPI 3.0 contracts and get every breaking change, the evidence and a recommended fix. One HTTP call, $0.02 USDC on Base via x402. Errors are free.","url":"https://breakra.dev/api/analyze?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","required":["after","before"],"properties":{"after":{"type":"object","description":"New contract: an inline OpenAPI 3.0.0–3.0.4 JSON document."},"before":{"type":"object","description":"Previous contract: an inline OpenAPI 3.0.0–3.0.4 JSON document. URLs, YAML, OpenAPI 3.1 and Swagger 2.0 are not accepted."}}},"responseSchema":{"type":"object","required":["status","analysis_id","engine_version","rule_set_version","spec_versions","compatibility","summary","changes","limitations","metadata"],"properties":{"status":{"enum":["success"],"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["id","rule","kind","compatibility","direction","operation","location","reason","recommended_action","evidence"],"properties":{"id":{"type":"string","description":"change-001, change-002, … in output order."},"kind":{"type":"string"},"rule":{"type":"string","description":"Stable rule id, `<direction>.<kind>`, e.g. request.required_parameter_added."},"reason":{"type":"string"},"evidence":{"type":"object","required":["path","before","after"],"properties":{"path":{"type":"array","items":{"type":"string"}},"after":{"nullable":true,"description":"Value after (null when removed)."},"before":{"nullable":true,"description":"Value before (null when added). Over 1,000 characters is truncated."},"truncated":{"type":"boolean"}}},"location":{"type":"object","properties":{"in":{"type":"string"},"name":{"type":"string"},"field":{"type":"string","description":"Dot path into the schema; [] means array items."},"status":{"type":"string"},"keyword":{"type":"string"},"media_type":{"type":"string"}}},"direction":{"enum":["request","response","operation","security","document"],"type":"string"},"operation":{"type":"object","nullable":true,"required":["method","path"],"properties":{"path":{"type":"string"},"method":{"type":"string"}}},"compatibility":{"enum":["breaking","potentially_breaking","unknown","compatible","non_contract"],"type":"string","description":"breaking: existing callers will fail (rule set 0.1.0: a removed operation). potentially_breaking: some callers may fail (e.g. a new required input, a removed or newly optional response field, a new response enum value). unknown: not classified; review by hand. compatible: additive and safe. non_contract: docs or metadata only."},"recommended_action":{"type":"string"}}},"maxItems":500,"description":"Most severe first. At most 500 are listed; see metadata.changes_omitted."},"summary":{"type":"object","required":["total_changes","breaking","potentially_breaking","unknown","compatible","non_contract"],"properties":{"unknown":{"type":"integer"},"breaking":{"type":"integer"},"compatible":{"type":"integer"},"non_contract":{"type":"integer"},"total_changes":{"type":"integer"},"potentially_breaking":{"type":"integer"}},"description":"Counts over all changes, including any not listed."},"metadata":{"type":"object","required":["input_hashes","changes_omitted","duration_ms"],"properties":{"duration_ms":{"type":"integer","description":"The only non-deterministic field."},"input_hashes":{"type":"object","required":["before","after"],"properties":{"after":{"type":"string"},"before":{"type":"string"}}},"changes_omitted":{"type":"integer"}}},"analysis_id":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","description":"sha256 of engine version, rule-set version and both canonical input hashes. The same inputs always give the same id and the same result."},"limitations":{"type":"array","items":{"type":"string"},"description":"What was not analysed, such as external $refs (never fetched) or omitted changes."},"compatibility":{"enum":["breaking","potentially_breaking","unknown","compatible","non_contract"],"type":"string","description":"breaking: existing callers will fail (rule set 0.1.0: a removed operation). potentially_breaking: some callers may fail (e.g. a new required input, a removed or newly optional response field, a new response enum value). unknown: not classified; review by hand. compatible: additive and safe. non_contract: docs or metadata only."},"spec_versions":{"type":"object","required":["before","after"],"properties":{"after":{"type":"string"},"before":{"type":"string"}}},"engine_version":{"type":"string"},"rule_set_version":{"type":"string"}}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.02","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.02/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.02","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.02","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_7NiS5V0zBLlDppEoEp0Z8","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.02","costPer":"request","priority":0,"asset":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Compares two OpenAPI 3.0 JSON contracts and returns every breaking change, its evidence, and a recommended fix","exampleAgentPrompt":"Can you check whether my API update introduces any breaking changes? Here's the old OpenAPI spec and the new one — compare them and tell me exactly what broke, why, and how to fix it.","exampleUseCases":[{"title":"Pre-deploy API safety check","prompt":"Before I deploy this new version of my payments API, compare the old OpenAPI spec and the new one and tell me if anything will break existing callers — list every breaking or potentially breaking change and what I should do about it."},{"title":"Code review gate for API PRs","prompt":"I'm reviewing a pull request that changes our OpenAPI contract. Can you run a breaking-change check between the base branch spec and the PR spec and give me a summary of what changed, what's breaking, and what's safe?"},{"title":"Library upgrade compatibility audit","prompt":"We upgraded a third-party API and got a new OpenAPI spec from the vendor. Compare it against the version we're currently integrated with and flag anything that could break our client — especially removed operations or new required fields."}],"resultDescription":"Returns a structured JSON object containing a list of changes, each with a stable rule ID (e.g. 'request.required_parameter_added'), a compatibility classification (breaking, potentially_breaking, compatible, unknown, or non_contract), the affected operation (HTTP method + path), the location within the schema, the reason for the classification, evidence showing the before/after values at the relevant path, and a recommended action. Also includes summary statistics, spec versions, engine/rule-set versions, and an analysis ID.","failureModes":["Input specs are not valid OpenAPI 3.0.0–3.0.4 JSON (YAML, Swagger 2.0, OpenAPI 3.1, or URLs are rejected)","Missing required 'before' or 'after' fields returns an error (free of charge)","Malformed JSON in either contract causes a parse error","Very large specs may result in truncated evidence fields (over 1,000 characters truncated)","Payment failure or insufficient USDC balance blocks the request"],"whenToPreferThis":"Choose Breakra when you need a single-call, structured, machine-readable breakdown of OpenAPI 3.0 contract differences with per-change rule IDs, compatibility classifications, evidence, and fix recommendations — especially in CI/CD pipelines or coding-agent workflows where you need deterministic output rather than a prose diff. Prefer this over generic diff tools when you need semantic API-contract reasoning, not just textual line diffs.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-10T12:30:06.636Z","isFirstParty":false,"canonicalSlug":"breakra-openapi-breaking-change-analyzer-027f5da1"}