Write clear, developer-facing API documentation
API Docs Writer Skill

Write clear, developer-facing API documentation. Use when asked to document an API endpoint, write API reference docs, create a developer guide, or turn a raw spec/Postman collection into documentation.
--- name: api-docs-writer description: "Write clear, developer-facing API documentation. Use when asked to document an API endpoint, write API reference docs, create a developer guide, or turn a raw spec/Postman collection into documentation. Produces endpoint documentation with descriptions, parameters, request/response examples, and error codes." --- # API Docs Writer Skill This skill transforms raw API specs, endpoint descriptions, or Postman collections into clean, developer-facing documentation following OpenAPI-adjacent conventions. Output is ready for a developer portal, README, or Notion/Confluence page. ## Required Inputs Ask the user for these if not provided: - **API or endpoint details** (raw spec, Postman export, or verbal description) - **Auth method** (API key / Bearer token / OAuth 2.0 / None) - **Base URL** - **API version** (e.g. v1, v2.3, or "unversioned" — affects deprecation notes and versioning headers) - **Rate limits** (requests per second/minute per token or IP, if known — or "unknown") - **Audience** (internal developers / external partners / public)
Overview
This skill transforms raw API specs, endpoint descriptions, or Postman collections into clean, developer-facing documentation following OpenAPI-adjacent conventions. Output is ready for a developer portal, README, or Notion/Confluence page.
Manual install (npx, ZIP)
npx skills add mohitagw15856/pm-claude-skills --skill api-docs-writer -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/mohitagw15856/pm-claude-skills/tar.gz/f6ca79348c55 \
| tar -xz -C ~/.claude/skills --strip-components=2 pm-claude-skills-f6ca79348c55/skills/api-docs-writerNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/1cedb74a7cd20a5cb565/api-docs-writer.zip" -OutFile "$env:TEMP\api-docs-writer.zip"; Expand-Archive "$env:TEMP\api-docs-writer.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md7.4 KBreferences/2 files · 14.2 KBtemplates/1 file · 712 B
Read the files here
mohitagw15856/
Show the full text175 lines
API Docs Writer Skill
This skill transforms raw API specs, endpoint descriptions, or Postman collections into clean, developer-facing documentation following OpenAPI-adjacent conventions. Output is ready for a developer portal, README, or Notion/Confluence page.
Required Inputs
Ask the user for these if not provided:
- API or endpoint details (raw spec, Postman export, or verbal description)
- Auth method (API key / Bearer token / OAuth 2.0 / None)
- Base URL
- API version (e.g. v1, v2.3, or "unversioned" — affects deprecation notes and versioning headers)
- Rate limits (requests per second/minute per token or IP, if known — or "unknown")
- Audience (internal developers / external partners / public)
- Output format (Markdown for developer portals and READMEs / Plain prose for Confluence or Notion — note: OpenAPI YAML is not produced by this skill)
Output Format
For each endpoint, produce the following:
[METHOD] /path/to/endpoint
Summary: [One line — what this endpoint does]
Description: [2–4 sentences. When to use this endpoint. What it returns. Any important behaviour to know (pagination, rate limits, async processing, etc.)]
Authentication: [Required / Optional — method]
Request
Headers:
| Header | Required | Description |
|---|---|---|
Authorization |
Yes | Bearer <token> |
Content-Type |
Yes | application/json |
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Unique identifier for the resource |
Query Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
limit |
integer | No | 20 | Max results per page (1–100) |
cursor |
string | No | — | Pagination cursor from previous response |
Request Body:
{
"field_name": "value",
"another_field": 42
}
| Field | Type | Required | Description |
|---|---|---|---|
field_name |
string | Yes | [Plain description of what this field does] |
another_field |
integer | No | [Description. Include valid range or enum values if applicable] |
Response
Success Response: 200 OK
{
"id": "abc123",
"status": "active",
"created_at": "2025-04-01T10:00:00Z"
}
| Field | Type | Description |
|---|---|---|
id |
string | Unique identifier for the created/retrieved resource |
status |
string | Current status. Enum: active, inactive, pending |
created_at |
ISO 8601 string | Timestamp of creation in UTC |
Error Codes
| Status Code | Error Code | Description | How to Resolve |
|---|---|---|---|
400 |
INVALID_REQUEST |
Request body is malformed or missing required fields | Check request body against schema above |
401 |
UNAUTHORIZED |
Missing or invalid authentication token | Verify your API key or refresh your token |
404 |
NOT_FOUND |
The requested resource does not exist | Check the ID in the path parameter |
429 |
RATE_LIMITED |
Too many requests | Back off and retry after Retry-After header value |
500 |
INTERNAL_ERROR |
Unexpected server error | Retry with exponential backoff; contact support if persists |
Code Examples
Produce examples in at least 2 languages relevant to the audience (default: cURL + Python):
cURL:
curl -X POST https://api.example.com/v1/endpoint \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"field_name": "value"}'
Python:
import requests
response = requests.post(
"https://api.example.com/v1/endpoint",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={"field_name": "value"}
)
data = response.json()
Deeper Materials
This skill ships with support files — use them when they are available:
references/example-first-docs.md— Example-First API Docs: the Rules That Make Docs Usable. Apply it while producing the output; it carries the calibration and judgment calls the method summary above compresses.templates/endpoint-entry.md— a fill-in version of the deliverable with the quality gates inline. Offer it when the user wants to work the document themselves rather than have it generated.
Scoring Rubric (0–40)
Score any output of this skill before handing it over; 32+ is ship-quality.
| Dimension | 0 | 5 | 10 |
|---|---|---|---|
| Parameter completeness | Fields listed without types or required/optional flags | Tables complete, but descriptions say what a field is, not what it does; enums and ranges missing | Every field typed and constrained (enums, ranges, formats), described by behaviour and consequence |
| Error-path coverage | Happy path only — no error table | Standard 400/401/404/429/500 rows present but with no resolution guidance | Full standard set plus endpoint-specific codes, each with what the developer should do, including unsafe-retry cases |
| Example runnability | Pseudo-code, undefined variables, or "YOUR_ENDPOINT" placeholders | Examples exist but aren't copy-paste-runnable or use only one language | ≥2 languages, real base URL, obviously-fake placeholder credentials, runnable as pasted |
| Behavioural candour | Async behaviour, pagination, idempotency, and legacy quirks omitted | Quirks mentioned in prose but absent from examples and error rows | Gotchas documented with the exact requests/responses they produce, including awkward legacy behaviour |
Quality Checks
- Every parameter is documented (type, required/optional, description)
- Response fields are fully documented with types
- All relevant error codes are listed with resolution guidance
- Error codes cover at minimum: 400 (bad request), 401/403 (auth), 404 (not found), 429 (rate limited), 500 (server error) — or explicitly note which don't apply to this endpoint
- Code examples use the actual base URL and a realistic placeholder token — no examples reference undefined variables or "YOUR_ENDPOINT" outside the snippet
- Auth method is clearly stated at the top
- Enum values are listed where applicable
- Pagination documented if the endpoint is a list endpoint
Anti-Patterns
- Do not document only the happy path — every endpoint must have error codes for at least 400, 401/403, 404, 429, and 500
- Do not use placeholder values like "YOUR_ENDPOINT" or "INSERT_TOKEN" in code examples — use realistic-looking placeholders anchored to the actual base URL
- Do not skip enum values for fields with a fixed set of accepted values — undocumented enums cause integration bugs
- Do not omit pagination documentation on list endpoints — developers who miss this will build integrations that silently miss data
- Do not describe what a field "is" without describing what it "does" — "the ID" is not documentation; "the unique identifier used to retrieve or update this resource" is
Usage Examples
- "Document this API endpoint: [paste spec or description]"
- "Turn this Postman collection into developer docs"
- "Write API reference docs for [endpoint]"
- "Write a developer guide for our [product] API"
| 1 | |
| 2 | name api-docs-writer |
| 3 | description "Write clear, developer-facing API documentation. Use when asked to document an API endpoint, write API reference docs, create a developer guide, or turn a raw spec/Postman collection into documentation. Produces endpoint documentation with descriptions, parameters, request/response examples, and error codes." |
| 4 | |
| 5 | |
| 6 | # API Docs Writer Skill |
| 7 | |
| 8 | This skill transforms raw API specs, endpoint descriptions, or Postman collections into clean, developer-facing documentation following OpenAPI-adjacent conventions. Output is ready for a developer portal, README, or Notion/Confluence page. |
| 9 | |
| 10 | ## Required Inputs |
| 11 | |
| 12 | Ask the user for these if not provided: |
| 13 | **API or endpoint details** (raw spec, Postman export, or verbal description) |
| 14 | **Auth method** (API key / Bearer token / OAuth 2.0 / None) |
| 15 | **Base URL** |
| 16 | **API version** (e.g. v1, v2.3, or "unversioned" — affects deprecation notes and versioning headers) |
| 17 | **Rate limits** (requests per second/minute per token or IP, if known — or "unknown") |
| 18 | **Audience** (internal developers / external partners / public) |
| 19 | **Output format** (Markdown for developer portals and READMEs / Plain prose for Confluence or Notion — note: OpenAPI YAML is not produced by this skill) |
| 20 | |
| 21 | ## Output Format |
| 22 | |
| 23 | For each endpoint, produce the following: |
| 24 | |
| 25 | |
| 26 | |
| 27 | ## `[METHOD] /path/to/endpoint` |
| 28 | |
| 29 | **Summary:** [One line — what this endpoint does] |
| 30 | |
| 31 | **Description:** [2–4 sentences. When to use this endpoint. What it returns. Any important behaviour to know (pagination, rate limits, async processing, etc.)] |
| 32 | |
| 33 | **Authentication:** [Required / Optional — method] |
| 34 | |
| 35 | |
| 36 | |
| 37 | ### Request |
| 38 | |
| 39 | **Headers:** |
| 40 | |
| 41 | | Header | Required | Description | |
| 42 | |---|---|---| |
| 43 | | `Authorization` | Yes | `Bearer <token>` | |
| 44 | | `Content-Type` | Yes | `application/json` | |
| 45 | |
| 46 | **Path Parameters:** |
| 47 | |
| 48 | | Parameter | Type | Required | Description | |
| 49 | |---|---|---|---| |
| 50 | | `id` | string | Yes | Unique identifier for the resource | |
| 51 | |
| 52 | **Query Parameters:** |
| 53 | |
| 54 | | Parameter | Type | Required | Default | Description | |
| 55 | |---|---|---|---|---| |
| 56 | | `limit` | integer | No | 20 | Max results per page (1–100) | |
| 57 | | `cursor` | string | No | — | Pagination cursor from previous response | |
| 58 | |
| 59 | **Request Body:** |
| 60 | |
| 61 | |
| 62 | { |
| 63 | "field_name": "value", |
| 64 | "another_field": 42 |
| 65 | } |
| 66 | |
| 67 | |
| 68 | | Field | Type | Required | Description | |
| 69 | |---|---|---|---| |
| 70 | | `field_name` | string | Yes | [Plain description of what this field does] | |
| 71 | | `another_field` | integer | No | [Description. Include valid range or enum values if applicable] | |
| 72 | |
| 73 | |
| 74 | |
| 75 | ### Response |
| 76 | |
| 77 | **Success Response: `200 OK`** |
| 78 | |
| 79 | |
| 80 | { |
| 81 | "id": "abc123", |
| 82 | "status": "active", |
| 83 | "created_at": "2025-04-01T10:00:00Z" |
| 84 | } |
| 85 | |
| 86 | |
| 87 | | Field | Type | Description | |
| 88 | |---|---|---| |
| 89 | | `id` | string | Unique identifier for the created/retrieved resource | |
| 90 | | `status` | string | Current status. Enum: `active`, `inactive`, `pending` | |
| 91 | | `created_at` | ISO 8601 string | Timestamp of creation in UTC | |
| 92 | |
| 93 | |
| 94 | |
| 95 | ### Error Codes |
| 96 | |
| 97 | | Status Code | Error Code | Description | How to Resolve | |
| 98 | |---|---|---|---| |
| 99 | | `400` | `INVALID_REQUEST` | Request body is malformed or missing required fields | Check request body against schema above | |
| 100 | | `401` | `UNAUTHORIZED` | Missing or invalid authentication token | Verify your API key or refresh your token | |
| 101 | | `404` | `NOT_FOUND` | The requested resource does not exist | Check the ID in the path parameter | |
| 102 | | `429` | `RATE_LIMITED` | Too many requests | Back off and retry after `Retry-After` header value | |
| 103 | | `500` | `INTERNAL_ERROR` | Unexpected server error | Retry with exponential backoff; contact support if persists | |
| 104 | |
| 105 | |
| 106 | |
| 107 | ### Code Examples |
| 108 | |
| 109 | Produce examples in at least 2 languages relevant to the audience (default: cURL + Python): |
| 110 | |
| 111 | **cURL:** |
| 112 | |
| 113 | curl -X POST https://api.example.com/v1/endpoint \ |
| 114 | -H "Authorization: Bearer YOUR_TOKEN" \ |
| 115 | -H "Content-Type: application/json" \ |
| 116 | -d '{"field_name": "value"}' |
| 117 | |
| 118 | |
| 119 | **Python:** |
| 120 | |
| 121 | import requests |
| 122 | |
| 123 | response = requests.post( |
| 124 | "https://api.example.com/v1/endpoint", |
| 125 | headers={"Authorization": "Bearer YOUR_TOKEN"}, |
| 126 | json={"field_name": "value"} |
| 127 | ) |
| 128 | data = response.json() |
| 129 | |
| 130 | |
| 131 | |
| 132 | |
| 133 | ## Deeper Materials |
| 134 | |
| 135 | This skill ships with support files — use them when they are available: |
| 136 | |
| 137 | **`references/example-first-docs.md`** — Example-First API Docs: the Rules That Make Docs Usable. Apply it while producing the output; it carries the calibration and judgment calls the method summary above compresses. |
| 138 | **`templates/endpoint-entry.md`** — a fill-in version of the deliverable with the quality gates inline. Offer it when the user wants to work the document themselves rather than have it generated. |
| 139 | |
| 140 | ## Scoring Rubric (0–40) |
| 141 | |
| 142 | Score any output of this skill before handing it over; 32+ is ship-quality. |
| 143 | |
| 144 | | Dimension | 0 | 5 | 10 | |
| 145 | |---|---|---|---| |
| 146 | | **Parameter completeness** | Fields listed without types or required/optional flags | Tables complete, but descriptions say what a field *is*, not what it *does*; enums and ranges missing | Every field typed and constrained (enums, ranges, formats), described by behaviour and consequence | |
| 147 | | **Error-path coverage** | Happy path only — no error table | Standard 400/401/404/429/500 rows present but with no resolution guidance | Full standard set plus endpoint-specific codes, each with what the developer should *do*, including unsafe-retry cases | |
| 148 | | **Example runnability** | Pseudo-code, undefined variables, or "YOUR_ENDPOINT" placeholders | Examples exist but aren't copy-paste-runnable or use only one language | ≥2 languages, real base URL, obviously-fake placeholder credentials, runnable as pasted | |
| 149 | | **Behavioural candour** | Async behaviour, pagination, idempotency, and legacy quirks omitted | Quirks mentioned in prose but absent from examples and error rows | Gotchas documented with the exact requests/responses they produce, including awkward legacy behaviour | |
| 150 | |
| 151 | ## Quality Checks |
| 152 | |
| 153 | [ ] Every parameter is documented (type, required/optional, description) |
| 154 | [ ] Response fields are fully documented with types |
| 155 | [ ] All relevant error codes are listed with resolution guidance |
| 156 | [ ] Error codes cover at minimum: 400 (bad request), 401/403 (auth), 404 (not found), 429 (rate limited), 500 (server error) — or explicitly note which don't apply to this endpoint |
| 157 | [ ] Code examples use the actual base URL and a realistic placeholder token — no examples reference undefined variables or "YOUR_ENDPOINT" outside the snippet |
| 158 | [ ] Auth method is clearly stated at the top |
| 159 | [ ] Enum values are listed where applicable |
| 160 | [ ] Pagination documented if the endpoint is a list endpoint |
| 161 | |
| 162 | ## Anti-Patterns |
| 163 | |
| 164 | [ ] Do not document only the happy path — every endpoint must have error codes for at least 400, 401/403, 404, 429, and 500 |
| 165 | [ ] Do not use placeholder values like "YOUR_ENDPOINT" or "INSERT_TOKEN" in code examples — use realistic-looking placeholders anchored to the actual base URL |
| 166 | [ ] Do not skip enum values for fields with a fixed set of accepted values — undocumented enums cause integration bugs |
| 167 | [ ] Do not omit pagination documentation on list endpoints — developers who miss this will build integrations that silently miss data |
| 168 | [ ] Do not describe what a field "is" without describing what it "does" — "the ID" is not documentation; "the unique identifier used to retrieve or update this resource" is |
| 169 | |
| 170 | ## Usage Examples |
| 171 | "Document this API endpoint: [paste spec or description]" |
| 172 | "Turn this Postman collection into developer docs" |
| 173 | "Write API reference docs for [endpoint]" |
| 174 | "Write a developer guide for our [product] API" |
| 175 |
Details
- Updated
- Sep 23, 2026
- License
- MIT
- Stars on the repo
- ★ 1,395
- Checked
- Source
- mohitagw15856/pm-claude-skills ↗
- Creator
- mohitagw15856 · 193 listings
Made with api-docs-writer


Similar skills
See all →
SkillGuides stable API and interface design
MCPPulls up-to-date, version-specific library docsContext7
SkillFetch up-to-date documentation and code examples for anyContext7 Documentation Lookup
SkillHow to use the Adaptyv Bio Foundry API and Python SDK
SkillMaster C/.NET backend development patterns for building
SkillGuides the usage of Gemini Interactions API on GeminiGemini Interactions API SkillMore from mohitagw15856
SkillDesign a 360-degree feedback survey or write a structured360-Degree Feedback Template Skill
SkillDesign statistically rigorous A/B tests for product featuresA/B Test Planner Skill
SkillGenerate a WCAG 2.2 accessibility audit checklistAccessibility Audit Skill
SkillBuild a structured account plan for any key customerAccount Plan Skill
SkillOptimize an article for Answer Engine Optimization so AIAEO Optimizer Skill
SkillConduct a structured ethical review of an AI or ML featureAI Ethics Review Skill