Payoes separates sandbox and production environments so you can test on Stellar testnet before accepting real funds on mainnet.
Overview
| Setting | Sandbox | Production |
|---|
| Stellar network | Testnet | Mainnet |
| API key prefix | pk_test_ | pk_live_ |
| Settlement wallet | Testnet address | Mainnet address |
| USDC issuer | STELLAR_TESTNET_USDC_ISSUER | STELLAR_MAINNET_USDC_ISSUER |
Your organization environment is shown in the dashboard header. Sandbox mode displays a visible banner.
How environment is determined
- API keys carry an environment. A
pk_test_ key always creates sandbox payments; pk_live_ creates production payments.
- Dashboard actions use the organization’s current environment setting.
- Settlement wallets are configured per environment. You need a separate wallet for sandbox and production.
Testing on testnet
- Create a sandbox API key
- Fund a testnet wallet from Stellar Laboratory Faucet
- Create a payment and complete checkout on testnet
- Verify
tx_hash on Stellar Expert (testnet)
Self-payments (paying from the same wallet configured as the settlement wallet) are allowed for testing.
Moving to production
Production mode accepts real mainnet payments. Before going live you must complete identity verification through Persona.
Identity verification and production gate
- Open Settings → Production in the dashboard
- Choose Personal or Business and describe what you do (business description required for business accounts)
- Complete the Persona flow (government ID + selfie/liveness)
- Persona automatically approves or declines — no Payoes admin review
- Configure a production settlement wallet with a mainnet address
- Switch the organization to production mode
| Requirement | Purpose |
|---|
| Persona verification | Automated identity check (personal or business) |
| Production settlement wallet | Destination for live customer payments |
Production payments move real assets. Complete sandbox testing and identity verification first.
Additional checklist
- Ensure the production wallet has a USDC trustline if accepting USDC
- Create a
pk_live_ API key
- Update
STELLAR_MAINNET_USDC_ISSUER on your Payoes deployment
- Update your integration to use production keys and mainnet checkout URLs
Expiration
Payments expire after expires_in_minutes (default 60, max 10080). Expired payments receive status expired and trigger a payment.expired webhook if configured.