Express.js Integration

Add x402 payments to your Express.js API in minutes

Installation

npm install @getconduit/x402-express

Basic Setup

import express from 'express'
import { x402Middleware } from '@getconduit/x402-express'

const app = express()

// Configure x402 middleware
app.use(x402Middleware({
  facilitatorUrl: 'https://getconduit.io/api/facilitator',
  network: 'solana', // or 'solana-devnet'
}))

// Protected endpoint
app.get('/api/premium-content', async (req, res) => {
  // This endpoint requires payment
  res.json({
    message: 'Premium content unlocked!',
    data: { /* your premium data */ }
  })
})

app.listen(3000, () => {
  console.log('Server running on port 3000')
})

Configuration Options

OptionTypeDescription
facilitatorUrlstringConduit facilitator URL
networkstringSolana network (mainnet/devnet)
pricenumberPrice in USDC (default: 0.01)

Advanced Example

import express from 'express'
import { x402Middleware, requirePayment } from '@getconduit/x402-express'

const app = express()

app.use(x402Middleware({
  facilitatorUrl: 'https://getconduit.io/api/facilitator',
  network: 'solana',
}))

// Free endpoint
app.get('/api/public', (req, res) => {
  res.json({ message: 'This is free!' })
})

// Paid endpoint with custom price
app.get('/api/premium', 
  requirePayment({ price: 0.05 }),
  (req, res) => {
    res.json({ 
      message: 'Premium content',
      payer: req.payment.payer 
    })
  }
)

// Dynamic pricing
app.get('/api/data/:size',
  requirePayment((req) => {
    const size = req.params.size
    return { price: size === 'large' ? 0.10 : 0.01 }
  }),
  (req, res) => {
    res.json({ data: '...' })
  }
)

app.listen(3000)

Next Steps