Back to skills
SKILL.md
Api Generation
ASecurityGenerate TypeScript API client from Swagger/Go comments. Use when updating API endpoints, adding new routes, or regenerating the frontend API client after backend changes.
- 57 stars
- 0 votes
- 0 copies
- 0 views
- Added October 17, 2026
Works with
Security analysis
100/100npx -y skills add diegosouzapw/awesome-omni-skill --skill api-generation --agent claude-codeAre you the author of Api Generation?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/diegosouzapw-api-generation)---
name: api-generation
description: Generate TypeScript API client from Swagger/Go comments. Use when updating API endpoints, adding new routes, or regenerating the frontend API client after backend changes.
allowed-tools: Read, Edit, Write, Bash, Glob, Grep
---
# API Generation
Generate typed TypeScript API client from Go Swagger comments using swag + Orval.
## Workflow
```
Go Handler → swag init → swagger.json → Orval → TypeScript Hooks
```
## One Command for Everything
```bash
make api
```
This executes:
1. `swag init` → Generates `backend/docs/swagger.json` from Go comments
2. `orval` → Generates TypeScript Hooks in `frontend/src/shared/api/`
## Adding a New Endpoint
### Step 1: Go Handler with Swagger Comments
```go
// internal/handler/product.go
// GetProducts godoc
// @Summary List all products
// @Description Get all products for the authenticated user
// @Tags products
// @Accept json
// @Produce json
// @Success 200 {array} ProductResponse
// @Failure 401 {object} ErrorResponse
// @Security BearerAuth
// @Router /products [get]
func (h *ProductHandler) GetProducts(w http.ResponseWriter, r *http.Request) {
// Implementation
}
// CreateProduct godoc
// @Summary Create a product
// @Description Create a new product
// @Tags products
// @Accept json
// @Produce json
// @Param request body CreateProductRequest true "Product data"
// @Success 201 {object} ProductResponse
// @Failure 400 {object} ErrorResponse
// @Failure 401 {object} ErrorResponse
// @Security BearerAuth
// @Router /products [post]
func (h *ProductHandler) CreateProduct(w http.ResponseWriter, r *http.Request) {
// Implementation
}
```
### Step 2: Define Response/Request Types
```go
// In handler or separate types.go
type ProductResponse struct {
ID string `json:"id" example:"prod_123"`
Name string `json:"name" example:"Widget"`
Price float64 `json:"price" example:"29.99"`
}
type CreateProductRequest struct {
Name string `json:"name" example:"Widget"`
Price float64 `json:"price" example:"29.99"`
}
```
### Step 3: Generate API Client
```bash
make api
```
### Step 4: Use in Frontend
```tsx
import { useGetProducts, usePostProducts } from "@/api/endpoints/products/products"
function ProductsPage() {
const { data, isLoading } = useGetProducts()
const createProduct = usePostProducts()
const handleCreate = () => {
createProduct.mutate({ data: { name: "New", price: 10 } })
}
return (...)
}
```
## Swagger Annotation Reference
| Annotation | Description |
|------------|-------------|
| `@Summary` | Short description |
| `@Description` | Detailed description |
| `@Tags` | Grouping (becomes folder in endpoints/) |
| `@Accept` | Request Content-Type |
| `@Produce` | Response Content-Type |
| `@Param` | Parameter (body, query, path) |
| `@Success` | Success response |
| `@Failure` | Error response |
| `@Security` | Auth requirement |
| `@Router` | HTTP path and method |
## Generated Files
```
frontend/src/shared/api/
├── endpoints/
│ ├── products/ # Grouped by @Tags
│ │ └── products.ts # useGetProducts, usePostProducts, etc.
│ └── users/
│ └── users.ts
├── models/ # TypeScript Types
└── custom-fetch.ts # Fetch Wrapper with Auth
```
## Important Rules
- **Never** manually edit generated files
- **Always** run `make api` after handler changes
- Tags become folder names → `@Tags products` → `endpoints/products/`
- operationId is automatically generated from Router path
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.