Getting StartedServer Integration

Server Integration

Integrate T402 payments into your HTTP server.

Express.js

import express from 'express'
import { paymentMiddleware, t402ResourceServer } from '@t402/express'
import { ExactEvmScheme } from '@t402/evm'
 
const app = express()
 
// Configure payment requirements per route
const paymentConfig = {
  'GET /api/premium': {
    accepts: [
      { scheme: 'exact', network: 'eip155:8453', price: '$0.01', payTo: '0x...' },
      { scheme: 'exact', network: 'eip155:42161', price: '$0.01', payTo: '0x...' },
    ],
    description: 'Premium API access'
  },
  'POST /api/generate': {
    accepts: [
      { scheme: 'exact', network: 'eip155:8453', price: '$0.10', payTo: '0x...' }
    ],
    description: 'AI generation endpoint'
  }
}
 
// Create resource server with schemes
const resourceServer = new t402ResourceServer(facilitatorClient)
  .register('eip155:8453', new ExactEvmScheme())
  .register('eip155:42161', new ExactEvmScheme())
 
// Add middleware
app.use(paymentMiddleware(paymentConfig, resourceServer))
 
// Your routes
app.get('/api/premium', (req, res) => {
  res.json({ data: 'Premium content!' })
})
 
app.post('/api/generate', (req, res) => {
  res.json({ result: 'Generated content!' })
})
 
app.listen(3000)

Next.js

// app/api/premium/route.ts
import { withPayment } from '@t402/next'
import { ExactEvmScheme } from '@t402/evm'
 
export const GET = withPayment(
  async (req) => {
    return Response.json({ data: 'Premium content!' })
  },
  {
    scheme: 'exact',
    network: 'eip155:8453',
    price: '$0.01',
    payTo: '0x...',
    description: 'Premium API access'
  }
)

Hono

import { Hono } from 'hono'
import { paymentMiddleware } from '@t402/hono'
import { ExactEvmScheme } from '@t402/evm'
 
const app = new Hono()
 
app.use('/api/*', paymentMiddleware({
  'GET /api/premium': {
    scheme: 'exact',
    network: 'eip155:8453',
    price: '$0.01',
    payTo: '0x...'
  }
}))
 
app.get('/api/premium', (c) => {
  return c.json({ data: 'Premium content!' })
})
 
export default app

Python (FastAPI)

from fastapi import FastAPI
from t402.fastapi import PaymentMiddleware, PaymentConfig
 
app = FastAPI()
 
# Add payment middleware
app.add_middleware(
    PaymentMiddleware,
    config={
        "GET /api/premium": PaymentConfig(
            scheme="exact",
            network="eip155:8453",
            price="$0.01",
            pay_to="0x...",
            description="Premium API access"
        )
    },
    facilitator_url="https://facilitator.t402.io"
)
 
@app.get("/api/premium")
async def premium():
    return {"data": "Premium content!"}

Python (Flask)

from flask import Flask
from t402.flask import create_paywall
 
app = Flask(__name__)
 
paywall = create_paywall(
    routes={
        "GET /api/premium": {
            "scheme": "exact",
            "network": "eip155:8453",
            "price": "$0.01",
            "pay_to": "0x...",
            "description": "Premium API access"
        }
    },
    facilitator_url="https://facilitator.t402.io"
)
app.register_blueprint(paywall)
 
@app.route("/api/premium")
def premium():
    return {"data": "Premium content!"}

Go (Gin)

package main
 
import (
    "github.com/gin-gonic/gin"
    t402 "github.com/t402-io/t402/go"
    "github.com/t402-io/t402/go/http/gin"
)
 
func main() {
    r := gin.Default()
 
    // Add payment middleware
    r.Use(t402gin.PaymentMiddleware(t402gin.Config{
        Routes: map[string]t402.PaymentRequirements{
            "GET /api/premium": {
                Scheme:  "exact",
                Network: "eip155:8453",
                Price:   "$0.01",
                PayTo:   "0x...",
            },
        },
        FacilitatorURL: "https://facilitator.t402.io",
    }))
 
    r.GET("/api/premium", func(c *gin.Context) {
        c.JSON(200, gin.H{"data": "Premium content!"})
    })
 
    r.Run(":3000")
}

Multi-Network Support

Accept payments from multiple networks:

const paymentConfig = {
  'GET /api/data': {
    accepts: [
      // EVM chains
      { scheme: 'exact', network: 'eip155:1', price: '$0.01', payTo: evmAddress },
      { scheme: 'exact', network: 'eip155:8453', price: '$0.01', payTo: evmAddress },
      { scheme: 'exact', network: 'eip155:42161', price: '$0.01', payTo: evmAddress },
      // TON
      { scheme: 'exact', network: 'ton:mainnet', price: '$0.01', payTo: tonAddress },
      // TRON
      { scheme: 'exact', network: 'tron:mainnet', price: '$0.01', payTo: tronAddress },
    ],
    description: 'Multi-network API access'
  }
}

Custom Pricing

Dynamic pricing based on request:

app.use(paymentMiddleware({
  'POST /api/generate': {
    accepts: [
      { scheme: 'exact', network: 'eip155:8453', payTo: '0x...' }
    ],
    // Dynamic pricing function
    getPrice: (req) => {
      const tokens = parseInt(req.body.maxTokens) || 100
      return `$${(tokens * 0.001).toFixed(4)}`
    },
    description: 'AI text generation'
  }
}))