Why All Our Products Share One Payment Hub
Jag Journey builds several products, and several of them take payments: plans and add-ons on VoVo, credits for AI features, donations for free tools and more. The obvious way to add payments to a product is to give each product its own payment keys, its own webhooks and its own checkout code.
We tried to imagine maintaining that across every product and decided against it. Instead, our own charges go through one shared payment hub, the same system behind Pay by Jag. Here is why, and where the line is drawn.
The problem with many integrations
Each separate payment integration brings its own:
- Secret keys that must be stored, protected and rotated
- Webhook endpoints that must verify signatures correctly
- Code for subscriptions, refunds, disputes and failed payments
- Records that accounting must reconcile
Multiply that by every product and the risk multiplies too. A webhook that skips signature checks in one product, a key that never gets rotated in another, a refund flow that works differently in a third. Each is a small gap. Together they are a lot of places for money to go wrong.
One hub, signed requests
With a hub, products do not talk to the payment processor directly. They send signed requests to the hub: create this charge, start this subscription, refund this payment. The hub holds the processor keys, handles the processor's webhooks, verifies every confirmation and then tells the product what happened through its own signed callback.
That means the hard, sensitive parts are written once and reviewed once. Products focus on what they sell; the hub focuses on getting paid correctly. Adding a new product does not mean adding new secret keys or new webhook endpoints.
No product-local secret keys
A rule follows from the design: products do not get their own processor secret keys for our charges. If a developer finds themselves adding one, that is a sign something is being built outside the hub. Our engineering standards say this explicitly, and reviews look for it.
What stays separate: customers' own sales
The hub is for money paid to Jag Journey. Money that organizations on our platform collect from their own customers is a different matter. When a ministry takes a donation or a shop sells a product, that money belongs to them. It flows through the payment account the organization connected, not through ours.
Keeping those two flows apart is essential. Mixing them would put customers' money through our company account, complicate their books and blur responsibility for refunds and disputes. You can read how the customer side works in letting customers get paid directly.
Failing closed when the hub is unavailable
A shared hub raises an obvious question: what if it is down? Our answer is that the charge stops with a clear message and nothing is charged by some other route. Silent fallbacks would undo the whole point of having one recorded path. We explain that rule in no silent fallbacks in payment code.
Books that stay current
Because every charge flows through the hub, every charge also arrives in the same accounting pipeline. Invoices, payments, refunds and fees are recorded consistently instead of being reconstructed from several dashboards at the end of the month. For a small company, that consistency saves real time and reduces the chance of errors.
The trade-off
A hub is one more system to run, and it must be very reliable because every product depends on it. We accept that trade, because the alternative is many smaller systems each needing the same reliability and security. One well-guarded door is easier to protect than a dozen.
Frequently asked questions
What is a payment hub?
A payment hub is a central service that handles payments for several products, holding the processor keys and verifying payment events so individual products do not have to.
Does my organization's revenue go through Jag Journey's account?
No. Sales and donations an organization collects on VoVo go through the payment account that organization connected. The hub is only for charges paid to Jag Journey.
What happens if the payment hub is unavailable?
The payment stops with a clear message and can be retried later. It is not sent through a different route.
Comments (0)
No comments yet. Be the first to share your thoughts!