Creates API route handlers, implements Server Actions with Zod schema validation, and integrates external REST APIs with error handling. Use when adding endpoints, building request handlers, or wiring external services (endpoint, REST API, request handling, fetch, .ts route files).
100
100%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
Project-specific config: api-config.md.
| Layer | Use for |
|---|---|
| Server Actions (preferred) | mutations, form submissions, data writes, auth |
Route Handlers (route.ts) | analytics, autocomplete, external integrations |
| Proxy layer | IP rate limiting, fingerprinting, bot detection |
// app/api/example/route.ts
import { NextRequest, NextResponse } from 'next/server';
import { z } from 'zod';
const schema = z.object({ query: z.string().min(1).max(200) });
export async function GET(request: NextRequest) {
const result = schema.safeParse(Object.fromEntries(request.nextUrl.searchParams));
if (!result.success) return NextResponse.json({ error: 'Invalid input' }, { status: 400 });
return NextResponse.json(data);
}import fetch from 'node-fetch';
async function fetchWithRetry(url:string, opts={}, retries=2){
for(let i=0;i<=retries;i++){
try{ const res = await fetch(url, opts); if(!res.ok) throw new Error(`HTTP ${res.status}`); return await res.json(); }
catch(e){ if(i===retries) throw e; await new Promise(r=>setTimeout(r, 500*(i+1))); }
}
}
// usage
const data = await fetchWithRetry('https://api.example.com/data');### Server Action
```typescript
'use server';
import { createServerClient } from '@libs/auth';
import { revalidatePath } from 'next/cache';
export async function submitAction(formData: FormData) {
const { data: { user } } = await (await createServerClient()).auth.getUser();
if (!user) return { error: 'Unauthorized' };
revalidatePath('/places');
return { success: true };
}app/api/<name>/route.ts or app/<segment>/route.tscurl -fsS "http://localhost:3000/api/<name>?query=test" || (echo "route failed" && exit 1)/api/v1/places/:slug; HTTP methods: GET read, POST create, PATCH update, DELETE remove{ "data": ..., "meta": { "total": 42, "page": 1 } }{ "error": { "code": "VALIDATION_ERROR", "message": "...", "details": [...] } }limit, cursor, sort, order/api/v1/...; add fields only, never remove/rename; deprecation headers before removalCache-Control and ETag/If-None-Match headersf5c8508
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.