Hono Adapter
The @x402/hono package provides middleware for Hono applications. It's optimized for edge runtimes like Cloudflare Workers, Deno Deploy, and Bun.
Installation
Quick Start
import { Hono } from 'hono';
import { paymentMiddleware } from '@x402/hono';
const app = new Hono();
// Add payment middleware
app.use('/api/premium/*', paymentMiddleware({
facilitatorUrl: 'https://x402.org/facilitator',
routes: {
'GET /api/premium/data': {
accepts: {
scheme: 'exact',
network: 'eip155:8453',
payTo: '0xYourAddress',
price: '$0.01',
},
},
},
}));
app.get('/api/premium/data', (c) => {
return c.json({
data: 'Premium content!',
paidBy: c.get('x402')?.payer,
});
});
export default app;
Cloudflare Workers
import { Hono } from 'hono';
import { paymentMiddleware } from '@x402/hono';
type Bindings = {
PAYMENT_ADDRESS: string;
FACILITATOR_URL: string;
};
const app = new Hono<{ Bindings: Bindings }>();
app.use('/api/*', async (c, next) => {
const middleware = paymentMiddleware({
facilitatorUrl: c.env.FACILITATOR_URL,
routes: {
'GET /api/data': {
accepts: {
scheme: 'exact',
network: 'eip155:8453',
payTo: c.env.PAYMENT_ADDRESS,
price: '$0.01',
},
},
},
});
return middleware(c, next);
});
app.get('/api/data', (c) => {
return c.json({ success: true });
});
export default app;
Context Extensions
After successful payment, access payment info via context:
app.get('/api/premium', (c) => {
const payment = c.get('x402');
return c.json({
payer: payment?.payer,
amount: payment?.amount.toString(),
network: payment?.network,
});
});
Deno Deploy
import { Hono } from 'https://deno.land/x/hono/mod.ts';
import { paymentMiddleware } from '@x402/hono';
const app = new Hono();
app.use('/api/*', paymentMiddleware({
facilitatorUrl: Deno.env.get('FACILITATOR_URL'),
routes: {
'GET /api/data': {
accepts: {
scheme: 'exact',
network: 'eip155:8453',
payTo: Deno.env.get('PAYMENT_ADDRESS'),
price: '$0.01',
},
},
},
}));
Deno.serve(app.fetch);
Bun
import { Hono } from 'hono';
import { paymentMiddleware } from '@x402/hono';
const app = new Hono();
app.use('/api/*', paymentMiddleware({
facilitatorUrl: process.env.FACILITATOR_URL,
routes: {
'GET /api/data': {
accepts: {
scheme: 'exact',
network: 'eip155:8453',
payTo: process.env.PAYMENT_ADDRESS,
price: '$0.01',
},
},
},
}));
export default app;
See Also
- Express Adapter - For Node.js
- Next.js Adapter - For Next.js
- Core SDK - Low-level API