Prerequisites
- A Stripe account
- Your Atrium instance running at a publicly accessible HTTPS URL
- Access to your server’s environment variables
Setup
1
Create a Stripe Connect platform
- Go to dashboard.stripe.com/settings/connect.
- Complete the platform profile if prompted.
- Copy your Client ID — it starts with
ca_.
If you see a “Standard OAuth is disabled” message here, enable the Standard OAuth flow before continuing. The toggle is on the same Connect settings page.
2
Add the OAuth redirect URL
On the same Connect settings page, under Redirects, add the following URL (replacing Stripe will redirect back to this URL after your account authorizes the connection.
your-atrium-domain.com with your actual domain):3
Create a webhook endpoint
Go to Developers → Webhooks in the Stripe Dashboard and create a new endpoint:
- URL:
https://your-atrium-domain.com/api/payments/webhook - Events to listen for:
checkout.session.completedcheckout.session.expiredaccount.application.deauthorized
whsec_.4
Set environment variables
Add the following to your For live mode, set Restart Atrium after updating environment variables.
.env file:STRIPE_MODE="live" and use STRIPE_LIVE_SECRET_KEY instead of STRIPE_TEST_SECRET_KEY:5
Connect your Stripe account
Once your instance is running with the environment variables above:
- Log in to the Atrium dashboard as an owner.
- Go to Settings → System.
- Scroll to the Client Payments section.
- Click Connect with Stripe.
Environment variable reference
STRIPE_CURRENCY applies to all invoices across the platform. Set it to the currency your clients invoice in. Defaults to usd if not set.Disconnecting
To disconnect your Stripe account, click Disconnect Stripe in Settings → System → Client Payments. Atrium deauthorizes the OAuth connection on Stripe’s side and clears the stored account ID. Clients will no longer be able to pay invoices until you reconnect.Local development
Stripe cannot deliver webhooks tolocalhost. Use the Stripe CLI to forward Connect webhook events to your local API:
whsec_... signing secret when it starts. Use that value as STRIPE_CONNECT_WEBHOOK_SECRET in your .env. Keep the CLI running while testing.
Troubleshooting
"Standard OAuth is disabled"
"Standard OAuth is disabled"
Go to Stripe Dashboard → Settings → Connect and enable the Standard OAuth flow.
Invoice paid but still shows as overdue
Invoice paid but still shows as overdue
The webhook did not fire or failed verification. Check the following:
- In Stripe Dashboard, go to Developers → Webhooks → your endpoint → Recent deliveries and look for failed or undelivered events.
- Confirm the webhook endpoint has “Listen to events on Connected accounts” enabled. This is required for Connect mode.
- Verify
STRIPE_CONNECT_WEBHOOK_SECRETin your.envmatches the signing secret shown on the webhook detail page in the Stripe Dashboard. - Make sure
STRIPE_MODEmatches the mode of the connected account (test vs. live).
"Online payments are not configured" shown to clients
"Online payments are not configured" shown to clients
Either no Stripe account has been connected via OAuth, or the connection was revoked. Go to Settings → System → Client Payments and click Connect with Stripe to re-authorize.
OAuth redirect fails or shows an error
OAuth redirect fails or shows an error
- Confirm the redirect URL in your Stripe Connect settings exactly matches
https://your-atrium-domain.com/api/payments/connect/callback. - Check that
STRIPE_CONNECT_CLIENT_IDin your.envmatches the Client ID in Stripe Connect settings. - Check your Atrium API logs for additional context.