Install
$ agentstack add skill-patricio0312rev-skillset-api-docs-generator ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
API Docs Generator
Create comprehensive API documentation with OpenAPI specifications and interactive documentation.
Core Workflow
- Analyze API endpoints: Review routes, methods, parameters
- Define OpenAPI spec: Create specification in YAML/JSON
- Add schemas: Define request/response models
- Include examples: Add realistic example values
- Generate documentation: Deploy interactive docs
- Create SDK: Optional client library generation
OpenAPI Specification Structure
# openapi.yaml
openapi: 3.1.0
info:
title: My API
version: 1.0.0
description: |
API description with **Markdown** support.
## Authentication
All endpoints require Bearer token authentication.
contact:
name: API Support
email: api@example.com
url: https://docs.example.com
license:
name: MIT
url: https://opensource.org/licenses/MIT
servers:
- url: https://api.example.com/v1
description: Production
- url: https://staging-api.example.com/v1
description: Staging
- url: http://localhost:3000/v1
description: Development
tags:
- name: Users
description: User management endpoints
- name: Products
description: Product catalog endpoints
- name: Orders
description: Order processing endpoints
paths:
# Endpoints defined here
components:
# Reusable schemas, security, etc.
Path Definitions
Basic CRUD Endpoints
paths:
/users:
get:
tags:
- Users
summary: List all users
description: Retrieve a paginated list of users
operationId: listUsers
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/LimitParam'
- name: role
in: query
description: Filter by user role
schema:
type: string
enum: [admin, user, guest]
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'
example:
data:
- id: "usr_123"
email: "john@example.com"
name: "John Doe"
role: "admin"
createdAt: "2024-01-15T10:30:00Z"
pagination:
page: 1
limit: 20
total: 150
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
post:
tags:
- Users
summary: Create a new user
description: Create a new user account
operationId: createUser
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
example:
email: "newuser@example.com"
name: "New User"
password: "securePassword123"
role: "user"
responses:
'201':
description: User created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
$ref: '#/components/responses/BadRequest'
'409':
description: User already exists
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "USER_EXISTS"
message: "A user with this email already exists"
'422':
$ref: '#/components/responses/ValidationError'
/users/{userId}:
parameters:
- $ref: '#/components/parameters/UserId'
get:
tags:
- Users
summary: Get user by ID
description: Retrieve a specific user by their ID
operationId: getUserById
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- Users
summary: Update user
description: Update an existing user's information
operationId: updateUser
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserRequest'
responses:
'200':
description: User updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
delete:
tags:
- Users
summary: Delete user
description: Permanently delete a user
operationId: deleteUser
responses:
'204':
description: User deleted successfully
'404':
$ref: '#/components/responses/NotFound'
Component Schemas
Data Models
components:
schemas:
# Base User Schema
User:
type: object
properties:
id:
type: string
format: uuid
description: Unique user identifier
example: "usr_123abc"
readOnly: true
email:
type: string
format: email
description: User's email address
example: "john@example.com"
name:
type: string
minLength: 1
maxLength: 100
description: User's full name
example: "John Doe"
role:
$ref: '#/components/schemas/UserRole'
avatar:
type: string
format: uri
nullable: true
description: URL to user's avatar image
example: "https://cdn.example.com/avatars/123.jpg"
createdAt:
type: string
format: date-time
description: Account creation timestamp
readOnly: true
updatedAt:
type: string
format: date-time
description: Last update timestamp
readOnly: true
required:
- id
- email
- name
- role
- createdAt
UserRole:
type: string
enum:
- admin
- user
- guest
description: User's role in the system
example: "user"
# Request Schemas
CreateUserRequest:
type: object
properties:
email:
type: string
format: email
name:
type: string
minLength: 1
maxLength: 100
password:
type: string
format: password
minLength: 8
description: Must contain at least one uppercase, one lowercase, and one number
role:
$ref: '#/components/schemas/UserRole'
required:
- email
- name
- password
UpdateUserRequest:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 100
role:
$ref: '#/components/schemas/UserRole'
avatar:
type: string
format: uri
nullable: true
minProperties: 1
# List Response
UserList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/User'
pagination:
$ref: '#/components/schemas/Pagination'
Pagination:
type: object
properties:
page:
type: integer
minimum: 1
example: 1
limit:
type: integer
minimum: 1
maximum: 100
example: 20
total:
type: integer
minimum: 0
example: 150
hasMore:
type: boolean
example: true
# Error Schemas
Error:
type: object
properties:
code:
type: string
description: Machine-readable error code
example: "VALIDATION_ERROR"
message:
type: string
description: Human-readable error message
example: "The request body is invalid"
details:
type: array
items:
$ref: '#/components/schemas/ErrorDetail'
required:
- code
- message
ErrorDetail:
type: object
properties:
field:
type: string
description: The field that caused the error
example: "email"
message:
type: string
description: Description of the validation error
example: "Must be a valid email address"
Parameters and Responses
components:
parameters:
UserId:
name: userId
in: path
required: true
description: Unique user identifier
schema:
type: string
format: uuid
example: "usr_123abc"
PageParam:
name: page
in: query
description: Page number for pagination
schema:
type: integer
minimum: 1
default: 1
example: 1
LimitParam:
name: limit
in: query
description: Number of items per page
schema:
type: integer
minimum: 1
maximum: 100
default: 20
example: 20
SortParam:
name: sort
in: query
description: Sort field and direction
schema:
type: string
pattern: '^[a-zA-Z]+:(asc|desc)$'
example: "createdAt:desc"
responses:
BadRequest:
description: Bad request - invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "BAD_REQUEST"
message: "Invalid request format"
Unauthorized:
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "UNAUTHORIZED"
message: "Authentication token is missing or invalid"
Forbidden:
description: Permission denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "FORBIDDEN"
message: "You don't have permission to access this resource"
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "NOT_FOUND"
message: "The requested resource was not found"
ValidationError:
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "VALIDATION_ERROR"
message: "Request validation failed"
details:
- field: "email"
message: "Must be a valid email address"
- field: "password"
message: "Must be at least 8 characters"
InternalError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: "INTERNAL_ERROR"
message: "An unexpected error occurred"
Security Definitions
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: |
JWT token obtained from the /auth/login endpoint.
Example: `Authorization: Bearer eyJhbGciOiJIUzI1...`
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: API key for server-to-server communication
OAuth2:
type: oauth2
description: OAuth 2.0 authentication
flows:
authorizationCode:
authorizationUrl: https://auth.example.com/oauth/authorize
tokenUrl: https://auth.example.com/oauth/token
scopes:
read:users: Read user information
write:users: Create and modify users
admin: Full administrative access
# Apply security globally
security:
- BearerAuth: []
# Or per-endpoint
paths:
/public/health:
get:
security: [] # No auth required
summary: Health check
responses:
'200':
description: Service is healthy
Express/Node.js Integration
Generate from Code with express-openapi
// src/docs/openapi.ts
import { OpenAPIV3_1 } from 'openapi-types';
export const openApiDocument: OpenAPIV3_1.Document = {
openapi: '3.1.0',
info: {
title: 'My API',
version: '1.0.0',
description: 'API documentation',
},
servers: [
{ url: 'http://localhost:3000', description: 'Development' },
],
paths: {},
components: {
schemas: {},
securitySchemes: {
BearerAuth: {
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT',
},
},
},
};
Swagger UI Express
// src/docs/swagger.ts
import swaggerUi from 'swagger-ui-express';
import YAML from 'yamljs';
import path from 'path';
import { Express } from 'express';
export function setupSwagger(app: Express) {
const swaggerDocument = YAML.load(
path.join(__dirname, '../../openapi.yaml')
);
const options: swaggerUi.SwaggerUiOptions = {
explorer: true,
customSiteTitle: 'API Documentation',
customCss: '.swagger-ui .topbar { display: none }',
swaggerOptions: {
persistAuthorization: true,
displayRequestDuration: true,
filter: true,
showExtensions: true,
},
};
app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument, options));
app.get('/openapi.json', (req, res) => res.json(swaggerDocument));
}
Zod to OpenAPI
// src/schemas/user.ts
import { z } from 'zod';
import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi';
extendZodWithOpenApi(z);
export const UserSchema = z.object({
id: z.string().uuid().openapi({ example: 'usr_123abc' }),
email: z.string().email().openapi({ example: 'john@example.com' }),
name: z.string().min(1).max(100).openapi({ example: 'John Doe' }),
role: z.enum(['admin', 'user', 'guest']).openapi({ example: 'user' }),
createdAt: z.string().datetime(),
}).openapi('User');
export const CreateUserSchema = z.object({
email: z.string().email(),
name: z.string().min(1).max(100),
password: z.string().min(8),
role: z.enum(['admin', 'user', 'guest']).optional().default('user'),
}).openapi('CreateUserRequest');
// src/docs/generator.ts
import {
OpenAPIRegistry,
OpenApiGeneratorV31,
} from '@asteasolutions/zod-to-openapi';
import { UserSchema, CreateUserSchema } from '../schemas/user';
const registry = new OpenAPIRegistry();
// Register schemas
registry.register('User', UserSchema);
registry.register('CreateUserRequest', CreateUserSchema);
// Register endpoints
registry.registerPath({
method: 'get',
path: '/users',
tags: ['Users'],
summary: 'List all users',
responses: {
200: {
description: 'List of users',
content: {
'application/json': {
schema: z.array(UserSchema),
},
},
},
},
});
registry.registerPath({
method: 'post',
path: '/users',
tags: ['Users'],
summary: 'Create a user',
request: {
body: {
content: {
'application/json': {
schema: CreateUserSchema,
},
},
},
},
responses: {
201: {
description: 'User created',
content: {
'application/json': {
schema: UserSchema,
},
},
},
},
});
// Generate OpenAPI documen
…
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [patricio0312rev](https://github.com/patricio0312rev)
- **Source:** [patricio0312rev/skillset](https://github.com/patricio0312rev/skillset)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.