Getting Started with Next.js
Start accepting x402 payments in your Next.js application in 2 minutes.
Example Code
You can find the full code for this example on GitHub.
Step 1: Install Dependencies
Install the required packages for your Next.js application:
npm install x402 next react react-dom
Or with other package managers:
# pnpm
pnpm add x402 next react react-dom
# yarn
yarn add x402 next react react-dom
# bun
bun add x402 next react react-dom
Step 2: Set Your Environment Variables
Create a .env.local file in your project root:
echo "ADDRESS=0x...\nFACILITATOR_URL=https://x402.blockeden.xyz\nNETWORK=sui\nBLOCKEDEN_API_KEY=your_api_key_here" > .env.local
Your .env.local file should look like this:
ADDRESS=0x... # wallet public address you want to receive payments to
FACILITATOR_URL=https://x402.blockeden.xyz
NETWORK=sui # recommended for fastest settlement
BLOCKEDEN_API_KEY=your_api_key_here # get from https://blockeden.xyz/dash/
Network Options
BlockEden.xyz supports multiple networks:
sui(recommended for fastest settlement)ethereumbasepolygonavalanche
Step 3: Create Payment-Protected API Routes
Next.js uses a file-based routing system. Create API routes in the app/api directory (App Router) or pages/api directory (Pages Router).
Using App Router (Next.js 13+)
Create app/api/weather/route.ts:
import { NextRequest } from "next/server";
import { requirePayment } from "x402-nextjs";
const facilitatorUrl = process.env.FACILITATOR_URL!;
const payTo = process.env.ADDRESS! as `0x${string}`;
const network = process.env.NETWORK || "sui";
const apiKey = process.env.BLOCKEDEN_API_KEY!;
export const GET = requirePayment(
{
price: "$0.001",
network,
},
payTo,
{
url: facilitatorUrl,
apiKey,
},
async (request: NextRequest) => {
return Response.json({
report: {
weather: "sunny",
temperature: 70,
location: "San Francisco",
},
});
},
);
Create app/api/premium/content/route.ts:
import { NextRequest } from "next/server";
import { requirePayment } from "x402-nextjs";
const facilitatorUrl = process.env.FACILITATOR_URL!;
const payTo = process.env.ADDRESS! as `0x${string}`;
const network = process.env.NETWORK || "sui";
const apiKey = process.env.BLOCKEDEN_API_KEY!;
export const GET = requirePayment(
{
price: "$0.05",
network,
},
payTo,
{
url: facilitatorUrl,
apiKey,
},
async (request: NextRequest) => {
return Response.json({
content: "This is premium content",
type: "article",
timestamp: new Date().toISOString(),
});
},
);