You create an API route by adding a file to pages/api in the Pages Router, or a route.js file under app in the App Router. Either way the file becomes an HTTP endpoint on the server, and its code never ships to the browser.
In the Pages Router, any file inside pages/api maps to /api/*. It default-exports one handler that receives Node.js req and res objects and branches on req.method.
// pages/api/users.js
export default function handler(req, res) {
if (req.method === 'GET') {
res.status(200).json({ users: [] });
} else {
res.setHeader('Allow', ['GET']);
res.status(405).end(`Method ${req.method} Not Allowed`);
}
}
In the App Router, a route.js file exports one function per HTTP method. Route Handlers use the Web Request and Response APIs, so you return a Response instead of writing to res.
// app/api/users/route.js
export async function GET() {
return Response.json({ users: [] });
}
export async function POST(request) {
const data = await request.json();
// Process data
return Response.json({ success: true });
}
A route.js file cannot sit in the same folder as a page.js, which is why APIs usually live under app/api. Both kinds are public endpoints, so validate input and check authorization in each one.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓