Prerequisites
- Node.js 18 or later.
- A Hono service running on Node.
- A seller wallet address for
payTo. - A buyer wallet with deposited collateral for testing paid calls.
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Use 4Mica with a Hono service.
payTo.npm install hono @hono/node-server express @4mica/x402 @x402/fetch viem
pnpm install hono @hono/node-server express @4mica/x402 @x402/fetch viem
yarn add hono @hono/node-server express @4mica/x402 @x402/fetch viem
bun add hono @hono/node-server express @4mica/x402 @x402/fetch viem
PRIVATE_KEY=0xYourPrivateKey
PAY_TO=0xYourSellerAddress
PAY_TO as the seller address advertised by protected routes.import express from "express";
import { Hono } from "hono";
import { serve } from "@hono/node-server";
import { paymentMiddlewareFromConfig } from "@4mica/x402/server/express";
const paid = express();
paid.use(express.json());
paid.use(
paymentMiddlewareFromConfig(
{
"GET /premium-content": {
accepts: {
scheme: "4mica-credit",
price: "$0.10",
network: "eip155:84532",
payTo: process.env.PAY_TO ?? "0xYourAddress",
},
description: "Access to premium Hono content",
},
},
),
);
paid.get("/premium-content", (req, res) => {
res.json({ message: "Paid content from Hono's Node service" });
});
paid.listen(3030);
const app = new Hono();
app.get("/", (c) => c.text("Hono app"));
serve({ fetch: app.fetch, port: 3000 });
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { FourMicaEvmScheme } from "@4mica/x402/client";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const scheme = await FourMicaEvmScheme.create(account);
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:84532", client: scheme }],
});
const response = await fetchWithPayment("http://localhost:3030/premium-content");
const data = await response.json();