Skip to main content
skill CX Codex

api-designer · zhaono1 — Claude Code skill for REST and GraphQL design

Walks an agent through API design: resources, methods, status codes, pagination, versioning. Useful before the contract is frozen.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add zhaono1/agent-playbook --skill api-designer -a claude-code
Open on GitHub

What api-designer does

The skill activates when you ask the agent to design a new API, review someone else's design, improve an existing one, or write a spec. It carries a rulebook: resource-oriented URLs instead of verbs, an HTTP method table with safe and idempotent flags, status codes from 200 to 500, pagination via page and page_size, filtering and sorting like ?status=active&sort=-created_at,name.

GraphQL gets its own section. Non-null by default, cursor-based pagination through Connection and PageInfo, mutation payload types, descriptions on every type and field. For versioning it recommends starting at v1 and keeping backwards compatibility. Authentication is covered in three flavours: JWT bearer, API key, OAuth 2.0.

Two Python scripts handle the boring parts. python3 scripts/generate_api.py --name <resource-name> --output api-design.md builds a scaffold, python3 scripts/validate_api.py --input api-design.md checks the result. They ship in the repo, so you need Python locally to run them. The allowed-tools list includes WebFetch and WebSearch, which lets the agent pull in outside REST and GraphQL references.

What it helps with

  • turn verb-style endpoints into resource URLs
  • pick the right status code for each failure case
  • add pagination and sorting to a list endpoint
  • sketch a GraphQL schema with cursors and payload types
  • validate a finished spec with a script

Example prompts for the agent

  • Design a REST API for orders: list, create, update, delete
  • Review my GraphQL schema and flag anything that breaks best practices
  • Generate an API scaffold for the invoices resource into api-design.md

How to install api-designer

1Skills CLI (Vercel)

npx skills add zhaono1/agent-playbook --skill api-designer -a claude-code

2Manually: put the files in place

~/.claude/skills/api-designer/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/api-designer/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about api-designer

How do I install api-designer in Claude?

Run npx skills add zhaono1/agent-playbook --skill api-designer -a claude-code. The skill file lands at ~/.claude/skills/api-designer/SKILL.md.

What does api-designer do?

It guides REST and GraphQL design work: naming rules, HTTP methods, status codes, pagination, versioning, auth. It also ships two scripts for generating and validating a spec.

Which tools can the skill use?

allowed-tools lists Read, Write, Edit, Bash, Grep, Glob, WebFetch and WebSearch. That means it can read project files, run scripts and search the web.

Source text

SKILL.md · MIT
---
name: api-designer
description: REST and GraphQL API architect for designing robust, scalable APIs. Use when designing new APIs or improving existing ones.
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, WebFetch, WebSearch
metadata:
  hooks:
    after_complete:
      - trigger: self-improving-agent
        mode: background
        reason: "Learn from API design patterns"
      - trigger: session-logger
        mode: auto
        reason: "Log API design activity"
---

# API Designer

Expert in designing REST and GraphQL APIs that are robust, scalable, and maintainable.

## When This Skill Activates

Activates when you:
- Design a new API
- Review API design
- Improve existing API
- Create API specifications

## REST API Design Principles

### 1. Resource-Oriented Design

**Good:**
```
GET    /users          # List users
POST   /users          # Create user
GET    /users/{id}     # Get specific user
PATCH  /users/{id}     # Update user
DELETE /users/{id}     # Delete user
```

**Avoid:**
```
POST   /getUsers       # Should be GET
POST   /users/create  # Redundant
GET    /users/get/{id} # Redundant
```

### 2. HTTP Methods

| Method | Safe | Idempotent | Purpose |
|--------|------|------------|---------|
| GET | ✓ | ✓ | Read resource |
| POST | ✗ | ✗ | Create resource |
| PUT | ✗ | ✓ | Replace resource |
| PATCH | ✗ | ✗ | Update resource |
| DELETE | ✗ | ✓ | Delete resource |

### 3. Status Codes

| Code | Meaning | Usage |
|------|---------|-------|
| 200 | OK | Successful GET, PATCH, DELETE |
| 201 | Created | Successful POST |
| 204 | No Content | Successful DELETE with no body |
| 400 | Bad Request | Invalid input |
| 401 | Unauthorized | Missing or invalid auth |
| 403 | Forbidden | Authenticated but not authorized |
| 404 | Not Found | Resource doesn't exist |
| 409 | Conflict | Resource already exists |
| 422 | Unprocessable | Valid syntax but semantic errors |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server error |

### 4. Naming Conventions

- **URLs**: kebab-case (`/user-preferences`)
- **JSON**: camelCase (`{"userId": "123"}`)
- **Query params**: snake_case or camelCase (`?page_size=10`)

### 5. Pagination

```http
GET /users?page=1&page_size=20

Response:
{
  "data": [...],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 100,
    "total_pages": 5
  }
}
```

### 6. Filtering and Sorting

```http
GET /users?status=active&sort=-created_at,name

# -created_at = descending
# name = ascending
```

## GraphQL API Design

### Schema Design

```graphql
type Query {
  user(id: ID!): User
  users(limit: Int, offset: Int): UserConnection!
}

type Mutation {
  createUser(input: CreateUserInput!): CreateUserPayload!
  updateUser(id: ID!, input: UpdateUserInput!): UpdateUserPayload!
}

type User {
  id: ID!
  email: String!
  profile: Profile
  posts(first: Int, after: String): PostConnection!
}

type UserConnection {
  edges: [UserEdge!]!
  pageInfo: PageInfo!
}

type UserEdge {
  node: User!
  cursor: String!
}

type PageInfo {
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
  endCursor: String
}
```

### Best Practices

- **Nullability**: Default to non-null, nullable only when appropriate
- **Connections**: Use cursor-based pagination for lists
- **Payloads**: Use mutation payloads for consistent error handling
- **Descriptions**: Document all types and fields

## API Versioning

### Approaches

**URL Versioning** (Recommended):
```
/api/v1/users
/api/v2/users
```

**Header Versioning**:
```
GET /users
Accept: application/vnd.myapi.v2+json
```

### Versioning Guidelines

- Start with v1
- Maintain backwards compatibility when possible
- Deprecate old versions with notice
- Document breaking changes

## Authentication & Authorization

### Authentication Methods

1. **JWT Bearer Token**
```http
Authorization: Bearer <token>
```

2. **API Key**
```http
X-API-Key: <key>
```

3. **OAuth 2.0**
```http
Authorization: Bearer <access_token>
```

### Authorization

- Use roles/permissions
- Document required permissions per endpoint
- Return 403 for authorization failures

## Rate Limiting

```http
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1631234567
```

**Recommended limits:**
- Public APIs: 100-1000 requests/hour
- Authenticated APIs: 1000-10000 requests/hour
- Webhooks: 10-100 requests/minute

## Documentation Requirements

- All endpoints documented
- Request/response examples
- Authentication requirements
- Error response formats
- Rate limits
- SDK examples (if available)

## Scripts

Generate API scaffold:
```bash
python3 scripts/generate_api.py --name <resource-name> --output api-design.md
```

Validate API design:
```bash
python3 scripts/validate_api.py --input api-design.md
```

## References

- `references/rest-patterns.md` - REST design patterns
- `references/graphql-patterns.md` - GraphQL design patterns
- [REST API Tutorial](https://restfulapi.net/)
- [GraphQL Best Practices](https://graphql.org/learn/best-practices/)

© zhaono1 · MIT · zhaono1/agent-playbook

Similar skills

Everything for Backend and APIs →

api-designer by other authors comes first.

api-designer https://github.com/Jeffallan Skill for REST and GraphQL API architecture with OpenAPI 3.1 specification generation. Models resources, plans versioning strategies, and establishes error handling standards. CX Codex +1 6,500installs api-integration-surface-strategy Samuel Berthe Decides which integration surfaces a platform exposes to external developers and AI agents — REST, GraphQL, gRPC, webhooks, SDKs, MCP — and in what order to build them. CX Codex +1 8,000installs api-testing-patterns proffesor-for-testing A skill with ready-made patterns for testing REST and GraphQL APIs: contracts, auth, idempotency, race conditions. Useful when writing tests or picking a strategy. CX Codex +1 605installs api-and-interface-design addyosmani Guides API and module-boundary design with explicit contracts, validation, and consistent errors. Use it for REST, GraphQL, or public interfaces. CX Codex +1 62,600installs api-design-principles Seth Hobson Use this skill to plan or review REST and GraphQL APIs. It helps when writing a specification or setting API conventions for a team. CX Codex 30,348installs api-rate-limit-policy Samuel Berthe Walks you through the limits a public API publishes: tiers, bursts, headers, 429 behavior. Useful when integrators only learn each ceiling by hitting it. CX Codex +1 8,000installs api-testing kindlmann A skill for writing REST and GraphQL API tests: response shape, status codes, headers, auth boundaries and timing. Useful when a quiet schema change breaks your frontend. CX Codex +1 1,300installs

From the same set18

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor