{
  "title": "API documentation drift checker",
  "human_url": "https://happytails.ai/en/text-tools/api-documentation-drift-checker/",
  "agent_url": "https://happytails.ai/agents/en/text-tools/api-documentation-drift-checker/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/text-tools/api-documentation-drift-checker.md",
  "content": "API documentation drift checker\nCompare the parameters your Markdown API reference documents with an OpenAPI or Swagger contract and find missing, extra and mismatched parameters and undocumented operations.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use API documentation drift checker\nPaste your OpenAPI or Swagger file after a header line such as ==> openapi.yaml <==.\nPaste the Markdown reference pages after lines such as ==> docs/orders.md <==.\nWrite each operation heading as METHOD /path, such as ## GET /orders/{id}, with a parameter table or list under it.\nRun the check and download the JSON report or the CSV list of differences.\nUseful next steps\nYAML validator\nMarkdown Table Builder\nJSON diff\nDocumentation convention\nAn operation is documented by a Markdown heading that contains an HTTP method and a path, such as ## GET /orders/{orderId}. Path parameter names do not have to match, so /orders/{id} documents /orders/{orderId}. Under that heading, list parameters in a table with a Name, Parameter, Param, Field or Property column and optional In (or Location or Where) and Required (or Req or Mandatory) columns. In the Required column, yes, true, required, y, x or a check mark (✓, ✔, ✔️, ✅, ☑️, :heavy_check_mark:, :white_check_mark: or :ballot_box_with_check:) means required, and anything else means optional. List items written as `name` (query, required) or `name` (body, optional) also work. Tables and lists under a sub-heading that starts with Response, Responses, Return, Returns, Error or Errors, also after Example or Sample, describe the response and are skipped. The operation section ends at the next heading of the same or a higher level.\nWhat is compared\nThe contract is read as OpenAPI 3 or Swagger 2 in YAML or JSON. Path item and operation parameters are combined, local $ref references are resolved, and request body schema properties become body parameters, together with the properties and required lists of every allOf part. For each operation the check reports parameters the docs miss, parameters the docs add, a different location, a different letter case and a different required flag. Exact names are paired first, so a different letter case is only reported when no exact name is left, and locations are compared without letter case, so formdata matches formData. Documented operations that the contract does not contain are listed separately. The CSV has one row per difference, so an undocumented operation is one row and its parameters are not listed again as missing.\nLimits\nThe first .yaml, .yml or .json file in path order is used as the contract. External $ref targets are listed in the report but never fetched, so parameters behind them are not compared. oneOf and anyOf alternatives in a request body are not compared. Types, formats, enums and descriptions are not compared. Files under node_modules, .git, dist, build and other build folders are skipped unless you turn that off, and you can add your own exclude patterns in gitignore syntax.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "YAML validator",
      "url": "https://happytails.ai/en/developer-tools/yaml-validator/"
    },
    {
      "name": "Markdown Table Builder",
      "url": "https://happytails.ai/en/text-tools/markdown-table-builder/"
    },
    {
      "name": "JSON diff",
      "url": "https://happytails.ai/en/developer-tools/json-diff/"
    }
  ],
  "tool": {
    "id": "api-documentation-drift-checker",
    "category": "text-tools",
    "built": true,
    "requirements": "Up to 2,000,000 characters in total, 2,000 files, 5,000 operations and 500 parameters per operation. Everything runs in your browser and nothing is uploaded. Downloads: JSON report and CSV list of differences.",
    "implementation": {
      "fields": [
        {
          "key": "defaultExcludes",
          "label": "Skip node_modules, .git, dist and other build folders",
          "value": true,
          "type": "checkbox"
        },
        {
          "key": "exclude",
          "label": "Extra exclude patterns",
          "value": "",
          "type": "textarea",
          "help": "Optional. Paths to leave out, one gitignore pattern per line, such as drafts/ or *.draft.md. Up to 20,000 characters.",
          "maxLength": 20000
        }
      ],
      "registrationFamily": "project-snapshot-docs",
      "inputMaxLength": 2000000,
      "inputErrorCode": "PROJECT_SNAPSHOT_DOCS_TOO_LONG_API_DOCUMENTATION_DRIFT_CHECKER",
      "note": "The contract and documents are compared on your device and nothing is uploaded. Up to 2,000,000 characters, 5,000 operations and 500 parameters per operation.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "OpenAPI file and Markdown pages",
        "placeholder": "==> openapi.yaml <==\nopenapi: 3.0.3\n...\n==> docs/api.md <==\n## GET /orders\n...",
        "help": "Start each file with a header line such as ==> openapi.yaml <== and write operation headings as METHOD /path. Up to 1,000,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# API documentation drift checker\n\n- Human page: https://happytails.ai/en/text-tools/api-documentation-drift-checker/\n- Markdown: https://happytails.ai/en/text-tools/api-documentation-drift-checker.md\n- Structured JSON: https://happytails.ai/agents/en/text-tools/api-documentation-drift-checker/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `api-documentation-drift-checker` |\n| Category | text-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nThe contract and documents are compared on your device and nothing is uploaded. Up to 2,000,000 characters, 5,000 operations and 500 parameters per operation.\n\n### Inputs and settings\n\nText input: OpenAPI file and Markdown pages.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\n==> openapi.yaml <==\nopenapi: 3.0.3\n...\n==> docs/api.md <==\n## GET /orders\n...\n```\n\nStart each file with a header line such as ==> openapi.yaml <== and write operation headings as METHOD /path. Up to 1,000,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `defaultExcludes` | Skip node_modules, .git, dist and other build folders | checkbox | true |  |\n| `exclude` | Extra exclude patterns | textarea | \"\" |  |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nUp to 2,000,000 characters in total, 2,000 files, 5,000 operations and 500 parameters per operation. Everything runs in your browser and nothing is uploaded. Downloads: JSON report and CSV list of differences.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"api-documentation-drift-checker\",\n  \"category\": \"text-tools\",\n  \"built\": true,\n  \"requirements\": \"Up to 2,000,000 characters in total, 2,000 files, 5,000 operations and 500 parameters per operation. Everything runs in your browser and nothing is uploaded. Downloads: JSON report and CSV list of differences.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"defaultExcludes\",\n        \"label\": \"Skip node_modules, .git, dist and other build folders\",\n        \"value\": true,\n        \"type\": \"checkbox\"\n      },\n      {\n        \"key\": \"exclude\",\n        \"label\": \"Extra exclude patterns\",\n        \"value\": \"\",\n        \"type\": \"textarea\",\n        \"help\": \"Optional. Paths to leave out, one gitignore pattern per line, such as drafts/ or *.draft.md. Up to 20,000 characters.\",\n        \"maxLength\": 20000\n      }\n    ],\n    \"registrationFamily\": \"project-snapshot-docs\",\n    \"inputMaxLength\": 2000000,\n    \"inputErrorCode\": \"PROJECT_SNAPSHOT_DOCS_TOO_LONG_API_DOCUMENTATION_DRIFT_CHECKER\",\n    \"note\": \"The contract and documents are compared on your device and nothing is uploaded. Up to 2,000,000 characters, 5,000 operations and 500 parameters per operation.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"OpenAPI file and Markdown pages\",\n      \"placeholder\": \"==> openapi.yaml <==\\nopenapi: 3.0.3\\n...\\n==> docs/api.md <==\\n## GET /orders\\n...\",\n      \"help\": \"Start each file with a header line such as ==> openapi.yaml <== and write operation headings as METHOD /path. Up to 1,000,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nCompare the parameters your Markdown API reference documents with an OpenAPI or Swagger contract and find missing, extra and mismatched parameters and undocumented operations.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use API documentation drift checker\n\n1. Paste your OpenAPI or Swagger file after a header line such as ==> openapi.yaml <==.\n2. Paste the Markdown reference pages after lines such as ==> docs/orders.md <==.\n3. Write each operation heading as METHOD /path, such as ## GET /orders/{id}, with a parameter table or list under it.\n4. Run the check and download the JSON report or the CSV list of differences.\n\n## Useful next steps\n\n- [YAML validator](https://happytails.ai/en/developer-tools/yaml-validator/) ([Markdown](https://happytails.ai/en/developer-tools/yaml-validator.md))\n\n- [Markdown Table Builder](https://happytails.ai/en/text-tools/markdown-table-builder/) ([Markdown](https://happytails.ai/en/text-tools/markdown-table-builder.md))\n\n- [JSON diff](https://happytails.ai/en/developer-tools/json-diff/) ([Markdown](https://happytails.ai/en/developer-tools/json-diff.md))\n\n## Documentation convention\n\nAn operation is documented by a Markdown heading that contains an HTTP method and a path, such as ## GET /orders/{orderId}. Path parameter names do not have to match, so /orders/{id} documents /orders/{orderId}. Under that heading, list parameters in a table with a Name, Parameter, Param, Field or Property column and optional In (or Location or Where) and Required (or Req or Mandatory) columns. In the Required column, yes, true, required, y, x or a check mark (✓, ✔, ✔️, ✅, ☑️, :heavy\\_check\\_mark:, :white\\_check\\_mark: or :ballot\\_box\\_with\\_check:) means required, and anything else means optional. List items written as `name` (query, required) or `name` (body, optional) also work. Tables and lists under a sub-heading that starts with Response, Responses, Return, Returns, Error or Errors, also after Example or Sample, describe the response and are skipped. The operation section ends at the next heading of the same or a higher level.\n\n### What is compared\n\nThe contract is read as OpenAPI 3 or Swagger 2 in YAML or JSON. Path item and operation parameters are combined, local $ref references are resolved, and request body schema properties become body parameters, together with the properties and required lists of every allOf part. For each operation the check reports parameters the docs miss, parameters the docs add, a different location, a different letter case and a different required flag. Exact names are paired first, so a different letter case is only reported when no exact name is left, and locations are compared without letter case, so formdata matches formData. Documented operations that the contract does not contain are listed separately. The CSV has one row per difference, so an undocumented operation is one row and its parameters are not listed again as missing.\n\n### Limits\n\nThe first .yaml, .yml or .json file in path order is used as the contract. External $ref targets are listed in the report but never fetched, so parameters behind them are not compared. oneOf and anyOf alternatives in a request body are not compared. Types, formats, enums and descriptions are not compared. Files under node\\_modules, .git, dist, build and other build folders are skipped unless you turn that off, and you can add your own exclude patterns in gitignore syntax.\n"
}