Self-hosted payment gateway with native $PP token integration.
Accept crypto payments across multiple chains with automatic verification.
Pay Portal is a self-hosted payment gateway that enables merchants to accept cryptocurrency payments through a simple, standardized protocol. Built on the HTTP 402 Payment Required standard, it provides automatic blockchain payment verification, multi-chain support, and native integration with the $PP token.
Unlike traditional payment processors, Pay Portal gives you complete control. You host your own server, use your own RPC nodes, and maintain full custody of all funds. No intermediaries, no platform fees—just direct blockchain payments with instant verification.
Run your own server with full control
Ethereum, Polygon, Solana, and more
Accept multiple tokens per payment link
Recurring payments with automatic billing
const { createServer } = require('@payportal/portal');
const server = createServer({
port: 3000,
apiKey: 'your-secret-key',
chains: [
{
chainId: 1,
name: 'Ethereum',
symbol: 'ETH',
rpcUrl: 'https://eth-rpc.com'
},
{
chainId: 101,
name: 'Solana',
symbol: 'SOL',
rpcUrl: 'https://api.mainnet-beta.solana.com',
type: 'solana'
}
]
});
server.start();
Pay Portal features native $PP token integration, providing exclusive benefits to token holders and creating real utility for the $PP ecosystem.
When customers pay with $PP tokens, they automatically receive a 10% discount on all payments. This incentivizes adoption and creates natural demand for the token.
Users holding $PP tokens in their wallet receive additional discounts based on their balance. The more $PP you hold, the bigger your discount—up to 50% off for Diamond tier holders.
Discounts are automatically calculated and applied when creating payment links. The system checks the customer's wallet balance and applies the appropriate tier discount in real-time.
const server = createServer({
// ... other config
portalToken: {
rpcUrl: 'https://api.mainnet-beta.solana.com',
enableTokenPayments: true,
tokenPaymentDiscount: 10, // 10% off when paying with $PP
enableHolderDiscounts: true,
discountTiers: [
{ minBalance: 1_000_000, discountPercent: 50, name: 'Diamond' },
{ minBalance: 500_000, discountPercent: 30, name: 'Platinum' },
{ minBalance: 100_000, discountPercent: 20, name: 'Gold' },
{ minBalance: 10_000, discountPercent: 10, name: 'Silver' },
{ minBalance: 1_000, discountPercent: 5, name: 'Bronze' }
]
}
});
$PP isn't just a token—it's the native currency of a production-ready payment gateway. Every merchant using Pay Portal creates demand for $PP through discounts and payment options.
As more merchants adopt Pay Portal, the utility and value of $PP increases. Each new integration creates more use cases and demand for the token.
Token holders receive automatic discounts on all payments—up to 50% off for Diamond tier. This creates a strong incentive to hold and accumulate $PP.
Unlike centralized payment processors, Pay Portal is self-hosted. Merchants control their own infrastructure, creating a decentralized ecosystem powered by $PP.
Pay Portal works across Ethereum, Solana, and other major chains. $PP serves as the universal discount token across all supported networks.
Get in early on a token with real utility and a working product. Pay Portal is production-ready and actively being used by merchants today.
Merchants create payment links via API or admin panel, specifying price, currency, and destination URL.
POST /api/links
{
"targetUrl": "https://example.com/premium",
"price": { "amount": "0.01", "tokenSymbol": "ETH", "chainId": 1 },
"recipientAddress": "0x..."
}
Customer visits the payment link. Server returns HTTP 402 with payment details and QR code.
GET /pay/abc123
→ 402 Payment Required
{
"protocol": "402-payportal-v1",
"payment": {
"amount": "0.01",
"tokenSymbol": "ETH",
"recipient": "0x..."
}
}
Customer scans QR code or pays manually. Payment is sent directly to merchant's wallet on-chain.
Customer submits transaction hash. Server verifies payment on-chain and grants access.
POST /pay/abc123/confirm
{ "txHash": "0x..." }
→ Payment verified ✅
→ 302 Redirect to target URL
Create unique payment links with automatic verification. Support for one-time payments, usage limits, and expiration dates.
Accept multiple tokens on a single payment link. Customers can choose their preferred currency—ETH, SOL, USDC, or $PP.
Recurring payment links with automatic billing cycles. Support for monthly, weekly, or custom intervals with trial periods.
Generate QR codes with wallet deep links. Compatible with Solana Pay and EIP-681 for seamless mobile payments.
Real-time notifications for payment events. Get notified when payments are confirmed, pending, or failed.
Support for Ethereum, Polygon, Solana, and any EVM-compatible chain. Add multiple chains to a single server instance.
npm install @payportal/portal
# Start with Ethereum and Solana
npx portal \
--chain 1:Ethereum:ETH:https://eth-rpc.com \
--solana https://api.mainnet-beta.solana.com \
--api-key your-secret-key
const response = await fetch('http://localhost:3000/api/links', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'your-secret-key'
},
body: JSON.stringify({
targetUrl: 'https://example.com/premium-content',
price: {
amount: '0.01',
tokenSymbol: 'ETH',
chainId: 1
},
recipientAddress: '0xYourWalletAddress',
description: 'Premium content access',
maxUses: 100
})
});
const { link } = await response.json();
console.log('Payment link:', link.url);
const response = await fetch('http://localhost:3000/api/links', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'your-secret-key'
},
body: JSON.stringify({
targetUrl: 'https://example.com/product',
price: {
amount: '0.01',
tokenSymbol: 'ETH',
chainId: 1
},
paymentOptions: [
{
amount: '0.5',
tokenSymbol: 'SOL',
chainId: 101,
recipientAddress: 'SolanaWalletAddress'
},
{
amount: '10',
tokenSymbol: 'USDC',
chainId: 1,
recipientAddress: '0xYourWalletAddress'
}
],
recipientAddress: '0xYourWalletAddress'
})
});
const response = await fetch('http://localhost:3000/api/links', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'your-secret-key'
},
body: JSON.stringify({
targetUrl: 'https://example.com/subscription',
price: {
amount: '0.1',
tokenSymbol: 'ETH',
chainId: 1
},
recipientAddress: '0xYourWalletAddress',
subscription: {
interval: 'month',
intervalCount: 1,
gracePeriodHours: 24,
maxCycles: 12,
trialDays: 7
}
})
});
Pay Portal implements the standard HTTP 402 Payment Required protocol. When a customer visits a payment link, the server returns a 402 status with payment details. After payment verification, subsequent requests return 302 redirects to the target URL.
All payments are verified on-chain using RPC nodes. The server checks transaction confirmations, validates amounts, and verifies recipient addresses. Support for both EVM chains (via eth_getTransactionByHash) and Solana (via getTransaction).
Each merchant runs their own Pay Portal server instance. You control your RPC endpoints, API keys, and infrastructure. No central authority, no platform fees—just direct blockchain payments.
Payment links and transactions are stored in-memory by default (with optional database integration). Webhooks provide real-time notifications for payment events, subscription renewals, and link status changes.
Start accepting crypto payments today with Pay Portal. Self-hosted, production-ready, and powered by $PP.