How to Create Api Routes in Nextjs

Introduction Next.js has rapidly become one of the most popular React frameworks for building modern web applications. One of its standout features is its built-in support for creating API routes, which allows developers to build backend endpoints directly within their Next.js projects. This eliminates the need for a separate backend server and streamlines full-stack development. Creating API rout

Nov 17, 2025 - 11:35
Nov 17, 2025 - 11:35
 3

Introduction

Next.js has rapidly become one of the most popular React frameworks for building modern web applications. One of its standout features is its built-in support for creating API routes, which allows developers to build backend endpoints directly within their Next.js projects. This eliminates the need for a separate backend server and streamlines full-stack development.

Creating API routes in Next.js is essential for handling server-side logic such as data fetching, form submissions, authentication, and interacting with databases or third-party services. This tutorial will provide a comprehensive, step-by-step guide on how to create and manage API routes in Next.js, along with best practices, useful tools, real-world examples, and answers to frequently asked questions.

Step-by-Step Guide

1. Setting Up Your Next.js Project

Before creating API routes, you need a Next.js project. If you dont have one yet, you can create it using the following command:

npx create-next-app@latest my-nextjs-app

Navigate to your project directory:

cd my-nextjs-app

Once set up, open the project in your preferred code editor.

2. Understanding the API Routes Folder Structure

API routes in Next.js reside inside the pages/api directory. Each file within this folder corresponds to a unique API endpoint. For example, pages/api/hello.js becomes accessible at /api/hello.

3. Creating Your First API Route

Create a file named hello.js inside the pages/api folder with the following content:

export default function handler(req, res) {

res.status(200).json({ message: 'Hello from Next.js API!' });

}

This simple handler responds with a JSON message when you visit /api/hello in your browser or send a request to it.

4. Handling Different HTTP Methods

API routes can respond differently based on HTTP methods such as GET, POST, PUT, DELETE, etc. Heres how to handle multiple methods within one API route:

export default function handler(req, res) {

const { method } = req;

switch (method) {

case 'GET':

res.status(200).json({ message: 'This is a GET request' });

break;

case 'POST':

// Process POST request

res.status(201).json({ message: 'Data received' });

break;

default:

res.setHeader('Allow', ['GET', 'POST']);

res.status(405).end(Method ${method} Not Allowed);

}

}

5. Accessing Request Data

You can access query parameters, request body, and headers in your API routes.

  • Query Parameters: Available via req.query
  • Request Body: Available via req.body (usually for POST, PUT requests)
  • Headers: Accessible through req.headers

Example of accessing query parameters:

export default function handler(req, res) {

const { name } = req.query;

res.status(200).json({ message: Hello, ${name}! });

}

6. Parsing JSON Request Body

Next.js API routes automatically parse JSON request bodies, so you can directly access the data via req.body. Example:

export default function handler(req, res) {

if (req.method === 'POST') {

const data = req.body;

res.status(200).json({ receivedData: data });

} else {

res.status(405).end('Method Not Allowed');

}

}

7. Returning Responses

Use res.status(code) to set response status and res.json(data) to send JSON responses. You can also use res.send() for plain text or HTML.

8. Using Environment Variables

Protect sensitive information like API keys by storing them in environment variables. Next.js supports .env.local files for development:

API_SECRET=your_api_secret_key

Access these variables in your API routes using process.env.API_SECRET.

9. Deploying API Routes

When deploying your Next.js app (e.g., on Vercel), API routes are deployed alongside your frontend automatically, making serverless functions instantly available.

Best Practices

1. Keep API Routes Lightweight

API routes should handle only server-side logic and avoid heavy processing to ensure fast response times. Offload complex tasks to background jobs or external services.

2. Validate Input Thoroughly

Always validate and sanitize incoming data to prevent injection attacks and ensure data integrity. Use validation libraries such as Joi or Yup.

3. Use Proper HTTP Status Codes

Return appropriate HTTP status codes for different scenarios (e.g., 200 for success, 400 for bad request, 401 for unauthorized, 404 for not found, 500 for server errors).

4. Secure API Routes

Implement authentication and authorization where necessary to protect sensitive endpoints. Consider using JWT, OAuth, or NextAuth.js for authentication.

5. Handle Errors Gracefully

Use try-catch blocks to manage exceptions and return meaningful error messages to clients without exposing sensitive information.

6. Cache Responses When Appropriate

Improve performance by caching responses for read-heavy endpoints using HTTP headers or caching solutions like Redis.

7. Modularize Code

Keep API route handlers clean by separating business logic into helper functions or services outside the pages/api directory.

Tools and Resources

1. Next.js Documentation

The official Next.js docs provide comprehensive explanations and examples for API routes: https://nextjs.org/docs/api-routes/introduction

2. Postman

A popular API testing tool that allows you to send various HTTP requests and inspect responses, ideal for testing your API routes during development.

3. Insomnia

An alternative to Postman for API testing with a clean interface and powerful features for debugging HTTP requests.

4. Validation Libraries

Libraries like Joi and Yup help enforce data validation schemas.

5. NextAuth.js

A complete authentication solution for Next.js applications, supporting multiple providers and easy integration with API routes.

6. Vercel

The platform created by the creators of Next.js, optimized for seamless deployment of Next.js apps with API routes as serverless functions.

Real Examples

Example 1: Simple GET API Route

// pages/api/status.js

export default function handler(req, res) {

res.status(200).json({ status: 'OK', timestamp: new Date().toISOString() });

}

Example 2: POST API Route Handling Form Submission

// pages/api/contact.js

export default function handler(req, res) {

if (req.method === 'POST') {

const { name, email, message } = req.body;

if (!name || !email || !message) {

return res.status(400).json({ error: 'Missing required fields' });

}

// Logic to save message to database or send email

res.status(200).json({ message: 'Message received successfully' });

} else {

res.setHeader('Allow', ['POST']);

res.status(405).end(Method ${req.method} Not Allowed);

}

}

Example 3: Using Query Parameters

// pages/api/greet.js

export default function handler(req, res) {

const { name = 'Guest' } = req.query;

res.status(200).json({ greeting: Hello, ${name}! });

}

Example 4: Securing an API Route with a Simple Token Check

// pages/api/secure-data.js

export default function handler(req, res) {

const token = req.headers.authorization;

if (token !== Bearer ${process.env.API_SECRET}) {

return res.status(401).json({ error: 'Unauthorized' });

}

res.status(200).json({ data: 'Sensitive information' });

}

FAQs

1. What are Next.js API routes?

Next.js API routes are serverless functions that live inside the pages/api directory. They allow you to build backend endpoints within your Next.js application without needing a separate backend server.

2. How do I test my API routes?

You can test API routes by visiting their URLs in the browser for GET requests or by using API clients like Postman or Insomnia to send various HTTP requests.

3. Can I connect to a database from API routes?

Yes, API routes can interact with databases. You can import database clients and execute queries within your API handlers. Just ensure database connections are managed efficiently to prevent performance issues.

4. Are Next.js API routes serverless functions?

Yes, when deployed on platforms like Vercel, each API route is treated as an individual serverless function, scaling automatically based on demand.

5. How do I secure my API routes?

Implement authentication and authorization mechanisms such as token validation, OAuth, or session checks within your API route handlers. Avoid exposing sensitive data and validate all inputs.

6. Can API routes handle file uploads?

Yes, but Next.js does not parse multipart/form-data by default. You will need to use third-party libraries like formidable or multer and disable Next.js body parsing for that route.

Conclusion

Creating API routes in Next.js is a powerful feature that enables developers to build full-stack applications seamlessly. By following the step-by-step guide in this tutorial, you can create efficient, secure, and scalable API endpoints directly within your Next.js projects.

Adhering to best practices such as input validation, proper error handling, and security measures ensures your APIs remain robust and maintainable. Coupled with useful tools and real-world examples, this knowledge equips you to leverage Next.js API routes effectively for any web application needs.

As Next.js continues to evolve, mastering API routes will remain a key skill for modern React developers seeking to build performant, serverless-ready web apps.