Get the FREE Ultimate OpenClaw Setup Guide →

api-documentation

npx machina-cli add skill troykelly/claude-skills/api-documentation --openclaw
Files (1)
SKILL.md
6.8 KB

API Documentation Enforcement

Overview

Ensures all API changes are reflected in Swagger/OpenAPI documentation. When documentation drift is detected, work pauses until documentation is synchronized.

Core principle: API documentation is a first-class artifact, not an afterthought. No API change ships without documentation.

Announce at start: "I'm using api-documentation to verify Swagger/OpenAPI sync."

When This Skill Triggers

This skill is triggered when ANY of these file patterns are modified:

PatternFrameworkTrigger Reason
**/routes/**/*.tsExpress/FastifyRoute definitions
**/controllers/**/*.tsNestJS/ExpressController endpoints
**/*.controller.tsNestJSController class
**/api/**/*.pyFastAPI/FlaskAPI endpoints
**/*_router.pyFastAPIRouter definitions
**/handlers/**/*.goGoHTTP handlers
**/schema*.tsTypeScriptSchema definitions
**/dto/**/*.tsNestJSData transfer objects
**/models/**/*.tsVariousAPI models

Documentation Locations

Check these locations for existing API documentation:

FileFormatStandard
openapi.yamlYAMLOpenAPI 3.x
openapi.jsonJSONOpenAPI 3.x
swagger.yamlYAMLSwagger 2.0
swagger.jsonJSONSwagger 2.0
docs/api.yamlYAMLOpenAPI 3.x
api/openapi.yamlYAMLOpenAPI 3.x

The Protocol

Step 1: Detect API Changes

# Check if current changes affect API
API_CHANGED=false

# Check common API file patterns
for pattern in "routes/" "controllers/" "api/" "handlers/" "*.controller.ts" "*_router.py"; do
  if git diff --name-only HEAD~1 | grep -q "$pattern"; then
    API_CHANGED=true
    break
  fi
done

# Check for schema/DTO changes
if git diff --name-only HEAD~1 | grep -qE "(schema|dto|model)"; then
  API_CHANGED=true
fi

echo "API Changed: $API_CHANGED"

Step 2: Find Documentation File

find_api_docs() {
  for file in openapi.yaml openapi.json swagger.yaml swagger.json \
              docs/api.yaml docs/openapi.yaml api/openapi.yaml; do
    if [ -f "$file" ]; then
      echo "$file"
      return 0
    fi
  done
  return 1
}

DOC_FILE=$(find_api_docs)
if [ -z "$DOC_FILE" ]; then
  echo "ERROR: No API documentation file found"
  echo "PAUSE: Trigger documentation-audit skill"
fi

Step 3: Verify Sync

Compare API code with documentation:

verify_api_sync() {
  local doc_file=$1

  # Extract endpoints from code
  CODE_ENDPOINTS=$(find . -name "*.ts" -path "*/routes/*" -exec grep -h "@(Get|Post|Put|Delete|Patch)" {} \; | \
    sed 's/.*@\(Get\|Post\|Put\|Delete\|Patch\)(\([^)]*\)).*/\1 \2/' | sort -u)

  # Extract endpoints from OpenAPI
  DOC_ENDPOINTS=$(yq '.paths | keys[]' "$doc_file" 2>/dev/null | sort -u)

  # Compare
  MISSING=$(comm -23 <(echo "$CODE_ENDPOINTS" | sort) <(echo "$DOC_ENDPOINTS" | sort))

  if [ -n "$MISSING" ]; then
    echo "DRIFT DETECTED: Endpoints in code but not in docs:"
    echo "$MISSING"
    return 1
  fi

  return 0
}

Step 4: Handle Drift

If documentation drift is detected:

## API Documentation Drift Detected

**Status:** PAUSED
**Reason:** API documentation is out of sync with code

### Missing from Documentation
- `POST /api/users` (found in `routes/users.ts:45`)
- `GET /api/users/:id/profile` (found in `routes/users.ts:67`)

### Action Required
1. Invoke `documentation-audit` skill
2. Update Swagger/OpenAPI documentation
3. Resume current work after sync complete

---
*api-documentation skill paused work*

Then invoke documentation-audit:

Use Skill tool: documentation-audit

Documentation Requirements

When updating API documentation, include:

Required Fields

FieldDescription
summaryShort description of endpoint
descriptionDetailed explanation
parametersAll path/query/header params
requestBodyRequest schema with examples
responsesAll response codes with schemas
tagsGrouping for organization
securityAuth requirements

Required Examples

Every endpoint must have:

  • Request example (for POST/PUT/PATCH)
  • Success response example
  • Error response example

Example OpenAPI Entry

/api/users:
  post:
    summary: Create a new user
    description: |
      Creates a new user account with the provided details.
      Requires admin authentication.
    tags:
      - Users
    security:
      - bearerAuth: []
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateUserRequest'
          example:
            email: user@example.com
            name: John Doe
            role: member
    responses:
      '201':
        description: User created successfully
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
            example:
              id: usr_123abc
              email: user@example.com
              name: John Doe
              role: member
              createdAt: '2025-01-02T10:30:00Z'
      '400':
        description: Invalid request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Error'
            example:
              code: VALIDATION_ERROR
              message: Email is required
      '401':
        description: Authentication required
      '403':
        description: Insufficient permissions

Validation

After updating documentation, validate:

# Validate OpenAPI spec
npx @apidevtools/swagger-cli validate openapi.yaml

# Or with yq for basic structure check
yq 'has("openapi") and has("paths") and has("info")' openapi.yaml

Checklist

Before resuming work:

  • API documentation file exists
  • All endpoints are documented
  • Request/response schemas defined
  • Examples provided for all operations
  • Security requirements documented
  • Documentation validates successfully
  • Changes committed to branch

Integration

This skill coordinates with:

SkillPurpose
documentation-auditFull documentation sync
issue-driven-developmentTriggered during implementation
comprehensive-reviewValidates documentation complete

When to Skip

This skill can be skipped when:

  • Changes are purely internal (no API surface change)
  • Changes are to test files only
  • Changes are to documentation itself
  • Project has no API (CLI tool, library, etc.)

Source

git clone https://github.com/troykelly/claude-skills/blob/main/skills/api-documentation/SKILL.mdView on GitHub

Overview

api-documentation ensures API code changes are reflected in Swagger/OpenAPI docs. It treats documentation as a first-class artifact and will pause work if drift is detected, triggering a documentation-audit until alignment is restored.

How This Skill Works

The skill watches for changes to API-related files (routes, controllers, schemas), then locates the OpenAPI/Swagger docs in common locations. It extracts and compares endpoints from code with those in the docs, pausing work on drift and prompting a documentation-audit to fix the mismatch.

When to Use It

  • A new route is added or an existing one is changed in routes/**/*.ts
  • A controller endpoint is updated in controllers/**/*.ts or **/*.controller.ts
  • Schema or DTO definitions change in schema*.ts, dto/**/*.ts, or models/**/*.ts
  • OpenAPI/Swagger files are updated or added (openapi.yaml/json, swagger.yaml/json, docs/api.yaml, api/openapi.yaml)
  • Code changes drift from current docs, triggering drift detection

Quick Start

  1. Step 1: Detect API changes in code (routes, controllers, schemas)
  2. Step 2: Locate a matching OpenAPI/Swagger file (openapi.yaml/json, swagger.yaml/json, docs/api.yaml, api/openapi.yaml)
  3. Step 3: Compare endpoints; if drift is found, pause work and trigger documentation-audit

Best Practices

  • Treat API docs as a source of truth; commit docs changes with code
  • Run a local doc-sync check after making API changes
  • Update OpenAPI/Swagger in the same PR as code changes
  • Use consistent endpoint extraction and comparison between code and docs
  • If drift is detected, pause work immediately and run documentation-audit

Example Use Cases

  • Added GET /users in routes/users.ts and updated openapi.yaml accordingly
  • Changed UserCreate DTO in dto/user.dto.ts and reflected changes in schema and openapi.json
  • Updated FastAPI router in api/users.py and added the endpoint to openapi.yaml
  • Drift detected after adding a new route; work paused until docs are fixed via documentation-audit
  • Documentation file missing for a new API; api-documentation paused and triggered documentation-audit

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers