{
  "openapi": "3.1.1",
  "info": {
    "title": "API Explorer of Explorers API",
    "version": "1.0.0",
    "summary": "Search 2,500+ public APIs or summarise any OpenAPI spec: servers, auth, endpoints, changes.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://apiexplorerofexplorers.usefulweb.site"
    }
  ],
  "paths": {
    "/api/v1/calculate": {
      "post": {
        "operationId": "calculate",
        "summary": "Search 2,500+ public APIs or summarise any OpenAPI spec: servers, auth, endpoints, changes.",
        "description": "Search the APIs.guru OpenAPI directory for public APIs (titles, versions, categories, spec links), or paste/link an OpenAPI 3.x or Swagger 2 document (JSON or YAML) to get its servers, authentication schemes and scopes, a full endpoint table with auth per operation, tags, example coverage, schema count and documentation issues. Specs fetched by URL are snapshotted so the next run shows what changed (breaking or not).\n\nMethodology:\n- Directory search: provider names from https://api.apis.guru/v2/providers.json are ranked (exact, prefix, word, substring match); details for the top 5 providers come from https://api.apis.guru/v2/{provider}.json (title, version, categories, OpenAPI version, last update and spec links).\n- Spec summary: servers (OpenAPI servers or Swagger schemes+host+basePath), securitySchemes/securityDefinitions with flows and scope counts, effective security per operation (operation-level overrides the global requirement; [] means public), tags with operation counts and component/definition schema count.\n- Example coverage counts operations whose parameters, request bodies or responses carry example/examples (including examples on referenced schemas).\n- Change detection uses the same direction-aware rules as the OpenAPI Diff Explorer; URL specs are fingerprinted with SHA-256 of their canonical JSON and the snapshot is kept under SHA-256(URL), so the next run reports changes since the last snapshot.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "api_explorer_of_explorers",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiExplorerOfExplorersInput"
              },
              "examples": {
                "example1": {
                  "summary": "Summarise a pasted spec (Parcel Tracking API)",
                  "value": {
                    "mode": "spec",
                    "specText": "openapi: 3.0.3\ninfo:\n  title: Parcel Tracking API\n  version: 2.3.0\n  description: Track parcels, manage webhooks and fetch proof of delivery.\nservers:\n  - url: https://api.parcels.example.com/v2\n  - url: http://sandbox.parcels.example.com/v2\nsecurity:\n  - oauth: [parcels.read]\ntags:\n  - name: parcels\n    description: Parcel lookup and history\n  - name: webhooks\n    description: Event subscriptions\npaths:\n  /parcels/{trackingNumber}:\n    get:\n      operationId: getParcel\n      summary: Get a parcel by tracking number\n      tags: [parcels]\n      parameters:\n        - name: trackingNumber\n          in: path\n          required: true\n          schema: {type: string}\n          example: 1Z999AA10123456784\n      responses:\n        '200':\n          description: The parcel\n          content:\n            application/json:\n              schema: {$ref: '#/components/schemas/Parcel'}\n              example: {trackingNumber: 1Z999AA10123456784, status: in_transit}\n        '404': {description: Unknown tracking number}\n  /parcels/{trackingNumber}/events:\n    get:\n      operationId: listParcelEvents\n      summary: Scan events for a parcel\n      tags: [parcels]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n        - {name: limit, in: query, schema: {type: integer, maximum: 100}}\n      responses:\n        '200':\n          description: Events, newest first\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Event'}\n  /parcels/{trackingNumber}/pod:\n    get:\n      operationId: getProofOfDelivery\n      summary: Proof of delivery (signature image)\n      tags: [parcels]\n      security:\n        - oauth: [parcels.read, pod.read]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n      responses:\n        '200':\n          description: PNG image\n          content:\n            image/png: {}\n  /webhooks:\n    get:\n      operationId: listWebhooks\n      summary: List webhook subscriptions\n      tags: [webhooks]\n      responses:\n        '200':\n          description: Subscriptions\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Webhook'}\n    post:\n      operationId: createWebhook\n      summary: Subscribe to parcel events\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema: {$ref: '#/components/schemas/Webhook'}\n            example: {url: 'https://shop.example.com/hooks/parcels', events: [delivered, exception]}\n      responses:\n        '201': {description: Created}\n  /webhooks/{id}:\n    delete:\n      summary: Delete a webhook subscription\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: Deleted}\n  /health:\n    get:\n      operationId: health\n      summary: Liveness check\n      security: []\n      responses:\n        '200': {description: OK}\ncomponents:\n  securitySchemes:\n    oauth:\n      type: oauth2\n      flows:\n        clientCredentials:\n          tokenUrl: https://auth.parcels.example.com/oauth/token\n          scopes:\n            parcels.read: Read parcels\n            pod.read: Read proof of delivery\n            webhooks.write: Manage webhooks\n    apiKey:\n      type: apiKey\n      in: header\n      name: X-Api-Key\n  schemas:\n    Parcel:\n      type: object\n      required: [trackingNumber, status]\n      properties:\n        trackingNumber: {type: string}\n        status: {type: string, enum: [label_created, in_transit, delivered, exception]}\n        eta: {type: string, format: date-time}\n    Event:\n      type: object\n      properties:\n        at: {type: string, format: date-time}\n        location: {type: string}\n        code: {type: string}\n    Webhook:\n      type: object\n      required: [url, events]\n      properties:\n        id: {type: string}\n        url: {type: string, format: uri}\n        events:\n          type: array\n          items: {type: string}\n"
                  }
                },
                "example2": {
                  "summary": "Summarise and compare with the previous version",
                  "value": {
                    "mode": "spec",
                    "specText": "openapi: 3.0.3\ninfo:\n  title: Parcel Tracking API\n  version: 2.3.0\n  description: Track parcels, manage webhooks and fetch proof of delivery.\nservers:\n  - url: https://api.parcels.example.com/v2\n  - url: http://sandbox.parcels.example.com/v2\nsecurity:\n  - oauth: [parcels.read]\ntags:\n  - name: parcels\n    description: Parcel lookup and history\n  - name: webhooks\n    description: Event subscriptions\npaths:\n  /parcels/{trackingNumber}:\n    get:\n      operationId: getParcel\n      summary: Get a parcel by tracking number\n      tags: [parcels]\n      parameters:\n        - name: trackingNumber\n          in: path\n          required: true\n          schema: {type: string}\n          example: 1Z999AA10123456784\n      responses:\n        '200':\n          description: The parcel\n          content:\n            application/json:\n              schema: {$ref: '#/components/schemas/Parcel'}\n              example: {trackingNumber: 1Z999AA10123456784, status: in_transit}\n        '404': {description: Unknown tracking number}\n  /parcels/{trackingNumber}/events:\n    get:\n      operationId: listParcelEvents\n      summary: Scan events for a parcel\n      tags: [parcels]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n        - {name: limit, in: query, schema: {type: integer, maximum: 100}}\n      responses:\n        '200':\n          description: Events, newest first\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Event'}\n  /parcels/{trackingNumber}/pod:\n    get:\n      operationId: getProofOfDelivery\n      summary: Proof of delivery (signature image)\n      tags: [parcels]\n      security:\n        - oauth: [parcels.read, pod.read]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n      responses:\n        '200':\n          description: PNG image\n          content:\n            image/png: {}\n  /webhooks:\n    get:\n      operationId: listWebhooks\n      summary: List webhook subscriptions\n      tags: [webhooks]\n      responses:\n        '200':\n          description: Subscriptions\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Webhook'}\n    post:\n      operationId: createWebhook\n      summary: Subscribe to parcel events\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema: {$ref: '#/components/schemas/Webhook'}\n            example: {url: 'https://shop.example.com/hooks/parcels', events: [delivered, exception]}\n      responses:\n        '201': {description: Created}\n  /webhooks/{id}:\n    delete:\n      summary: Delete a webhook subscription\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: Deleted}\n  /health:\n    get:\n      operationId: health\n      summary: Liveness check\n      security: []\n      responses:\n        '200': {description: OK}\ncomponents:\n  securitySchemes:\n    oauth:\n      type: oauth2\n      flows:\n        clientCredentials:\n          tokenUrl: https://auth.parcels.example.com/oauth/token\n          scopes:\n            parcels.read: Read parcels\n            pod.read: Read proof of delivery\n            webhooks.write: Manage webhooks\n    apiKey:\n      type: apiKey\n      in: header\n      name: X-Api-Key\n  schemas:\n    Parcel:\n      type: object\n      required: [trackingNumber, status]\n      properties:\n        trackingNumber: {type: string}\n        status: {type: string, enum: [label_created, in_transit, delivered, exception]}\n        eta: {type: string, format: date-time}\n    Event:\n      type: object\n      properties:\n        at: {type: string, format: date-time}\n        location: {type: string}\n        code: {type: string}\n    Webhook:\n      type: object\n      required: [url, events]\n      properties:\n        id: {type: string}\n        url: {type: string, format: uri}\n        events:\n          type: array\n          items: {type: string}\n",
                    "previousSpec": "openapi: 3.0.3\ninfo:\n  title: Parcel Tracking API\n  version: 2.2.0\n  description: Track parcels, manage webhooks and fetch proof of delivery.\nservers:\n  - url: https://api.parcels.example.com/v2\n  - url: http://sandbox.parcels.example.com/v2\nsecurity:\n  - oauth: [parcels.read]\ntags:\n  - name: parcels\n    description: Parcel lookup and history\n  - name: webhooks\n    description: Event subscriptions\npaths:\n  /parcels/{trackingNumber}:\n    get:\n      operationId: getParcel\n      summary: Get a parcel by tracking number\n      tags: [parcels]\n      parameters:\n        - name: trackingNumber\n          in: path\n          required: true\n          schema: {type: string}\n          example: 1Z999AA10123456784\n      responses:\n        '200':\n          description: The parcel\n          content:\n            application/json:\n              schema: {$ref: '#/components/schemas/Parcel'}\n              example: {trackingNumber: 1Z999AA10123456784, status: in_transit}\n        '404': {description: Unknown tracking number}\n  /parcels/{trackingNumber}/events:\n    get:\n      operationId: listParcelEvents\n      summary: Scan events for a parcel\n      tags: [parcels]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n        - {name: limit, in: query, schema: {type: integer, maximum: 500}}\n      responses:\n        '200':\n          description: Events, newest first\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Event'}\n  /webhooks:\n    get:\n      operationId: listWebhooks\n      summary: List webhook subscriptions\n      tags: [webhooks]\n      responses:\n        '200':\n          description: Subscriptions\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Webhook'}\n    post:\n      operationId: createWebhook\n      summary: Subscribe to parcel events\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema: {$ref: '#/components/schemas/Webhook'}\n            example: {url: 'https://shop.example.com/hooks/parcels', events: [delivered, exception]}\n      responses:\n        '201': {description: Created}\n  /webhooks/{id}:\n    delete:\n      summary: Delete a webhook subscription\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: Deleted}\n  /health:\n    get:\n      operationId: health\n      summary: Liveness check\n      security: []\n      responses:\n        '200': {description: OK}\ncomponents:\n  securitySchemes:\n    oauth:\n      type: oauth2\n      flows:\n        clientCredentials:\n          tokenUrl: https://auth.parcels.example.com/oauth/token\n          scopes:\n            parcels.read: Read parcels\n            pod.read: Read proof of delivery\n            webhooks.write: Manage webhooks\n    apiKey:\n      type: apiKey\n      in: header\n      name: X-Api-Key\n  schemas:\n    Parcel:\n      type: object\n      required: [trackingNumber, status]\n      properties:\n        trackingNumber: {type: string}\n        status: {type: string, enum: [label_created, in_transit, delivered, exception, returned]}\n        eta: {type: string, format: date-time}\n        weightGrams: {type: integer}\n    Event:\n      type: object\n      properties:\n        at: {type: string, format: date-time}\n        location: {type: string}\n        code: {type: string}\n    Webhook:\n      type: object\n      required: [url, events]\n      properties:\n        id: {type: string}\n        url: {type: string, format: uri}\n        events:\n          type: array\n          items: {type: string}\n"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiExplorerOfExplorersResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tool": {
      "get": {
        "operationId": "getToolDefinition",
        "summary": "Inputs, output schema and examples for this tool",
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ApiExplorerOfExplorersInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "What do you want to do?",
            "type": "string",
            "enum": [
              "spec",
              "search"
            ],
            "default": "spec"
          },
          "query": {
            "title": "Search for an API / provider",
            "description": "Search mode: matched against APIs.guru provider names (e.g. github.com, googleapis.com).",
            "type": "string",
            "maxLength": 100
          },
          "specText": {
            "title": "OpenAPI / Swagger document (JSON or YAML)",
            "type": "string",
            "maxLength": 4000000
          },
          "specUrl": {
            "title": "Or: URL of the spec",
            "description": "Public URL of a JSON/YAML spec (e.g. a specUrl from search results). Max 4 MiB.",
            "type": "string",
            "format": "uri"
          },
          "previousSpec": {
            "title": "Optional: earlier version to compare with",
            "description": "Paste an older version of the same spec to list breaking and non-breaking changes.",
            "type": "string",
            "maxLength": 4000000
          },
          "remember": {
            "title": "Keep a snapshot of URL specs to show changes next time",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "ApiExplorerOfExplorersResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "mode",
              "directory",
              "spec",
              "changes"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "spec",
                  "search"
                ]
              },
              "directory": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "query",
                  "totalProviders",
                  "matchedProviders",
                  "apis"
                ],
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "totalProviders": {
                    "type": "integer"
                  },
                  "matchedProviders": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "apis": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "id",
                        "provider",
                        "title",
                        "version",
                        "description",
                        "categories",
                        "openapiVer",
                        "updated",
                        "specUrl",
                        "specYamlUrl",
                        "originUrl"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "provider": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "categories": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "openapiVer": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "updated": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "specUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "specYamlUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "originUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              },
              "spec": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "title",
                  "version",
                  "specVersion",
                  "description",
                  "servers",
                  "securitySchemes",
                  "globalSecurity",
                  "operations",
                  "tags",
                  "schemaCount",
                  "exampleCoverage",
                  "issues",
                  "fingerprint"
                ],
                "properties": {
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "specVersion": {
                    "type": "string"
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "servers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "securitySchemes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "type",
                        "detail",
                        "scopes"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "detail": {
                          "type": "string"
                        },
                        "scopes": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "globalSecurity": {
                    "type": "string"
                  },
                  "operations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "method",
                        "path",
                        "summary",
                        "operationId",
                        "tags",
                        "deprecated",
                        "auth",
                        "requestExample",
                        "responseExample",
                        "responses"
                      ],
                      "properties": {
                        "method": {
                          "type": "string"
                        },
                        "path": {
                          "type": "string"
                        },
                        "summary": {
                          "type": "string"
                        },
                        "operationId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "deprecated": {
                          "type": "boolean"
                        },
                        "auth": {
                          "type": "string"
                        },
                        "requestExample": {
                          "type": "boolean"
                        },
                        "responseExample": {
                          "type": "boolean"
                        },
                        "responses": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "description",
                        "operations"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "operations": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "schemaCount": {
                    "type": "integer"
                  },
                  "exampleCoverage": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "operations",
                      "withAnyExample",
                      "withRequestExample",
                      "withResponseExample",
                      "percent"
                    ],
                    "properties": {
                      "operations": {
                        "type": "integer"
                      },
                      "withAnyExample": {
                        "type": "integer"
                      },
                      "withRequestExample": {
                        "type": "integer"
                      },
                      "withResponseExample": {
                        "type": "integer"
                      },
                      "percent": {
                        "type": "number"
                      }
                    }
                  },
                  "issues": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "fingerprint": {
                    "type": "string"
                  }
                }
              },
              "changes": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "comparedWith",
                  "previousVersion",
                  "unchanged",
                  "counts",
                  "items",
                  "history"
                ],
                "properties": {
                  "comparedWith": {
                    "type": "string"
                  },
                  "previousVersion": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "unchanged": {
                    "type": "boolean"
                  },
                  "counts": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "breaking",
                      "potentiallyBreaking",
                      "nonBreaking"
                    ],
                    "properties": {
                      "breaking": {
                        "type": "integer"
                      },
                      "potentiallyBreaking": {
                        "type": "integer"
                      },
                      "nonBreaking": {
                        "type": "integer"
                      }
                    }
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "severity",
                        "location",
                        "change",
                        "detail"
                      ],
                      "properties": {
                        "severity": {
                          "type": "string"
                        },
                        "location": {
                          "type": "string"
                        },
                        "change": {
                          "type": "string"
                        },
                        "detail": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "at",
                        "version",
                        "fingerprint",
                        "breaking",
                        "total"
                      ],
                      "properties": {
                        "at": {
                          "type": "string"
                        },
                        "version": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "fingerprint": {
                          "type": "string"
                        },
                        "breaking": {
                          "type": "integer"
                        },
                        "total": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}