402 Payment Required for unpaid requests and serve
resources when a valid payment signature is provided.
Prerequisites
Before you begin, ensure you have:- Node.js v18 or later and npm installed.
- An EVM wallet address where you want to receive USDC payments.
Step 1: Set up your project
1.1. Create a new project
Create a new directory and initialize a Node.js project:1.2. Install dependencies
1.3. Initialize TypeScript
Create atsconfig.json file:
tsconfig.json file:
Step 2: Create the server
Create a new fileserver.ts with an Express app and the Gateway middleware:
server.ts
0xYOUR_WALLET_ADDRESS with the EVM address where you want to receive
payments. By default, the middleware accepts payments from all Gateway-supported
blockchains.
Step 3: Protect a route
Usegateway.require() to protect any route with a price. When a request
arrives without a valid payment, the middleware returns 402 Payment Required
with the payment details. When a valid payment signature is attached, the
middleware verifies it, settles it with Gateway, and calls next():
server.ts
Step 4: Test the server
4.1. Start the server
4.2. Send an unpaid request
In a separate terminal, usecurl to verify the server returns a 402
response:
402 Payment Required response with a JSON body containing the
accepts array with payment options.
4.3. Pay with a buyer client
Use the buyer quickstart client to make a gasless payment to your server:Advanced: Use BatchFacilitatorClient directly
If you are not using Express, or need custom logic like dynamic pricing, use the
BatchFacilitatorClient directly:
server.ts
Gateway’s
settle() endpoint is optimized for low latency and guarantees
settlement. Use settle() directly rather than calling verify() followed by
settle() in production flows.Limit accepted networks (optional)
By default, the middleware accepts payments from any Gateway-supported blockchain. This maximizes your reach since any buyer with a Gateway balance can pay you, regardless of which blockchain they deposited on. If you need to restrict payments to specific networks:Payment signatures must have at least 3 days of validity. The
validBefore
timestamp in the buyer’s EIP-3009 authorization must be at least 3 days in the
future, or Gateway will reject it.