OpenAPI Catalog & Breaking Change Detector icon

Developer tools · Coming soon

OpenAPI Breaking Change Detector and Endpoint Catalog

Compare an old and a new OpenAPI spec and see possible breaking changes. Or turn a spec into a table with one row per endpoint. It works with OpenAPI 2.0, 3.0 and 3.1.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

apiAPOD
version1.0.0
openapiVersion3.0.0

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://api.apis.guru/v2/specs/apis.guru/2.2.0/openapi.json in Specification URLs or APIs.guru IDs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Turn public OpenAPI specs into an endpoint catalog, or compare two versions for possible breaking changes. Use public HTTPS JSON/YAML documents or APIs.guru IDs. No API key is needed to read the demo specs.

Who uses it

Integration teams

List the endpoints, auth types and tags you use from a vendor API.

API reviewers

Check a vendor's new API version before you change your client.

Platform teams

Build an API inventory from public specs or APIs.guru IDs.

Price

Prices will be shown after release.

Questions

Does no finding mean my clients are safe?

No. It is a structural check. It does not test real API calls.

Which OpenAPI versions work?

OpenAPI 2.0, 3.0 and 3.1, in JSON or YAML. Version 3.2 is not supported.

Is it a full spec validator?

No. It reads specs to list and compare them. It does not check every rule.

Do I need an API key?

No key is needed to read public specs.

Details

Step by step on Apify
  1. Keep mode as catalog.
  2. Keep the two small public spec URLs in the form.
  3. Start the Actor with the default 300-second timeout. If you set a maximum charge, keep it above $0.05.
  4. Open Endpoint catalog. The demo currently returns 8 operations from APIs.guru and NASA APOD.
  5. Export JSON or CSV. You can then replace the URLs with your public specs.
Use cases
  • List the operations used by your integration team.
  • Review a vendor's API version change before changing clients.
  • Build an API inventory with methods, tags, auth types and licences.
  • Feed possible breaks into a manual release review.
Tips for better results
  • Read each finding yourself. The tool flags possible breaks, not proven ones.
  • Use APIs.guru IDs to try it fast without finding spec URLs.
  • Keep specs self-contained. External $ref links are not downloaded.
Limits and good to know

No data calls are made to the API described by a spec. Requests fetch the documents and, when needed, the public directory only. This product is not endorsed by APIs.guru, NASA or API providers.

  • At most 20 catalog inputs, 10000 operations per document, 10000 findings per comparison and 1000 saved rows. Catalog output is capped at 64 KB per row and 10 MB per document; schema comparison at 300000 steps. Large output is a cap, not a promise that every provider has that many operations
  • 5 MB per JSON spec, 1 MB per YAML spec; 12 MB for the APIs.guru index; 30 MB total downloaded bytes per run. Three redirect hops. At most 64 requests including retries
  • Network and body timeout: 15 seconds per request, up to three tries for transient connection errors or 429/5xx responses. A long Retry-After stops the run. Total source work is capped at 180 seconds, even if the platform timeout is longer. A shorter platform timeout shortens work
  • Only internal JSON-pointer $ref references are supported. External, file and unresolved references fail explicitly. Circular reference chains fail; recursive schemas are compared within depth and visited-pair limits
  • OpenAPI 3.2 is not supported. This is not a full spec or JSON Schema validator. Webhooks, callbacks, server changes, response headers, descriptions and full JSON Schema keyword semantics are outside the diff rules. Dynamic references and complex schema equivalence are not evaluated. Absence of findings does not prove compatibility
  • Changed security requirements and selected schema constraints are conservatively marked breaking. Removing a parameter or response property is also conservative. Read each finding before taking action
  • ROW_LIMIT or CHARGE_LIMIT: SUCCEEDED, with status: partial. The saved rows are usable
  • Source, parse, deadline or cancellation failure: FAILED; summary is partial when earlier rows remain, otherwise error. NOT_FOUND is a source error, not an unchanged API

Troubleshooting

Code / symptomWhat to do
UNSAFE_URL, PRIVATE_ADDRESSUse a public HTTPS document without credentials, query strings or a private host.
NOT_FOUNDCheck the URL or APIs.guru ID/version. Old versions may no longer exist.
INVALID_DOCUMENT, INVALID_SPECCheck JSON/YAML syntax, required info fields and paths.
EXTERNAL_REF_UNSUPPORTED, INVALID_REFBundle your document with local references before running.
CYCLIC_REF, STRUCTURE_LIMIT, SCHEMA_DEPTH_LIMITSimplify deeply nested or cyclic reference chains.
BYTE_LIMIT, YAML_BYTE_LIMIT, OUTPUT_LIMIT, COMPARISON_LIMIT, OPERATION_LIMIT, CHANGE_LIMITSplit the job into smaller documents/pairs.
HTTP_TIMEOUT, DNS_TIMEOUT, SOURCE_UNAVAILABLECheck source availability. Run again later with a small input.
ROW_LIMITIncrease maxRows within the cap or split the catalog.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "api": "APOD",
  "version": "1.0.0",
  "openapiVersion": "3.0.0",
  "method": "GET",
  "path": "/apod",
  "operationId": null,
  "summary": "Returns images",
  "tags": ["request tag"],
  "authSchemes": [{"name": "api_key", "type": "apiKey"}],
  "securityAlternatives": [[{"name": "api_key", "scopes": []}]],
  "deprecated": false,
  "requestContentTypes": [],
  "responseContentTypes": ["application/json"],
  "parameters": [
    {"name": "date", "in": "query", "required": false, "type": "string"},
    {"name": "hd", "in": "query", "required": false, "type": "boolean"}
  ],
  "responseCodes": ["200", "400"],
  "kind": "endpoint",
  "provider": "OpenAPI document",
  "sourceUrl": "https://api.apis.guru/v2/specs/nasa.gov/apod/1.0.0/openapi.json",
  "sourceUpdatedAt": "Mon, 18 Aug 2025 11:00:32 GMT",
  "fetchedAt": "2026-10-13T15:03:22.269Z",
  "licence": "Apache 2.0",
  "licenceUrl": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
Data fields (27)
FieldTypeMeaning
kindstringendpoint or change
apistringAPI title; null if absent; credential-like text redacted
versionstringNew/current API version
openapiVersionstringOpenAPI or Swagger version; catalog only
oldVersionstringPrevious API version; diff only
methodstringHTTP method, uppercase
pathstringEndpoint path, at most 500 characters
operationIdstringOperation identifier; null if absent
summarystringOperation summary; null if absent; sanitized and at most 500 characters
tagsarrayOperation tags
authSchemesarrayEffective auth scheme names and types; no credential values
securityAlternativesarrayOR alternatives containing AND schemes and scopes; [] means no auth required
deprecatedbooleanTrue if marked deprecated
requestContentTypesarrayAccepted request media types
responseContentTypesarrayResponse media types
parametersarrayEffective parameter name, location, required, type; no examples/defaults
responseCodesarrayDeclared response status codes
changeTypestringDetected structural change rule
severitystringbreaking or non-breaking; conservative heuristic
detailsstringShort sanitized change explanation
providerstringOpenAPI document
sourceUrlstringFetched public spec URL; no query/credentials
oldSourceUrlstringPrevious spec URL; diff only
sourceUpdatedAtstringDirectory update time or HTTP Last-Modified; null if unknown
fetchedAtstringUTC fetch time ISO 8601
licencestringSpec info.license.name; null if unknown
licenceUrlstringSpec licence URL without query/credentials; null if unknown
Input settings (6)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Modemodestring"catalog"
Specification URLs or APIs.guru IDsspecsarray["https://api.apis.guru/v2/specs/apis.guru/2.2.0/openapi.json", "https://api.apis.guru/…
Old specificationoldSpecstring
New specificationnewSpecstring
Maximum result rowsmaxRowsinteger1000
Only breaking changesbreakingOnlybooleanfalse

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure