Documentation Index
Fetch the complete documentation index at: https://docs.monkepay.xyz/llms.txt
Use this file to discover all available pages before exploring further.
Hono
import { Hono } from 'hono'
import { MonkePayHono } from '@monkepay/sdk'
const app = new Hono()
const monkePay = MonkePayHono({
apiKeyId: process.env.MONKEPAY_API_KEY_ID!,
apiKeySecret: process.env.MONKEPAY_API_KEY_SECRET!,
price: '0.001', // default — used if no override
})
app.use('/api/cheap', monkePay({ price: '0.001' }))
app.use('/api/expensive', monkePay({ price: '0.10' }))
app.use('/api/report', monkePay({ price: '1.00', paymentMode: 'one_time' }))
app.get('/api/cheap', (c) => c.json({ result: 'cheap' }))
app.get('/api/expensive', (c) => c.json({ result: 'expensive' }))
app.get('/api/report', (c) => c.json({ result: 'report' }))
Express
import express from 'express'
import { MonkePayExpress } from '@monkepay/sdk'
const app = express()
const monkePay = MonkePayExpress({
apiKeyId: process.env.MONKEPAY_API_KEY_ID!,
apiKeySecret: process.env.MONKEPAY_API_KEY_SECRET!,
price: '0.001',
})
app.get('/api/cheap', monkePay({ price: '0.001' }), (req, res) => {
res.json({ result: 'cheap' })
})
app.get('/api/expensive', monkePay({ price: '0.10' }), (req, res) => {
res.json({ result: 'expensive' })
})
app.get('/api/report', monkePay({ price: '1.00', paymentMode: 'one_time' }), (req, res) => {
res.json({ result: 'report' })
})
Fastify
Fastify requires routes to be registered inside setup() for hooks to fire correctly. Each price tier gets its own app.register() call:
import Fastify from 'fastify'
import { MonkePayFastify } from '@monkepay/sdk'
const app = Fastify()
const monkePay = MonkePayFastify({
apiKeyId: process.env.MONKEPAY_API_KEY_ID!,
apiKeySecret: process.env.MONKEPAY_API_KEY_SECRET!,
price: '0.001',
})
app.register(monkePay({
price: '0.001',
setup: (scope) => {
scope.get('/api/cheap', async () => ({ result: 'cheap' }))
},
}))
app.register(monkePay({
price: '0.10',
setup: (scope) => {
scope.get('/api/expensive', async () => ({ result: 'expensive' }))
},
}))
app.register(monkePay({
price: '1.00',
paymentMode: 'one_time',
setup: (scope) => {
scope.get('/api/report', async () => ({ result: 'report' }))
},
}))
See the Fastify adapter docs for why setup() is required.
Next.js
Pass overrides as the second argument to the route wrapper:
// app/api/data/route.ts
import { MonkePayNext } from '@monkepay/sdk/next'
import { NextResponse } from 'next/server'
const monkePay = MonkePayNext({
apiKeyId: process.env.MONKEPAY_API_KEY_ID!,
apiKeySecret: process.env.MONKEPAY_API_KEY_SECRET!,
price: '0.001',
})
export const GET = monkePay(
async () => NextResponse.json({ result: 'cheap' })
)
export const POST = monkePay(
async (req) => NextResponse.json({ result: 'expensive' }),
{ price: '0.10' }
)
For different prices on different routes, create a new MonkePayNext instance per route file or pass overrides inline.
// app/api/report/route.ts — different file, different price
import { MonkePayNext } from '@monkepay/sdk/next'
import { NextResponse } from 'next/server'
const monkePay = MonkePayNext({
apiKeyId: process.env.MONKEPAY_API_KEY_ID!,
apiKeySecret: process.env.MONKEPAY_API_KEY_SECRET!,
price: '1.00',
paymentMode: 'one_time',
})
export const GET = monkePay(async () => NextResponse.json({ report: '...' }))