@payweave/express
v0.0.3
Published
Express middleware for PayWeave - accept per-request USD micropayments on any Express route.
Readme
@payweave/express
Express middleware for PayWeave - accept per-request USD micropayments on any Express route.
Install
npm install @payweave/expressQuick Start
import { Payweave } from '@payweave/express';
import express from 'express';
const app = express();
const payweave = new Payweave(
process.env.PAYWEAVE_APP_ID!,
process.env.PAYWEAVE_APP_SECRET!
);
app.get(
'/api/weather',
payweave.charge({ price: '0.001', description: 'Weather API' }),
(req, res) => {
res.json({ temp: 72, unit: 'F' });
}
);
app.listen(3000);API
new Payweave(appId, appSecret, baseUrl?)
| Parameter | Type | Description |
|-----------|------|-------------|
| appId | string | Your app key ID |
| appSecret | string | Your app secret |
| baseUrl | string? | API base URL (defaults to https://api.payweave.app) |
payweave.charge(options)
Returns Express middleware (req, res, next) => Promise<void>.
| Option | Type | Description |
|--------|------|-------------|
| price | string \| (req) => string \| Promise<string> | USD price per request |
| description | string? | Human-readable description |
| meta | Record<string, string>? | API metadata for agent discovery |
Examples
Static pricing
app.get(
'/api/search',
payweave.charge({ price: '0.01' }),
(req, res) => {
res.json({ results: [] });
}
);Dynamic pricing
app.post(
'/api/generate',
payweave.charge({
price: (req) => req.body.premium ? '0.05' : '0.01',
description: 'Text generation API',
}),
(req, res) => {
res.json({ text: 'generated content' });
}
);With metadata for agent discovery
app.post(
'/api/sentiment',
payweave.charge({
price: '0.005',
description: 'Sentiment analysis',
meta: {
'method': 'POST',
'input.content-type': 'application/json',
'input.schema': '{"type":"object","properties":{"text":{"type":"string"}}}',
'output.schema': '{"type":"object","properties":{"score":{"type":"number"}}}',
},
}),
(req, res) => {
res.json({ score: 0.85 });
}
);Multiple paid routes
app.get('/api/weather', payweave.charge({ price: '0.001' }), weatherHandler);
app.get('/api/forecast', payweave.charge({ price: '0.005' }), forecastHandler);
app.post('/api/analyze', payweave.charge({ price: '0.01' }), analyzeHandler);How It Works
- A request hits your route without a payment header
- The middleware responds with
402 Payment Requiredand aWWW-Authenticateheader containing pricing - The agent submits payment on Tempo and retries with
Authorization: Payment <credential> - PayWeave verifies the payment and sets a
Payment-Receiptheader - Your handler executes normally
License
MIT
