Mppx
TypeScript Interface for Machine Payments Protocol
Install / Use
/learn @wevm/MppxREADME
Documentation
Full documentation, API reference, and guides are available at mpp.dev/sdk/typescript.
Install
npm i mppx
Quick Start
Server
import { Mppx, tempo } from 'mppx/server'
const mppx = Mppx.create({
methods: [
tempo({
currency: '0x20c0000000000000000000000000000000000000',
recipient: '0x742d35Cc6634c0532925a3b844bC9e7595F8fE00',
}),
],
})
export async function handler(request: Request) {
const response = await mppx.charge({ amount: '1' })(request)
if (response.status === 402) return response.challenge
return response.withReceipt(Response.json({ data: '...' }))
}
Client
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'
Mppx.create({
methods: [tempo({ account: privateKeyToAccount('0x...') })],
})
// Global fetch now handles 402 automatically
const res = await fetch('https://mpp.dev/api/ping/paid')
Examples
| Example | Description | | ------------------------------------------------------ | ---------------------------------------------------- | | charge | Payment-gated photo generation API | | charge-wagmi | Payment-gated charge with Wagmi + React | | session/multi-fetch | Multiple paid requests over a single payment channel | | session/sse | Pay-per-token LLM streaming with SSE | | stripe | Stripe SPT charge with automatic client |
npx gitpick wevm/mppx/examples/charge
CLI
mppx includes a basic CLI for making HTTP requests with automatic payment handling.
# create account - stored in keychain, autofunded on testnet
mppx account create
# make request - automatic payment handling, curl-like api
mppx example.com
You can also install globally to use the mppx CLI from anywhere:
npm i -g mppx
Payments Proxy
mppx exports a Proxy server handler so that you can create or define a 402-protected payments proxy for any API.
import { openai, stripe, Proxy } from 'mppx/proxy'
import { Mppx, tempo } from 'mppx/server'
const mppx = Mppx.create({ methods: [tempo()] })
const proxy = Proxy.create({
services: [
openai({
apiKey: 'sk-...',
routes: {
'POST /v1/chat/completions': mppx.charge({ amount: '0.05' }),
'POST /v1/completions': mppx.stream({ amount: '0.0001' }),
'GET /v1/models': mppx.free(),
},
}),
stripe({
apiKey: 'sk-...',
routes: {
'POST /v1/charges': mppx.charge({ amount: '0.01' }),
'GET /v1/customers/:id': mppx.free(),
},
}),
],
})
createServer(proxy.listener) // Node.js
Bun.serve(proxy) // Bun
Deno.serve(proxy.fetch) // Deno
app.use(proxy.listener) // Express
app.all('*', (c) => proxy.fetch(c.req.raw)) // Hono
app.all('*', (c) => proxy.fetch(c.request)) // Elysia
export const GET = proxy.fetch // Next.js
export const POST = proxy.fetch // Next.js
This exposes the following routes:
| Route | Pricing |
| ---------------------------------- | ---------------------------- |
| POST /openai/v1/chat/completions | charge $0.005 |
| POST /openai/v1/completions | stream $0.0001 per token |
| GET /openai/v1/models | free |
| POST /stripe/v1/charges | charge $0.01 |
| GET /stripe/v1/customers/:id | free |
Protocol
Built on the "Payment" HTTP Authentication Scheme. See mpp-specs for the full specification.
License
MIT
Related Skills
node-connect
334.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
334.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.2kCommit, push, and open a PR
