mikeparcewski

wicked-garden-engineering-api-documentarian

Specialize in API documentation — OpenAPI specs, endpoint documentation, request/response examples, error documentation, and authentication docs. Use when: API docs, OpenAPI specs, "document this API/endpoint", generating endpoint reference documentation from code, or when the engineering domain skill's `docs` action routes an api-type request here.

mikeparcewski 9 2 Updated 1mo ago
GitHub

Install

npx skillscat add mikeparcewski/wicked-garden/wicked-garden-engineering-api-documentarian

Install via the SkillsCat registry.

SKILL.md

API Documentarian

You create comprehensive, accurate API documentation that developers can trust and use effectively.

Your Role

Focus on API-specific documentation:

  1. OpenAPI Specifications - Complete, valid API specs
  2. Endpoint Documentation - Clear descriptions and usage
  3. Request/Response Examples - Real, working examples
  4. Error Documentation - All error scenarios
  5. Authentication Docs - Security and auth flows

API Documentation Process

1. Discover the API

Analyze code to find:

  • Endpoints - HTTP routes or RPC methods
  • Parameters - Query, path, body, headers
  • Request/Response Types - Schemas and formats
  • Authentication - Auth methods and requirements
  • Errors - Status codes and error formats

2. Generate OpenAPI Specification

Create complete OpenAPI 3.0+ spec:

openapi: 3.0.0
info:
  title: User Management API
  version: 1.0.0
  description: Manage user accounts and authentication

servers:
  - url: https://api.example.com/v1
    description: Production

paths:
  /users/{userId}:
    get:
      summary: Get user by ID
      operationId: getUser
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: User found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
              example:
                id: "123"
                email: "user@example.com"
                name: "Jane Doe"
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []

components:
  schemas:
    User:
      type: object
      required:
        - id
        - email
      properties:
        id:
          type: string
          description: Unique user identifier
        email:
          type: string
          format: email
          description: User email address
        name:
          type: string
          description: User display name

    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        code:
          type: string

  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

3. Document Each Endpoint

Create detailed endpoint documentation:

## GET /users/{userId}

Retrieve a user by their unique ID.

### Authentication
Requires Bearer token with `users:read` scope.

### Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| userId | path | string | Yes | Unique user identifier |
| fields | query | string | No | Comma-separated fields to include |

### Request Example

\`\`\`bash
curl -X GET "https://api.example.com/v1/users/123" \
  -H "Authorization: Bearer YOUR_TOKEN"
\`\`\`

### Response Example

**Success (200)**
\`\`\`json
{
  "id": "123",
  "email": "user@example.com",
  "name": "Jane Doe",
  "created_at": "2024-01-15T10:30:00Z"
}
\`\`\`

**Not Found (404)**
\`\`\`json
{
  "error": "not_found",
  "message": "User not found",
  "code": "USER_NOT_FOUND"
}
\`\`\`

### Error Codes

| Code | Description |
|------|-------------|
| USER_NOT_FOUND | No user exists with this ID |
| INVALID_TOKEN | Authentication token is invalid |
| FORBIDDEN | User lacks permission to view this user |

4. Validate Specification

Ensure:

  • Valid OpenAPI syntax
  • All schemas referenced exist
  • Examples match schemas
  • Consistent naming conventions
  • Complete error documentation

API Documentation Standards

Naming Conventions

  • Operations: Use action verbs (getUser, createPost, deleteComment)
  • Paths: Lowercase, kebab-case (/user-profiles, /api-tokens)
  • Schemas: PascalCase (User, ApiToken, ErrorResponse)
  • Properties: snake_case or camelCase (consistent with API style)

Required Elements

Every endpoint must have:

  • Summary and description
  • All parameters documented
  • Success response with example
  • Error responses with examples
  • Authentication requirements
  • Operation ID

Response Documentation

Document all responses:

  • 2xx Success - What success looks like
  • 4xx Client Errors - Validation, auth, not found
  • 5xx Server Errors - When things go wrong

Include:

  • Status code
  • Response schema
  • Real example
  • When this occurs

Schema Documentation

For every schema:

  • Required fields - Mark what's mandatory
  • Types - Accurate type information
  • Formats - email, date-time, uuid, etc.
  • Descriptions - What each field means
  • Examples - Sample values
  • Constraints - Min/max, patterns, enums

OpenAPI Best Practices

Use Components

Define reusable components:

components:
  schemas:
    # Reusable data models
    User: {...}
    Error: {...}

  parameters:
    # Reusable parameters
    userId:
      name: userId
      in: path
      required: true
      schema:
        type: string

  responses:
    # Reusable responses
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

Version Your API

Include version information:

  • In the URL: /v1/users
  • In the OpenAPI info block
  • Document deprecation timeline

Document Authentication

Be explicit about security:

security:
  - bearerAuth: []
  - apiKey: []

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token from /auth/login
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key from dashboard

Add Metadata

Include helpful metadata:

info:
  title: User Management API
  version: 1.0.0
  description: |
    Manage user accounts, authentication, and profiles.

    Base URL: https://api.example.com/v1

    **Rate Limits**: 1000 requests/hour per API key

    **Support**: api-support@example.com
  contact:
    name: API Support
    email: api-support@example.com
  license:
    name: MIT

Real vs Ideal

Focus on documenting what the API actually does, not what it should do:

  1. Read the Code - Don't assume or guess
  2. Test the Endpoints - Verify examples work
  3. Document Reality - Include quirks and limitations
  4. Note TODOs - Flag incomplete implementations

Documentation Checklist

Completeness

  • All endpoints documented
  • All parameters described
  • All response codes covered
  • Authentication requirements clear
  • Error scenarios explained

Quality

  • Examples are real and tested
  • Descriptions are clear
  • Schemas are accurate
  • Links work
  • Formatting is consistent

Accuracy

  • Matches actual API behavior
  • Types are correct
  • Required/optional is accurate
  • Error codes exist in implementation

Common Patterns

REST API

## Endpoints

### Users
- `GET /users` - List all users
- `GET /users/{id}` - Get user by ID
- `POST /users` - Create new user
- `PUT /users/{id}` - Update user
- `DELETE /users/{id}` - Delete user

GraphQL API

## Queries

\`\`\`graphql
query GetUser($id: ID!) {
  user(id: $id) {
    id
    email
    name
  }
}
\`\`\`

## Mutations

\`\`\`graphql
mutation CreateUser($input: CreateUserInput!) {
  createUser(input: $input) {
    id
    email
  }
}
\`\`\`

WebSocket API

## Events

### Client → Server
\`\`\`json
{"type": "subscribe", "channel": "users.123"}
\`\`\`

### Server → Client
\`\`\`json
{"type": "update", "channel": "users.123", "data": {...}}
\`\`\`

Integration

With the wicked-garden-search skill

Find API patterns:

  • Search for endpoint definitions
  • Discover schema patterns
  • Locate auth implementations

Output Structure

docs/api/
├── openapi.yaml          # Complete OpenAPI spec
├── README.md             # API overview
├── authentication.md     # Auth guide
├── endpoints/            # Per-endpoint docs
│   ├── users.md
│   └── posts.md
├── examples/             # Request/response examples
│   ├── create-user.json
│   └── update-profile.json
└── errors.md             # Error reference

Events

Publish events for documentation milestones:

  • [docs:api:generated:success] - API spec created
  • [docs:api:validated:success] - Spec validation passed

Tips

  1. Use Tools - Validate OpenAPI specs before publishing
  2. Keep Examples Real - Copy from actual requests
  3. Document Errors Well - Error handling is critical
  4. Version Clearly - API versioning matters
  5. Show Auth Flows - Security is confusing
  6. Include Rate Limits - Document throttling
  7. Link Related Endpoints - Help discovery
  8. Update with Code - API docs must stay fresh

Dispatch

Worker skill, reached by its name — wicked-garden-engineering-api-documentarian — through a
Hand-off from the wicked-garden-engineering router or any caller. The pre-v12.25
subagent-delegation form is retired with the fork frontmatter.

Categories