How it will work: 3 steps
- 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.
- 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.jsonin Specification URLs or APIs.guru IDs. Each start is one run. - 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
- Keep
modeascatalog. - Keep the two small public spec URLs in the form.
- Start the Actor with the default 300-second timeout. If you set a maximum charge, keep it above $0.05.
- Open Endpoint catalog. The demo currently returns 8 operations from APIs.guru and NASA APOD.
- 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
$refreferences 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_LIMITorCHARGE_LIMIT:SUCCEEDED, withstatus: partial. The saved rows are usable- Source, parse, deadline or cancellation failure:
FAILED; summary ispartialwhen earlier rows remain, otherwiseerror.NOT_FOUNDis a source error, not an unchanged API
Troubleshooting
| Code / symptom | What to do |
|---|---|
UNSAFE_URL, PRIVATE_ADDRESS | Use a public HTTPS document without credentials, query strings or a private host. |
NOT_FOUND | Check the URL or APIs.guru ID/version. Old versions may no longer exist. |
INVALID_DOCUMENT, INVALID_SPEC | Check JSON/YAML syntax, required info fields and paths. |
EXTERNAL_REF_UNSUPPORTED, INVALID_REF | Bundle your document with local references before running. |
CYCLIC_REF, STRUCTURE_LIMIT, SCHEMA_DEPTH_LIMIT | Simplify deeply nested or cyclic reference chains. |
BYTE_LIMIT, YAML_BYTE_LIMIT, OUTPUT_LIMIT, COMPARISON_LIMIT, OPERATION_LIMIT, CHANGE_LIMIT | Split the job into smaller documents/pairs. |
HTTP_TIMEOUT, DNS_TIMEOUT, SOURCE_UNAVAILABLE | Check source availability. Run again later with a small input. |
ROW_LIMIT | Increase 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.
{
"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)
| Field | Type | Meaning |
|---|---|---|
kind | string | endpoint or change |
api | string | API title; null if absent; credential-like text redacted |
version | string | New/current API version |
openapiVersion | string | OpenAPI or Swagger version; catalog only |
oldVersion | string | Previous API version; diff only |
method | string | HTTP method, uppercase |
path | string | Endpoint path, at most 500 characters |
operationId | string | Operation identifier; null if absent |
summary | string | Operation summary; null if absent; sanitized and at most 500 characters |
tags | array | Operation tags |
authSchemes | array | Effective auth scheme names and types; no credential values |
securityAlternatives | array | OR alternatives containing AND schemes and scopes; [] means no auth required |
deprecated | boolean | True if marked deprecated |
requestContentTypes | array | Accepted request media types |
responseContentTypes | array | Response media types |
parameters | array | Effective parameter name, location, required, type; no examples/defaults |
responseCodes | array | Declared response status codes |
changeType | string | Detected structural change rule |
severity | string | breaking or non-breaking; conservative heuristic |
details | string | Short sanitized change explanation |
provider | string | OpenAPI document |
sourceUrl | string | Fetched public spec URL; no query/credentials |
oldSourceUrl | string | Previous spec URL; diff only |
sourceUpdatedAt | string | Directory update time or HTTP Last-Modified; null if unknown |
fetchedAt | string | UTC fetch time ISO 8601 |
licence | string | Spec info.license.name; null if unknown |
licenceUrl | string | Spec 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.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode | mode | string | "catalog" |
| Specification URLs or APIs.guru IDs | specs | array | ["https://api.apis.guru/v2/specs/apis.guru/2.2.0/openapi.json", "https://api.apis.guru/… |
| Old specification | oldSpec | string | |
| New specification | newSpec | string | |
| Maximum result rows | maxRows | integer | 1000 |
| Only breaking changes | breakingOnly | boolean | false |