# API Generator

> Generate CRUD API endpoints automatically. User doesn't see routes. Use when: features need backend logic. Triggers: internal use only.

- Skill: `majiayu000/api-generator` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/api-generator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/api-generator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/api-generator

---


# API Generator

Create endpoints from requirements. User never writes routes.

## Process

1. **Identify resources**
   - "Manage expenses" → /api/expenses
   - "User profile" → /api/users/me

2. **Generate CRUD**
   - GET (list, single)
   - POST (create)
   - PUT/PATCH (update)
   - DELETE (remove)

3. **Add validation**
   - Input schemas
   - Error handling
   - Auth middleware

4. **Generate OpenAPI**
   - Auto-document all endpoints
   - For future integrations

## Template-Specific

### Next.js API Routes
```typescript
// app/api/expenses/route.ts
export async function GET() {
  const expenses = await db.expenses.findMany();
  return Response.json(expenses);
}

export async function POST(req: Request) {
  const data = await req.json();
  const expense = await db.expenses.create({ data });
  return Response.json(expense);
}
```

### FastAPI
```python
@router.get("/expenses")
async def list_expenses(db: Session = Depends(get_db)):
    return db.query(Expense).all()

@router.post("/expenses")
async def create_expense(data: ExpenseCreate, db: Session = Depends(get_db)):
    expense = Expense(**data.dict())
    db.add(expense)
    db.commit()
    return expense
```

### Hono
```typescript
app.get('/expenses', async (c) => {
  const expenses = await db.select().from(expensesTable);
  return c.json(expenses);
});

app.post('/expenses', async (c) => {
  const data = await c.req.json();
  const [expense] = await db.insert(expensesTable).values(data).returning();
  return c.json(expense);
});
```

## Auto-Generated Features

| Feature | Implementation |
|---------|----------------|
| Pagination | ?page=1&limit=20 |
| Filtering | ?category=food |
| Sorting | ?sort=amount&order=desc |
| Auth | Middleware checks token |
| Validation | Schema validates input |

## User Experience

User: "Add expense tracking"

Internally:
1. Generate /api/expenses endpoints
2. Add validation schemas
3. Connect to database
4. Add auth middleware
5. Generate OpenAPI spec

User sees: "✅ Expense API ready"

