api-spec-openapi
Generate OpenAPI 3.1 specs that follow the Zalando RESTful API Guidelines (kebab-case naming, cursor pagination, RFC 9457 problem+json errors, URL versioning…
Skill by fmflurry
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/fmflurry-api-spec-openapi
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/api-spec-openapi
What's inside
- Skill name
api-spec-openapi- Description
- Generate OpenAPI 3.1 specs that follow the Zalando RESTful API Guidelines (kebab-case naming, cursor pagination, RFC 9457 problem+json errors, URL versioning, idempotency), one YAML file per bounded context/domain. Use when authoring, updating, or reviewing an OpenAPI/Swagger specification, or when preparing specs to push to SmartBear SwaggerHub.
- License
- MIT
- Instructions
- 461 lines in SKILL.md · view on GitHub
Files (6)
- SKILL.md
- bounded-context-mapping.md
- openapi-3.1-template.md
- problem-json.md
- validation.md
- zalando-checklist.md
SKILL.md (first lines)
# OpenAPI 3.1 + Zalando REST API Guidelines Skill
## When to Activate
- Authoring a new OpenAPI 3.1 specification from domain models
- Updating an existing OpenAPI spec to align with Zalando conventions
- Reviewing specs for API naming, error handling, pagination, versioning, or idempotency compliance
- Preparing specs for publication to SmartBear SwaggerHub
- Designing API contracts for a bounded context or microservice
## Core Rules Digest (Zalando-Derived)
The highest-value Zalando rules are embedded below. Full checklist with verifiable YAML snippets: [zalando-checklist.md](zalando-checklist.md).
### **Naming**
- Paths: **kebab-case**, lowercase, **plural resource nouns**, no trailing slash.
```yaml
/v1/users
/v1/market-searches/{id}
/v1/order-items
```
- JSON properties: **snake_case** (not camelCase).
```yaml
user_id: string
created_at: string
is_active: boolean
```
- **Identifiers MUST be English** — all path segments, property names, enum values, operationIds, and schema names MUST be English (e.g., `/customers/{id}/invoices`, not `/clients/{id}/factures`). See [zalando-checklist.md § English-only identifiers](zalando-checklist.md#english-only-identifiers).
### **HTTP Semantics**
- **GET**: retrieve (200 OK or 404).
- **POST**: create new resource (201 Created, Location header with URI).
- **PUT**: replace entire resource, idempotent (200 or 204).
- **DELETE**: remove resource, idempotent (204 No Content).
- **PATCH**: partial update (not recommended; use PUT or POST instead).
- **Status codes**: Use 200/201/202/204/207/400/401/403/404/409/412/422/429/500. See [zalando-checklist.md § HTTP Status Codes](zalando-checklist.md#http-status-codes) for mappings.
### **Pagination (Cursor-Based, No Offset)**
- Cursor pagination: `?cursor=<opaque-value>&limit=<int>` (default limit 20, max 100).
- **Forbid `?offset=` and `?page=`** — they are inefficient at scale.
- Response envelope includes `_links.next` / `_links.prev` for navigation.
```yaml
items: [...]
_links:
next: { href: "https://api.example.com/v1/users?cursor=abc123&limit=20" }
prev: { href: "https://api.example.com/v1/users?cursor=xyz789&limit=20" }
```
### **Errors: RFC 9457 Problem+JSON**
- All 4xx/5xx responses use `application/problem+json` (RFC 9457 / RFC 7807).
- Single reusable `Problem` schema across all endpoints.
```yaml
type: string # URI identifying problem type (e.g., "https://api.example.com/problems/user-not-found")
title: string # Human-readable summary
status: integer # HTTP status code
detail: string # Details specific to this occurrence
instance: string # URI to affected resource
```
### **Versioning (URL Major Only)**
- Major versions encoded in URL: `/v1/`, `/v2/`.
- **Preferred within-version evolution**: Additive only (no breaking changes within `/v1`).
- Alternative: Media-type versioning (content negotiation `Accept: application/vnd.example.v1+json`); see [openapi-3.1-template.md](openapi-3.1-template.md).
- **MUST NOT break** existing clients mid-version; bump major version if backward-incompatible.
### **Idempotency**
- **POST (create)**: Require `Idempotency-Key` header (UUID or user-provided).
- **PUT / DELETE**: Inherently idempotent; safe to retry.
- Server returns same response if the same `Idempotency-Key` is submitted.
### **Filtering & Sorting**
- Filtering: Query parameters per resource (`?user_id=123`, `?status=active`).
- Searching: `?q=<query>` for free-text search.
- Sorting: `?sort=field,-field` (ascending by default, `-` prefix for descending).
### **Hypermedia & Links**
- Include `_links` object in responses for navigation (cursor pagination, related resources, actions).
- Standard link relations: `self`, `next`, `prev`, `first`, `last`.
### **Headers & Content Types**
- Default: `application/json`.
- Errors: `application/problem+json`.
- Concurrency: `ETag` / `If-Match` for optimistic locking.
- Retry: `Retry-After` on 429 (rate limit) and 503 (service unavailable).
### **Deprecation**
- Use `Deprecation: true` header in responses.
- Use `Sunset` header with a date when the endpoint will be removed.
- Mark deprecated fields in schema with `deprecated: true`.
### **Security**
- Define `securitySchemes` (e.g., OAuth2, Bearer token).
- Apply security per operation (not globally) for granular control.
- Never include secrets or credentials in examples or default values.
### **Tags (One Per Bounded Context)**
- Assign one Title-Case English tag per bounded context.
- Group operations under their originating BC's tag for clear domain organization.
- Example tags: `"User Accounts"`, `"Billing"`, `"Order Fulfillment"`.
- See [zalando-checklist.md § Tags](zalando-checklist.md#tags).
### **One File Per Bounded Context (or Consolidate if Needed)**
- Default: Split the API specification by domain/bounded context.
- Naming: `<bounded-context>.openapi.yaml` in `api-specs/` folder (kebab-case).
- Each BC spec is independently publishable to SwaggerHub; minimize cross-file `$ref`.
- Alternative: Consolidate multiple BCs into a single API file; use tags to denote BC boundaries.
- See [bounded-context-mapping.md](bounded-context-mapping.md).
## OpenAPI 3.1 Minimal Skeleton
```yaml
openapi: 3.1.0
info:
title: "<Bounded Context> API"
version: "1.0.0"
description: |
RESTful API for <bounded context description>.
Follows Zalando RESTful API Guidelines and RFC 9457 for error responses.
contact:From fmflurry/settings-opencode, MIT.
More from fmflurry/settings-opencode
- 0.779score
interfectio-commentarum
poteto
Spawn Haruspex Commentorum, fix accepted findings, and offer encodings for claimed constraints.
SkillAFreshness: A★ 171Claude Code +9 - 0.655score
chimera
poteto
Spawn N parallel candidates at the same task, pick a base, graft the strongest parts of the losers into it.
SkillAFreshness: A★ 171Claude Code +9 - 0.649score
humanizer
poteto
Cut AI tells from any writing.
SkillAFreshness: A★ 171Claude Code +9 - 0.643score
e2e
fmflurry
Resolve this project's browser end-to-end stack before /e2e or e2e-runner writes tests.
SkillAFreshness: A★ 171Claude Code +9 - 0.643score
show-your-work
fmflurry
Keep a reviewable decision trail for long-running or unattended work: a TSV log with one row per decision (what, why, evidence, result).
SkillAFreshness: A★ 171Claude Code +9 - 0.643score
why
fmflurry
Use for 'why does X work this way', 'why we picked Y', design rationale, regressions, postmortems, or data-backed thresholds.
SkillAFreshness: A★ 171Claude Code +9 - 0.641score
verify-this
fmflurry
Verify a claim with fresh local evidence: restate it falsifiably, capture baseline and treatment, compare artifacts, and return VERIFIED, NOT VERIFIED, or…
SkillAFreshness: A★ 171Claude Code +9 - 0.640score
create-verification-skill
fmflurry
Use when creating or refreshing a project's verify-this override.
SkillAFreshness: A★ 171Claude Code +9 - 0.639score
angular-ddd
fmflurry
Domain-Driven Design for Angular/TypeScript: functional patterns with `type` aliases, `readonly` fields, pure rule functions, immutable value types, branded…
SkillAFreshness: A★ 171Claude Code +9 - 0.639score
codebase-exploration
fmflurry
Use when searching a repository, looking up symbols, callers, callees, or imports, and when deciding whether CodeMemory is on.
SkillAFreshness: A★ 171Claude Code +9 - 0.639score
patterns
fmflurry
Use when starting a feature from a skeleton project, or when adding a repository interface or a shared API response envelope.
SkillAFreshness: A★ 171Claude Code +9 - 0.639score
socratic-design
fmflurry
Use when a planning, design, architecture, or refactor decision is still open.
SkillAFreshness: A★ 171Claude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 171
- Forks
- 9
- Open issues
- 0
- Last commit (this folder)
- Oct 7, 2026 (20 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/fmflurry/settings-opencode
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
More from fmflurry
- 0.643score
why
fmflurry
Use for 'why does X work this way', 'why we picked Y', design rationale, regressions, postmortems, or data-backed thresholds.
SkillAFreshness: A★ 171Claude Code +9 - 0.643score
show-your-work
fmflurry
Keep a reviewable decision trail for long-running or unattended work: a TSV log with one row per decision (what, why, evidence, result).
SkillAFreshness: A★ 171Claude Code +9 - 0.643score
e2e
fmflurry
Resolve this project's browser end-to-end stack before /e2e or e2e-runner writes tests.
SkillAFreshness: A★ 171Claude Code +9 - 0.641score
verify-this
fmflurry
Verify a claim with fresh local evidence: restate it falsifiably, capture baseline and treatment, compare artifacts, and return VERIFIED, NOT VERIFIED, or…
SkillAFreshness: A★ 171Claude Code +9 - 0.640score
create-verification-skill
fmflurry
Use when creating or refreshing a project's verify-this override.
SkillAFreshness: A★ 171Claude Code +9 - 0.639score
codebase-exploration
fmflurry
Use when searching a repository, looking up symbols, callers, callees, or imports, and when deciding whether CodeMemory is on.
SkillAFreshness: A★ 171Claude Code +9
Cite this page
api-spec-openapi skill. Agent Mart. https://agentmart.dev/skills/fmflurry-api-spec-openapi (last updated 2026-10-24)