Yaplet's billing system runs in one of two Stripe modes: test mode or live mode. This is a server-side configuration β you may see a reference to it in the dashboard if you're a developer or workspace owner investigating a billing discrepancy.
What controls the mode
The mode is set by the STRIPE_MODE environment variable on the Yaplet server. It is completely independent of NODE_ENV β the server can run in production with STRIPE_MODE=test, or in development with STRIPE_MODE=live. The two settings have no relationship.
What changes between modes
| Aspect | Test mode | Live mode |
|---|---|---|
| Stripe API keys used | Test secret/publishable keys | Live secret/publishable keys |
| Payments | No real money moves | Real charges to real cards |
| Customer ID column | test_stripe_customer_id |
stripe_customer_id |
| Invoices visible in Stripe dashboard | Stripe test dashboard only | Stripe live dashboard |
Why customer IDs differ between modes
Stripe maintains completely separate customer objects in test vs. live environments. A customer created in test mode has a different ID from the same customer in live mode, and the two objects don't interact. Yaplet stores both IDs in separate columns (test_stripe_customer_id and stripe_customer_id) so that switching modes doesn't orphan billing history.
If you're seeing a "customer not found" or billing error after an environment change, the most likely cause is a mode mismatch β the server is looking up a live customer ID in the test environment, or vice versa. Contact your Yaplet administrator to verify the STRIPE_MODE setting.
For Yaplet administrators
The production Yaplet instance runs in live mode (STRIPE_MODE=live). Test mode is only used during development and staging. Never switch a production workspace to test mode after it has live billing history β Stripe's test and live data are siloed and cannot be merged.
See also: Manage your payment method if you're troubleshooting a payment issue on a live workspace.