๐ Smithery is now a part of Arcade.dev! Read more in our announcement here
Scaffold new Next.js API routes with proper patterns. Use when user mentions "create endpoint", "new API route", "add route", or "API for".
Create API routes following project conventions for Next.js App Router.
Determine route path and HTTP methods needed
Create route file at src/app/api/<path>/route.ts
src/app/api/<path>/route.ts
Use this template:
import { NextResponse } from 'next/server'; import { sql } from '@/lib/db'; export const dynamic = 'force-dynamic'; export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const limit = parseInt(searchParams.get('limit') || '10', 10); const result = await sql` SELECT * FROM table_name ORDER BY created_at DESC LIMIT ${limit} `; return NextResponse.json({ data: result }); } catch (error) { console.error('Error in GET /api/<path>:', error); return NextResponse.json( { error: 'Failed to fetch data' }, { status: 500 } ); } } export async function POST(request: Request) { try { const body = await request.json(); // Validate required fields if (!body.requiredField) { return NextResponse.json( { error: 'Missing required field' }, { status: 400 } ); } const result = await sql` INSERT INTO table_name (field) VALUES (${body.field}) RETURNING * `; return NextResponse.json({ data: result[0] }, { status: 201 }); } catch (error) { console.error('Error in POST /api/<path>:', error); return NextResponse.json( { error: 'Failed to create' }, { status: 500 } ); } }
For admin routes, place under src/app/api/admin/
src/app/api/admin/
Add types to src/lib/db.ts if needed
src/lib/db.ts
force-dynamic
{ data, error, success }
console.error('Error in GET /api/x:', error)
// TODO: Add authentication in production