Operate
Deploy
How a 389 app talks to production Steadi Pay, and how operators run the Steadi Pay stack next to 389 Konvene.
Integrate an app into production
- Create the merchant (self-serve or super admin) and finish go-live.
- Store
STEADIPAY_SECRET_KEYand the webhook secret on the app server. Never commit them. - Base URL
https://api.steadipay.ltd. Checkout openshttps://pay.steadipay.ltd. - Create sessions on the server. Redirect the customer. Fulfil only after a verified webhook or verify.
- Use a unique Idempotency-Key per new session or refund.
STEADIPAY_API=https://api.steadipay.ltd
STEADIPAY_SECRET_KEY=sk_live_...
STEADIPAY_WEBHOOK_SECRET=whsec_...Domains
| Host | Role |
|---|---|
| steadipay.ltd | Marketing and merchant sign-up |
| app.steadipay.ltd | Merchant portal and admin |
| api.steadipay.ltd | API and provider callbacks |
| pay.steadipay.ltd | Hosted checkout |
| docs.steadipay.ltd | This documentation |
| status.steadipay.ltd | Status page |
Provider callbacks use https://api.steadipay.ltd/v1. Do not point them at Konvene or at the marketing host.
Run Steadi Pay on the VPS
Steadi Pay is its own git clone and Docker Compose project. It must not share Konvene's Postgres or ports 80, 443 or 8080. Host Caddy proxies Steadi Pay to 127.0.0.1:8081.
First install
cd ~
git clone https://github.com/389agency/SteadiPay.git SteadiPay
cd SteadiPay
sudo bash deploy/install-vps.shLater updates
cd ~/SteadiPay
git pull
sudo bash deploy/update.shChecks after a deploy:
- http://127.0.0.1:8081/healthz → nginx ok
- https://api.steadipay.ltd/v1/health → {"ok":true}
- https://docs.steadipay.ltd → these docs
- https://app.steadipay.ltd/login → sign in
Staff TOTP: sudo bash ~/SteadiPay/deploy/print-totp.sh then add the secret in an authenticator app. Sign in at /login?staff=1. Password first, then the 6-digit code.
Do not
- Put Steadi Pay inside the 389Xperience folder
- Point DATABASE_URL at Konvene's database
- Pool merchant funds or reuse a settlement account
- Deduct a fee from a merchant payout
- Mark a payment paid without provider confirmation