# Clone and navigate to examplecdexamples/go/nethttp-server
# Set your Solana walletexportX402_PAYMENT_ADDRESS="YOUR_SOLANA_WALLET_ADDRESS"exportX402_TOKEN_MINT="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"exportX402_NETWORK="solana-devnet"
🚀 X402 Server starting on port 8080
📍 Network: solana-devnet
💰 Payment Address: YOUR_WALLET_ADDRESS
🪙 Token Mint: EPjFWdd5...
Available endpoints:
GET /api/free-data - Free access (no payment)
GET /api/premium-data - $0.10 USDC
GET /api/expensive-data - $1.00 USDC
POST /api/process - $0.50 USDC
{"max_amount_required":"0.10","asset_type":"SPL","asset_address":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payment_address":"YOUR_WALLET_ADDRESS","network":"solana-devnet","expires_at":"2025-01-01T00:05:00Z","nonce":"abc123...","payment_id":"def456...","resource":"/api/premium-data","description":"Premium market data access"}
// Free endpointmux.HandleFunc("/api/free-data",freeDataHandler)// Premium endpoints with different pricesmux.Handle("/api/premium-data",nethttp.PaymentRequired(nethttp.PaymentRequiredOptions{Amount:"0.10",Description:"Premium market data access",})(http.HandlerFunc(premiumDataHandler)))
# First request returns 402curlhttp://localhost:8080/api/premium-data
# After payment with auth headercurl-H"X-Payment-Authorization: <base64>"http://localhost:8080/api/premium-data
funcfreeDataHandler(whttp.ResponseWriter,r*http.Request){data:=map[string]interface{}{"message":"This is free public data","data":map[string]interface{}{"timestamp":"2024-01-01T00:00:00Z","value":"basic information",},}respondJSON(w,http.StatusOK,data)}
funcpremiumDataHandler(whttp.ResponseWriter,r*http.Request){// Access payment details if neededauth:=nethttp.GetPaymentAuthorization(r)ifauth!=nil{log.Printf("✅ Payment received: %s USDC from %s",auth.ActualAmount,auth.PublicKey)}data:=map[string]interface{}{"message":"This is premium data (paid $0.10)","data":map[string]interface{}{"timestamp":"2024-01-01T00:00:00Z","value":"premium market data","metrics":map[string]interface{}{"price":42.50,"volume":1000000,"trend":"bullish",},},}respondJSON(w,http.StatusOK,data)}
# RequiredX402_PAYMENT_ADDRESS="YOUR_SOLANA_WALLET"X402_TOKEN_MINT="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"# OptionalX402_NETWORK="solana-devnet"# or solana-mainnetX402_RPC_URL="https://api.devnet.solana.com"PORT=8080
import"golang.org/x/time/rate"varlimiter=rate.NewLimiter(100,10)funcrateLimited(hhttp.HandlerFunc)http.HandlerFunc{returnfunc(whttp.ResponseWriter,r*http.Request){if!limiter.Allow(){http.Error(w,"Too many requests",http.StatusTooManyRequests)return}h(w,r)}}mux.Handle("/api/premium",rateLimited(premiumHandler))
typeSubscriptionstruct{AddressstringPaidUntiltime.TimeRequestsint}funccheckSubscription(auth*core.PaymentAuthorization)bool{// Check if payer has active subscriptionreturntrue}