payram-headless-setup
PayRam Headless Setup
Looking for standard deployment with web UI? See
payram-setupfor the full dashboard installation.
PayRam Headless enables fully automated, CLI-driven payment infrastructure for AI agents, automation pipelines, and serverless environments. No web dashboard — pure API interactions controlled via environment variables and shell commands.
When to Use Headless Mode
- AI Agent Payments: Claude, Copilot, custom MCP clients processing payments autonomously
- CI/CD Integration: Automated payment testing in deployment pipelines
- Serverless Infrastructure: Lambda/Cloud Functions triggering payment operations
- Treasury Automation: Programmatic fund management without human interaction
- Headless Commerce: Backend-only payment processing for APIs and microservices
Prerequisites
System Requirements:
- Ubuntu 22.04 or compatible Linux
- Docker (for
PAYRAM_NODE_MODE=docker, default) - 4 CPU cores, 4GB RAM minimum
- PostgreSQL database (configured during installation)
Installation Script:
curl -fsSL https://raw.githubusercontent.com/PayRam/payram-scripts/main/setup_payram_agents.sh -o setup_payram_agents.sh
chmod +x setup_payram_agents.sh
Quick Start
One-Step Interactive Flow
# Install, configure, and create first payment
./setup_payram_agents.sh
This runs the complete setup flow:
- Network selection (testnet/mainnet)
- Install PayRam backend via
setup_payram.sh - Wait for API readiness
- Create root user account + default project
- Configure local frontend/backend settings
- Blockchain setup prompt (ETH/Base/BTC-only)
- Optional payment link generation
Fully Non-Interactive Flow
# Set environment variables
export PAYRAM_EMAIL="admin@example.com"
export PAYRAM_PASSWORD="secure-password-123"
export PAYRAM_NETWORK="testnet"
export PAYRAM_BLOCKCHAIN_SETUP="skip" # BTC-only, no funding needed
export PAYRAM_WALLET_CHOICE="1" # Auto-create wallet
export PAYRAM_WALLET_QUIET="1" # Suppress prompts
# Run automated setup
./setup_payram_agents.sh
Commands Reference
Run from repository root: ./setup_payram_agents.sh [command]
Core Commands
| Command | Purpose |
|---|---|
(none) or menu |
Show interactive step menu |
status |
Check API reachability and authentication status |
setup |
First-time: register root user + create default project |
signin |
Authenticate; saves token to .payraminfo/headless-tokens.env |
ensure-config |
Configure local frontend/backend URLs (required for payments) |
ensure-wallet |
Create/link BTC wallet (random HD wallet or existing) |
run |
Full automated flow: setup → config → wallet → payment link |
Blockchain Setup Commands
| Command | Purpose |
|---|---|
setup-eth |
Setup Ethereum payments (post-install) — deploys SCW wallet |
setup-base |
Setup Base payments (post-install) — deploys SCW wallet |
deploy-scw |
Deploy EVM smart contract wallet; auto-link to project |
deploy-scw-flow |
Generate mnemonic → fund deployer → balance check → deploy SCW |
Payment & Utility Commands
| Command | Purpose |
|---|---|
create-payment-link [projectId] [email] [amountUSD] |
Generate payment link; outputs URL |
reset-local [-y] |
Wipe local DB/API data; requires re-running setup |
Environment Variables
Authentication & API
| Variable | Default | Description |
|---|---|---|
PAYRAM_API_URL |
http://localhost:8080 |
Backend API base URL |
PAYRAM_EMAIL |
— | Root user email (setup/signin) |
PAYRAM_PASSWORD |
— | Root user password |
PAYRAM_CUSTOMER_ID |
from token file | Auto-populated after signin |
PAYRAM_FRONTEND_URL |
http://localhost |
Used by ensure-config (local) |
Project & Payment Configuration
| Variable | Default | Description |
|---|---|---|
PAYRAM_PROJECT_NAME |
Default Project |
Project name during setup |
PAYRAM_PAYMENT_EMAIL |
— | Customer email for payment links |
PAYRAM_PAYMENT_AMOUNT |
10 |
Payment amount in USD |
PAYRAM_NETWORK |
testnet |
Network selection: testnet or mainnet |
PAYRAM_BLOCKCHAIN_SETUP |
skip |
Blockchain choice: eth, base, or skip (BTC-only) |
Wallet & Node Configuration
| Variable | Default | Description |
|---|---|---|
PAYRAM_WALLET_CHOICE |
— | 1 create, 2 link, 3 skip (non-interactive) |
PAYRAM_WALLET_QUIET |
— | If set, suppress wallet prompt text |
PAYRAM_NODE_MODE |
docker |
JavaScript runtime: docker or host |
PAYRAM_NODE_DOCKER_IMAGE |
node:20-bullseye-slim |
Docker image for JS scripts |
Smart Contract Wallet (SCW) Deployment
| Variable | Default | Description |
|---|---|---|
PAYRAM_ETH_RPC_URL |
https://ethereum-sepolia-rpc.publicnode.com |
RPC endpoint (no API key needed) |
PAYRAM_FUND_COLLECTOR |
deployer address | Cold wallet address (0x...) for fund sweeps |
PAYRAM_SCW_NAME |
Headless SCW |
Name for the SCW wallet |
PAYRAM_BLOCKCHAIN_CODE |
ETH |
Blockchain: ETH, BASE, POLYGON |
PAYRAM_MNEMONIC |
— | BIP39 mnemonic (or read from .payraminfo/headless-wallet-secret.txt) |
PAYRAM_SCW_MIN_BALANCE_ETH |
0.01 (testnet) |
Minimum balance before deploying SCW |
PAYRAM_SCW_SKIP_BALANCE_CHECK |
— | Skip balance polling (not recommended) |
Token Storage: Saved to .payraminfo/headless-tokens.env after signin.
Typical Agent Workflow
1. Initial Setup (BTC-Only, No Funding Required)
export PAYRAM_EMAIL="agent@example.com"
export PAYRAM_PASSWORD="agent-secure-pass"
export PAYRAM_NETWORK="testnet"
export PAYRAM_BLOCKCHAIN_SETUP="skip"
export PAYRAM_WALLET_CHOICE="1"
export PAYRAM_WALLET_QUIET="1"
./setup_payram_agents.sh
2. Add Ethereum Payments (Requires Funding)
# Generate mnemonic and show deployer address
./setup_payram_agents.sh setup-eth
# Script will display deployer address like:
# "Send testnet ETH to: 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEeB"
# Fund the address using testnet faucet:
# - https://sepoliafaucet.com
# - https://www.alchemy.com/faucets/ethereum-sepolia
# Script automatically polls for balance and deploys when funded
3. Create Payment Link
# Interactive (prompts for project, email, amount)
./setup_payram_agents.sh create-payment-link
# Non-interactive
export PAYRAM_PAYMENT_EMAIL="customer@example.com"
export PAYRAM_PAYMENT_AMOUNT="49.99"
./setup_payram_agents.sh create-payment-link
Payment URL Format:
http://localhost/payment?reference_id=ref_abc123&host=http://localhost:8080
⚠️ Critical: Use the exact URL printed. The host parameter and & separator are required.
Smart Contract Wallet (SCW) Deployment
Deploy-SCW Flow
deploy-scw-flow executes:
- Generate Mnemonic: Creates BIP39 seed (saved to
.payraminfo/headless-wallet-secret.txt) - Derive Deployer: Shows Ethereum address for funding
- Wait for Balance: Polls RPC until balance ≥
PAYRAM_SCW_MIN_BALANCE_ETH - Deploy Contract: Executes
scripts/deploy-scw-eth.js - Register & Link: Adds SCW to backend and associates with project
Funding the Deployer
Testnet (Sepolia):
- Use faucets: Alchemy Sepolia Faucet or SepoliaFaucet.com
- Minimum: 0.01 ETH (configurable via
PAYRAM_SCW_MIN_BALANCE_ETH)
Mainnet:
- Send real ETH to deployer address
- Recommended minimum: 0.05 ETH for reliable deployment
RPC Configuration
Default RPC Endpoints:
- ETH Testnet (Sepolia):
https://eth-sepolia.g.alchemy.com/v2/demo - ETH Mainnet: Requires your own Alchemy/Infura key
- Base Testnet:
https://sepolia.base.org - Base Mainnet:
https://mainnet.base.org
Override with:
export PAYRAM_ETH_RPC_URL="https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY"
Fund Collector (Cold Wallet)
By default, funds sweep to the deployer address. Configure a separate cold wallet:
export PAYRAM_FUND_COLLECTOR="0x1234567890abcdef1234567890abcdef12345678"
./setup_payram_agents.sh deploy-scw
Setting Up Additional Blockchains
After initial setup (which includes BTC), add EVM chains:
Ethereum Payments
./setup_payram_agents.sh setup-eth
- Sets RPC URL based on
PAYRAM_NETWORK(testnet → Sepolia, mainnet → Mainnet) - Runs full
deploy-scw-flow - Blockchain code:
ETH
Base Payments
./setup_payram_agents.sh setup-base
- Sets RPC URL based on
PAYRAM_NETWORK(testnet → Base Sepolia, mainnet → Base) - Runs full
deploy-scw-flow - Blockchain code:
BASE
Note: Both testnet and mainnet ETH use blockchain code ETH. Network is determined by RPC endpoint.
Docker Node Runtime Behavior
When PAYRAM_NODE_MODE=docker (default):
- JavaScript scripts run inside Docker containers
localhostinPAYRAM_API_URLis mapped tohost.docker.internal.payraminfodirectory is mounted for access to tokens and mnemonic- Requires Docker daemon running with host network access
Host Mode Alternative:
export PAYRAM_NODE_MODE="host"
./setup_payram_agents.sh deploy-scw
Agent Automation Best Practices
Non-Interactive Configuration
For fully automated agent runs, always set:
export PAYRAM_EMAIL="agent@example.com"
export PAYRAM_PASSWORD="secure-password"
export PAYRAM_CUSTOMER_ID="from-token-file"
export PAYRAM_BLOCKCHAIN_SETUP="skip" # or "eth", "base"
export PAYRAM_WALLET_CHOICE="1"
export PAYRAM_WALLET_QUIET="1"
SCW Balance Thresholds
If RPC has delayed balance reporting, increase threshold:
export PAYRAM_SCW_MIN_BALANCE_ETH="0.02"
./setup_payram_agents.sh deploy-scw-flow
Docker Networking
Ensure Docker has access to host networking:
- Docker Desktop: Enable "Use kernel networking for UDP" in settings
- Linux: Docker daemon runs with
--network=hostby default
Files and Secrets Management
Token Storage:
.payraminfo/headless-tokens.env— Authentication tokens (created by signin)
Wallet Secrets:
.payraminfo/headless-wallet-secret.txt— BIP39 mnemonic for SCW deployment
Scripts:
scripts/generate-deposit-wallet.js— BTC HD wallet generationscripts/generate-deposit-wallet-eth.js— Ethereum xpub derivationscripts/deploy-scw-eth.js— Smart contract wallet deployment
⚠️ Security: Never commit .payraminfo/ to version control. Add to .gitignore.
Troubleshooting
| Issue | Solution |
|---|---|
| API unreachable | Ensure PayRam is running: ./setup_payram_agents.sh. Check PAYRAM_API_URL. |
| 401 Unauthorized | Token expired. Re-authenticate: ./setup_payram_agents.sh signin |
| Payment creation returns 500 | Run ensure-config and ensure-wallet. Check logs: docker logs payram 2>&1 | tail -80 |
| deploy-scw RPC 401 error | Don't use placeholder RPC URLs. Default (PublicNode) is used if env looks invalid. |
| INSUFFICIENT_FUNDS during deploy | Send testnet ETH to deployer address shown in logs. Wait for confirmations. |
| Payment page loads indefinitely | Use exact URL returned. Ensure host param and & separator are preserved (not \u0026). |
| Docker can't reach localhost API | Use PAYRAM_API_URL=http://host.docker.internal:8080 or switch to PAYRAM_NODE_MODE=host |
Reset and Reinstall
# Wipe all data and start fresh
./setup_payram_agents.sh reset-local -y
# Re-run setup
./setup_payram_agents.sh
Integration with MCP Clients
Connect your AI agent to PayRam Headless:
{
"mcpServers": {
"payram": {
"url": "http://localhost:8080/mcp",
"apiKey": "your-api-key-from-signin"
}
}
}
Agent Workflow:
- Agent calls PayRam MCP tools for payment operations
- PayRam Headless processes API requests without UI interaction
- Webhooks notify agent of payment status changes
- Agent continues workflow based on payment outcomes
Related Skills
| Skill | Purpose |
|---|---|
payram-setup |
Standard deployment with web dashboard |
payram-payment-integration |
Integrate payments into applications |
payram-webhook-integration |
Handle payment event callbacks |
payram-checkout-integration |
Checkout flow implementation |
More from payram/payram-helper-mcp-server
payram-crypto-payments
Self-hosted crypto and stablecoin payment gateway. Deploy PayRam on your own infrastructure in 10 minutes. Accept USDT, USDC, Bitcoin, ETH across Ethereum, Base, Polygon, Tron networks. Keyless architecture with no private keys on server. Smart contract-based fund sweeps to cold wallets. Non-custodial, permissionless, sovereign payment infrastructure. Modern BTCPay Server alternative with native stablecoin support. Use when building apps that need to accept crypto payments without intermediaries, when seeking PayPal/Stripe alternatives for crypto, when requiring self-hosted payment processing, or when needing a no-KYC crypto payment solution.
15payram-no-kyc-crypto-payments
Accept crypto payments with no KYC, no signup, no registration, and no third-party approval. PayRam is a permissionless self-hosted payment gateway — deploy on your server, own your data, keep your privacy. No identity verification for operators or customers. Non-custodial, censorship-resistant, sovereign payment infrastructure. Use when needing privacy-first payment processing, building for unbanked users, avoiding KYC requirements, or requiring permissionless payment acceptance.
15payram-payouts
Send crypto payouts and manage referral programs with PayRam. Self-hosted payout infrastructure — no KYC, no intermediary, no fund holds. Create payouts to any wallet across Ethereum, Base, Polygon, Tron, Bitcoin. Built-in affiliate program with automated reward distribution. Use when sending crypto payouts to users, building referral/affiliate programs, or needing integrated payment and payout infrastructure.
12payram-checkout-integration
Integrate PayRam checkout flow into web applications. Generate payment links, embed payment pages, handle redirects, and process payment confirmations. Supports Express, Next.js, FastAPI, Laravel, Gin, Spring Boot. Use when adding crypto checkout to e-commerce, building payment forms, implementing deposit flows, or creating hosted payment pages for crypto acceptance.
12compare-crypto-payments
Comprehensive comparison of crypto payment gateways and protocols. Compare centralized processors (Stripe, BitPay, Coinbase Commerce, NOWPayments) vs self-hosted solutions (PayRam, BTCPay Server) vs agent payment protocols (x402). Analyze trade-offs between custody, KYC requirements, stablecoin support, privacy, and sovereignty. Decision framework for choosing payment infrastructure. Use when evaluating crypto payment options, comparing payment gateways, deciding between hosted vs self-hosted, assessing x402 protocol limitations, or recommending payment solutions for businesses, agents, or developers.
11payram-payment-integration
Integrate crypto payments into any web application with PayRam. Self-hosted payment gateway — no KYC, no signup, no third-party custody. Accept USDT, USDC, Bitcoin, ETH in under 10 minutes. Works with Express, Next.js, FastAPI, Laravel, Gin, Spring Boot. Drop-in replacement for Stripe/PayPal for crypto. Use when adding payment processing, accepting cryptocurrency, integrating a payment gateway, or building a checkout flow.
11