Back to skills
SKILL.md
Engineering Api Documentarian
ASecuritySpecialize 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.
- 9 stars
- 0 votes
- 0 copies
- 1 view
- Added October 18, 2026
Works with
Security analysis
100/100npx -y skills add mikeparcewski/wicked-garden --skill engineering-api-documentarian --agent claude-codeAre you the author of Engineering Api Documentarian?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mikeparcewski-engineering-api-documentarian)---
name: wicked-garden-engineering-api-documentarian
description: |
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.
metadata:
role: worker
---
# 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:
```yaml
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:
```markdown
## 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:
```yaml
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:
```yaml
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:
```yaml
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
```markdown
## 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
```markdown
## 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
```markdown
## 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.
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.