{
  "title": "API example coverage checker",
  "human_url": "https://happytails.ai/en/text-tools/api-example-coverage-checker/",
  "agent_url": "https://happytails.ai/agents/en/text-tools/api-example-coverage-checker/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/text-tools/api-example-coverage-checker.md",
  "content": "API example coverage checker\nFind API endpoints that have no request example in your Markdown documentation, and examples that call endpoints the contract does not list.\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 example coverage checker\nPaste your Markdown pages, starting each one with a header line such as ==> docs/projects.md <==.\nAdd your OpenAPI file after a line such as ==> openapi.json <==, or rely on METHOD /path headings in the pages.\nSet a base path such as /v1 if example URLs include one that the contract paths leave out.\nRun the check and download the JSON report or the CSV coverage table.\nUseful next steps\nCurl to code\nYAML validator\nMarkdown Anchor Checker\nWhat it does\nThe checker reads every fenced code block in the pages and collects request examples: curl commands, raw HTTP request lines such as GET /v1/orders HTTP/1.1, fetch calls and client calls such as axios.get, requests.get or client.post. Each example is matched to an endpoint by method and path, and each endpoint gets its example count.\nHow matching works\nHosts, query strings and leading variables such as ${BASE_URL}, $BASE_URL or {{baseUrl}} are removed from example URLs. The base path from the setting, or else from the OpenAPI servers or Swagger basePath value, is removed before matching. A base path typed without a leading slash, such as v1, is read as /v1, a full URL is read as its path, and / removes nothing. Path parameters such as {projectId}, :projectId or <projectId> match any one path segment, and so do example placeholders such as ${projectId} or $PROJECT_ID. When several endpoints match, the most specific one gets the example, so /projects/archived counts for GET /projects/archived and not for GET /projects/{projectId}. curl options are read like a shell reads them, so an option value such as -o /dev/null is never taken for the URL. A curl command uses the method given with -X or --request, otherwise HEAD with -I or --head, GET with -G or --get, PUT with -T or --upload-file, POST when it sends data with -d, --data, --json or -F, and GET in every other case. A fetch call is a GET unless its options set a method within 300 characters after the URL and before the next fetch call.\nLimits\nWithout an OpenAPI file, endpoints come from headings that contain METHOD /path. Examples outside fenced code blocks, in other languages or built from string concatenation are not recognised. The check does not run the examples or validate their bodies. 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": "Curl to code",
      "url": "https://happytails.ai/en/developer-tools/curl-to-code/"
    },
    {
      "name": "YAML validator",
      "url": "https://happytails.ai/en/developer-tools/yaml-validator/"
    },
    {
      "name": "Markdown Anchor Checker",
      "url": "https://happytails.ai/en/text-tools/markdown-anchor-checker/"
    }
  ],
  "tool": {
    "id": "api-example-coverage-checker",
    "category": "text-tools",
    "built": true,
    "requirements": "Up to 2,000,000 characters in total, 2,000 files, 2,000 endpoints and 5,000 examples. Everything runs in your browser and nothing is uploaded. Downloads: JSON report and CSV coverage table.",
    "implementation": {
      "fields": [
        {
          "key": "basePath",
          "label": "Base path to remove from example URLs",
          "value": "",
          "type": "text",
          "help": "Optional. For example /v1 when examples call /v1/orders but the contract lists /orders. A missing leading slash is added, a full URL is read as its path and / removes nothing. Left empty, the OpenAPI servers or basePath value is used. Up to 2,000 characters.",
          "maxLength": 2000
        },
        {
          "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_EXAMPLE_COVERAGE_CHECKER",
      "note": "Examples are matched on your device and nothing is uploaded. Up to 2,000,000 characters, 2,000 endpoints and 5,000 examples.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "Markdown pages and optional OpenAPI file",
        "placeholder": "==> openapi.json <==\n{...}\n==> docs/api.md <==\n```bash\ncurl https://api.example.com/v1/orders\n```",
        "help": "Start each file with a header line such as ==> docs/api.md <==. Examples are read from fenced code blocks. 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 example coverage checker\n\n- Human page: https://happytails.ai/en/text-tools/api-example-coverage-checker/\n- Markdown: https://happytails.ai/en/text-tools/api-example-coverage-checker.md\n- Structured JSON: https://happytails.ai/agents/en/text-tools/api-example-coverage-checker/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `api-example-coverage-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\nExamples are matched on your device and nothing is uploaded. Up to 2,000,000 characters, 2,000 endpoints and 5,000 examples.\n\n### Inputs and settings\n\nText input: Markdown pages and optional OpenAPI file.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n````text\n==> openapi.json <==\n{...}\n==> docs/api.md <==\n```bash\ncurl https://api.example.com/v1/orders\n```\n````\n\nStart each file with a header line such as ==> docs/api.md <==. Examples are read from fenced code blocks. Up to 1,000,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `basePath` | Base path to remove from example URLs | text | \"\" |  |\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, 2,000 endpoints and 5,000 examples. Everything runs in your browser and nothing is uploaded. Downloads: JSON report and CSV coverage table.\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-example-coverage-checker\",\n  \"category\": \"text-tools\",\n  \"built\": true,\n  \"requirements\": \"Up to 2,000,000 characters in total, 2,000 files, 2,000 endpoints and 5,000 examples. Everything runs in your browser and nothing is uploaded. Downloads: JSON report and CSV coverage table.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"basePath\",\n        \"label\": \"Base path to remove from example URLs\",\n        \"value\": \"\",\n        \"type\": \"text\",\n        \"help\": \"Optional. For example /v1 when examples call /v1/orders but the contract lists /orders. A missing leading slash is added, a full URL is read as its path and / removes nothing. Left empty, the OpenAPI servers or basePath value is used. Up to 2,000 characters.\",\n        \"maxLength\": 2000\n      },\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_EXAMPLE_COVERAGE_CHECKER\",\n    \"note\": \"Examples are matched on your device and nothing is uploaded. Up to 2,000,000 characters, 2,000 endpoints and 5,000 examples.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Markdown pages and optional OpenAPI file\",\n      \"placeholder\": \"==> openapi.json <==\\n{...}\\n==> docs/api.md <==\\n```bash\\ncurl https://api.example.com/v1/orders\\n```\",\n      \"help\": \"Start each file with a header line such as ==> docs/api.md <==. Examples are read from fenced code blocks. 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\nFind API endpoints that have no request example in your Markdown documentation, and examples that call endpoints the contract does not list.\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 example coverage checker\n\n1. Paste your Markdown pages, starting each one with a header line such as ==> docs/projects.md <==.\n2. Add your OpenAPI file after a line such as ==> openapi.json <==, or rely on METHOD /path headings in the pages.\n3. Set a base path such as /v1 if example URLs include one that the contract paths leave out.\n4. Run the check and download the JSON report or the CSV coverage table.\n\n## Useful next steps\n\n- [Curl to code](https://happytails.ai/en/developer-tools/curl-to-code/) ([Markdown](https://happytails.ai/en/developer-tools/curl-to-code.md))\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 Anchor Checker](https://happytails.ai/en/text-tools/markdown-anchor-checker/) ([Markdown](https://happytails.ai/en/text-tools/markdown-anchor-checker.md))\n\n## What it does\n\nThe checker reads every fenced code block in the pages and collects request examples: curl commands, raw HTTP request lines such as GET /v1/orders HTTP/1.1, fetch calls and client calls such as axios.get, requests.get or client.post. Each example is matched to an endpoint by method and path, and each endpoint gets its example count.\n\n### How matching works\n\nHosts, query strings and leading variables such as ${BASE\\_URL}, $BASE\\_URL or {{baseUrl}} are removed from example URLs. The base path from the setting, or else from the OpenAPI servers or Swagger basePath value, is removed before matching. A base path typed without a leading slash, such as v1, is read as /v1, a full URL is read as its path, and / removes nothing. Path parameters such as {projectId}, :projectId or <projectId> match any one path segment, and so do example placeholders such as ${projectId} or $PROJECT\\_ID. When several endpoints match, the most specific one gets the example, so /projects/archived counts for GET /projects/archived and not for GET /projects/{projectId}. curl options are read like a shell reads them, so an option value such as -o /dev/null is never taken for the URL. A curl command uses the method given with -X or --request, otherwise HEAD with -I or --head, GET with -G or --get, PUT with -T or --upload-file, POST when it sends data with -d, --data, --json or -F, and GET in every other case. A fetch call is a GET unless its options set a method within 300 characters after the URL and before the next fetch call.\n\n### Limits\n\nWithout an OpenAPI file, endpoints come from headings that contain METHOD /path. Examples outside fenced code blocks, in other languages or built from string concatenation are not recognised. The check does not run the examples or validate their bodies. 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"
}