Designing a Scalable Cloud Payment Gateway: Best Practices for Developers
A deep technical guide to building scalable, secure cloud payment gateways with idempotency, observability, async processing, and compliance.
Designing a Scalable Cloud Payment Gateway: Best Practices for Developers
Building a cloud payment gateway is not just an API integration exercise. It is a systems-design problem that sits at the intersection of security, reliability, performance, compliance, and business economics. For SaaS teams, the wrong architecture creates dropped payments, duplicate charges, slow reconciliation, and expensive support tickets. The right architecture gives you a resilient payment hub that can absorb traffic spikes, support multi-currency payments, and keep payment operations observable enough for engineering and finance to trust it.
This guide is written for developers and IT admins who need practical guidance, not marketing language. We will cover how to design stateless payment services, apply idempotency correctly, use asynchronous processing without losing customer trust, and scale safely while maintaining PCI, tokenization, and fraud controls. If you are comparing architectures, also read our guide on governed platform design principles and the technical risks of adding orchestration layers because payment platforms fail for many of the same reasons as other mission-critical distributed systems.
1) Start with the right architecture: a payment hub, not a single gateway wrapper
Define the domain boundaries first
A scalable payment system should separate the customer-facing checkout experience from payment orchestration, gateway routing, risk checks, and settlement reporting. A common anti-pattern is building a thin wrapper around a single processor SDK and calling it the “gateway.” That works until you need fallback routing, regional payment methods, or better authorization rates for a specific card range or currency. A proper payment hub normalizes payment intents, abstracts processors, and keeps the business logic independent from any vendor-specific API quirks.
That separation matters because payment vendors differ in retry semantics, webhook timing, and error codes. A payment hub can standardize those differences into a canonical internal model, which reduces integration drift and makes future processor swaps much less painful. The same discipline shows up in other platforms that coordinate multiple systems, such as the approaches described in scalable API productization and governed domain-specific platforms.
Keep the checkout path thin and deterministic
The checkout request should do as little work as possible. At a minimum, it should validate input, create a payment intent, persist a durable state change, and return a response that tells the frontend whether the payment is pending, approved, or requires action. Do not wait on every downstream concern in the same synchronous request if those concerns can be deferred to workers or event handlers. This is the difference between a gateway that survives flash sales and one that collapses under normal burst traffic.
To keep this path deterministic, design every step around a stable payment identifier, a clear state machine, and durable storage. Those three elements make downstream reconciliation much easier and also improve observability when something goes wrong. Teams that have built mission-critical resilience patterns will recognize the principle: the control path should stay short, and all nonessential work should move to the edge of the system.
Use vendor abstraction deliberately
Vendor abstraction is not about hiding every detail. It is about exposing a consistent internal contract while preserving provider-specific capabilities when they matter. For example, one provider may support network tokens, another may have stronger 3-D Secure flows, and a third may provide better local payment method coverage in a target market. Your hub should let developers express intent—capture, authorize, refund, void, tokenize—without forcing the application to care about every downstream API schema.
That approach also makes it easier to run A/B routing experiments, improve approval rates, and reduce fees by shifting certain transaction types to the best-performing provider. If you are thinking about vendor tradeoffs, the procurement mindset from risk-adjusting vendor risk models and the resilience planning in cloud vendor risk models are useful reference points.
2) Design stateless APIs that can scale horizontally
Stateless does not mean context-free
A stateless payment API should not depend on server memory to complete a transaction. Any request can land on any instance, and all required state should be stored in a durable system such as a database, queue, or cache with proper persistence guarantees. This lets you scale horizontally with autoscaling groups or containers without creating sticky-session bottlenecks. In practice, the API can remain stateless while the transaction itself moves through a clearly versioned payment state machine.
The hidden advantage of statelessness is operational: deployments become safer, rollbacks become simpler, and incident recovery becomes faster. If a node dies mid-request, the system should be able to resume from persisted state rather than lose context. For teams building distributed workflows, the same logic is useful in runtime-configurable systems and other systems that need live changes without downtime.
Design the payment state machine explicitly
A payment state machine should be designed before code is written. Typical states include created, pending, authorized, captured, failed, canceled, refunded, and disputed. Each transition should be valid, auditable, and idempotent. That model prevents ambiguous edge cases such as double capture, late webhook updates, or race conditions between checkout completion and async confirmation.
In a cloud-native design, the state machine becomes the contract between frontend, backend, worker, and reconciliation services. It also simplifies customer support because every status has a known meaning and a known recovery path. If you want a deeper look at stateful business logic layered over systems integration, the concepts in order orchestration and event-driven media monetization translate surprisingly well.
API versioning and backward compatibility matter
Payment APIs are hard to change once they are in production. Mobile apps, checkout widgets, and backend services often ship on different release cycles, so your API contract must tolerate older clients while you evolve internal behavior. Use explicit versioning for breaking changes, and prefer additive changes where possible. Avoid encoding fragile business logic in request payloads that will be difficult to migrate later.
Backward compatibility is especially important when you support merchants with multiple integration styles—direct API, hosted fields, embedded checkout, or server-to-server flows. A mature payment platform should offer a stable semantic layer, much like the API discipline described in API-driven data platforms.
3) Make idempotency and retries first-class design principles
Why idempotency is non-negotiable
In payments, retries are inevitable. Networks fail, browsers refresh, webhooks arrive late, and mobile clients resubmit requests. Without idempotency, retries can create duplicate charges, duplicate refunds, or duplicate ledger entries. A robust payment API should require an idempotency key for all money-moving operations and enforce a one-request-one-result model across an appropriate time window.
Idempotency is more than storing a key in a cache. You need to define how long the key is retained, what happens if the first request partially completes, and how conflicts are reported to the caller. The system should return the original outcome for the same key even if the downstream processor later reports the final state asynchronously. This pattern is central to dependable checkout orchestration and other transactional flows where trust depends on consistent outcomes.
Retry safely with backoff and jitter
Retries should be carefully bounded. Use exponential backoff with jitter, limit the maximum attempts, and classify errors into transient versus permanent. Do not blindly retry card declines, validation failures, or authentication failures. Instead, retry only network timeouts, gateway 5xx responses, and selected transport errors. This reduces duplicate processing risk and protects both your infrastructure and the processor.
For asynchronous jobs, the retry policy should be tied to the queue and the worker. A failed webhook delivery or settlement task should be retried with a dead-letter path so that the engineering team can inspect poison messages. The same structured approach to operational safety appears in operational risk management and disaster recovery planning.
Use the database as the source of truth
For critical payment states, the database should remain the authoritative record, not the cache and not the queue. Queue messages can be lost, delayed, or duplicated; cache entries can expire. Persist the intent, state transitions, processor reference IDs, and reconciliation metadata in durable storage. Then treat workers, queues, and webhooks as delivery mechanisms that help the truth propagate, not as the truth itself.
This helps when support and finance ask the hardest question in payments: “Did we take the money, or did we just think we did?” If the answer requires reconstructing the state from logs alone, the architecture is too weak. A mature payment hub keeps enough structured data to answer that question in seconds.
4) Use asynchronous processing for non-critical tasks
What should be synchronous and what should not
Not every payment-related action needs to happen inside the initial request. The synchronous path should cover input validation, authorization intent creation, and immediate customer-facing confirmation. Tasks like fraud enrichment, invoice generation, settlement notifications, ledger fan-out, analytics, and email receipts are often better handled asynchronously. Doing them later improves latency and reduces the chance that a slow dependency blocks the checkout flow.
Async architecture is especially valuable in SaaS payment processing where one customer-facing action can trigger many downstream events. Use queues or event streams to separate the user path from backend processes. The result is better responsiveness, easier scaling, and more opportunities to recover gracefully after a dependency outage.
Design for eventual consistency openly
Once you go async, you must accept eventual consistency. The user may see a payment as pending for a short period before a final success or failure arrives. That is fine if the UI, API, and support tooling all communicate the state clearly. The key is to make pending states explicit, not hidden.
Use webhook acknowledgments, event versions, and status polling endpoints to keep all systems synchronized. For teams interested in the mechanics of resilient event flow, the operational lessons in event-driven data propagation and audit trails are directly applicable to payment operations.
Workers need their own reliability strategy
Background workers are not a dumping ground. They need queue depth monitoring, concurrency limits, poison-message handling, and replay tooling. When a worker fails, the failure should be visible in dashboards and alerting rather than hidden in logs. For regulated transactions, workers should also write structured audit events so reconciliation can prove what happened and when.
A common best practice is to make every worker job idempotent too. If a job runs twice, the second execution should be a no-op or safely converge to the same final state. That simple rule dramatically reduces the operational burden in payment processing environments.
5) Build observability around the money flow, not just the infrastructure
Track payment-specific metrics
Generic infrastructure metrics are necessary but not sufficient. A cloud payment gateway should surface authorization rate, capture success rate, decline mix, webhook lag, queue depth, retry rate, duplicate request rate, time-to-final-settlement, and conversion by payment method. These are the metrics that tell you whether the product is working and whether revenue is leaking. Engineers should be able to correlate a latency spike with a drop in approval rates, not just with CPU usage.
Strong observability also supports better business decisions. If a processor’s authorization rate falls in one region, you can route traffic elsewhere or investigate issuer-side issues. If a payment method has high abandonment on mobile, you can improve the UX rather than assuming the processor is at fault. For a broader reporting mindset, see analytics operating models and buyability-focused metrics for inspiration on how to tie technical metrics to commercial outcomes.
Use tracing from checkout to settlement
Distributed tracing is invaluable in payment systems because a single user action may pass through API gateways, fraud services, token vaults, processor adapters, and asynchronous workers. A trace ID should follow the payment intent through every hop. That lets you identify where time is being spent and whether failures cluster in a specific adapter or region.
Make sure traces are supplemented by structured logs and metrics. Logs tell you what happened, metrics tell you how often it happened, and traces tell you where latency accumulated. For mission-critical platforms, this trio is the difference between guessing and diagnosing.
Auditability is a product feature
Payment systems are not only about uptime; they are about evidence. Audit logs should capture who initiated the transaction, which API key was used, which customer or account it belonged to, what risk checks were performed, and which processor response was returned. That log stream should be tamper-evident and retained according to your compliance and finance requirements.
Auditability reduces disputes, shortens incident investigations, and helps finance reconcile settlements. If this sounds similar to operational traceability in other industries, it is. The principle behind audit trails in travel operations transfers directly to payments because both systems need provable transaction histories.
6) Security and compliance must be designed in, not bolted on
Minimize PCI scope with tokenization
One of the best ways to scale securely is to reduce the amount of card data you touch. Use hosted fields, client-side tokenization, or a vaulting service so your systems never store raw PAN unless absolutely required. Tokenization shrinks PCI scope, lowers breach exposure, and simplifies audit effort. It also makes your architecture easier to reason about because sensitive data has a single controlled lifecycle.
If you need to support recurring billing, subscription upgrades, or one-click checkout, tokenization should be the default pattern. Keep token vault access tightly controlled, rotate credentials, and ensure logs never contain cardholder data. This is one of the highest-leverage decisions you can make in SaaS payment processing.
Apply zero-trust principles to payment services
Payment services should assume that internal networks are not inherently trusted. Authenticate service-to-service calls, restrict permissions with least-privilege roles, encrypt data in transit and at rest, and segment the token vault from less sensitive services. API keys and secrets should live in a managed secrets platform rather than config files or environment variables that are too broadly exposed.
Threat modeling should cover abuse cases such as credential stuffing, replay attacks, webhook forgery, and privilege escalation through admin tools. The security posture described in attack-surface threat modeling and secure device integration offers a useful framework for thinking about trust boundaries and attack paths.
Comply without slowing delivery
Compliance should be embedded into delivery pipelines, not treated as an annual event. Add static checks for secrets, dependency scanning, infrastructure policy controls, and release gates for privileged changes. This keeps security and compliance aligned with the engineering workflow instead of fighting it. When evidence collection is automated, audits become a routine output rather than a crisis project.
For organizations navigating regulated environments, the lessons from compliance-by-design and GRC and strategic risk management can be adapted to payment operations. The core idea is the same: control design should be measurable, testable, and documented.
7) Scale cost-effectively without sacrificing reliability
Autoscale the right components
Not every payment service needs the same scaling strategy. The API layer may need aggressive horizontal autoscaling, while the token vault or ledger may need stronger consistency and more conservative scaling. Worker pools can usually scale on queue depth, while databases scale based on read/write patterns and carefully planned sharding or read replicas. Matching the scaling method to the workload avoids waste and reduces the odds of noisy-neighbor problems.
Cost-effective scaling also means paying attention to request patterns. A small percentage of merchants often generate a large percentage of traffic, and a few bad integrations can create disproportionate load. Identifying and isolating those patterns helps you protect shared services from one customer’s retry storm or batch job spike.
Use caching where it is safe, not where it is convenient
Caching can reduce load and latency, but it must never compromise correctness for money-moving operations. Cache things like exchange rates, merchant configuration, feature flags, country metadata, and non-sensitive payment method metadata. Do not cache authoritative payment states unless the cache is a read-through optimization with a clear source-of-truth refresh strategy. Any cache used in payments should have explicit invalidation rules and safe fallbacks.
Currency conversion, for example, is a great candidate for bounded caching if you store a rate version and expiration. That can improve performance for multi-currency payments without creating financial ambiguity. Be especially careful with rounding rules, settlement currency, and FX exposure so that customer-facing and ledger values always reconcile.
Right-size the infrastructure for peak, not average, demand
Payments are bursty. Launches, billing cycles, holiday traffic, and promotional campaigns can produce sudden spikes. A system that only scales to average demand will fail at the exact moment revenue matters most. Use load tests that simulate realistic peaks, including retry storms and webhook backlogs, so your infrastructure decisions reflect actual behavior rather than optimistic estimates.
There is also a financial discipline to scaling. Engineering should compare the cost of overprovisioning against the cost of a failed payment and the support burden created by recoverable errors. In a mature organization, that conversation is supported by finance-aware metrics, similar to the logic in cost-metric planning and cost-aware pipeline design.
8) Test like a payment processor, not like a normal web app
Build a layered test strategy
Payment systems need unit tests, contract tests, integration tests, sandbox tests, and end-to-end tests. Unit tests should validate state transitions, idempotency behavior, rounding rules, and retry classification. Contract tests should verify that your integration with each provider still matches expected request and response shapes. Integration tests should cover real network behavior as much as possible, including timeouts, partial failures, and webhook delivery.
Sandbox testing alone is not enough because many provider sandboxes are too forgiving. They often fail to reproduce issuer latency, settlement delays, or realistic decline patterns. Your test strategy should therefore include mock-based testing for edge cases and controlled production-like scenarios in a non-production environment. This reduces launch risk and increases confidence in the payment integration.
Test the weird scenarios on purpose
The most valuable tests are the ugly ones: duplicate submits, delayed webhooks, processor timeout after capture, idempotency key reuse, partial refunds, currency mismatch, and network partition during reconciliation. These are the flows that create support incidents if they are not explicitly tested. The goal is not to eliminate all complexity, but to make the complexity predictable.
One practical technique is to maintain a library of synthetic incident scenarios and replay them in staging before major releases. That practice builds operational muscle and makes on-call much more manageable. It is similar in spirit to the resilience practices covered in post-incident recovery playbooks and the structured incident thinking in expecting failures at launch.
Measure release risk before production cutover
Every release that touches payment logic should have a rollback plan, feature-flag strategy, and canary path. You should know which metrics will tell you a release is unhealthy before you promote it broadly. This is especially important for payment APIs, where a small bug can have a large financial blast radius.
Include reconciliation checks after every deployment: transaction counts, success rates, duplicate attempts, queue depth, and settlement deltas. If those checks drift, the release should stop automatically or page the right team immediately.
9) Support analytics, reconciliation, and business intelligence from day one
Payments data should be queryable, not trapped in logs
One of the most common mistakes in payment platform design is treating analytics as an afterthought. If data lives only in logs, the finance team will eventually ask for reports you cannot produce without ad hoc scripts. Instead, emit structured events that feed a reporting layer for revenue, customer behavior, authorization health, refund patterns, chargebacks, and settlement performance. That data should be designed for decision-making, not just incident response.
A good payment hub also exposes internal APIs for merchant-level summaries, risk flags, and trend analysis. This makes it easier for operators to answer questions like: Which processor performs best by region? Which card brands are failing most often? Which subscriptions are churning because of payment failure? Those answers directly improve revenue retention and payment optimization.
Reconciliation should be automated and explainable
Reconciliation is where the technical and financial views of the system meet. The gateway may say a transaction succeeded, but the settlement file may show a discrepancy because of fees, reversals, or delayed clearing. Automated reconciliation should compare processor events, ledger entries, bank settlement data, and refund/dispute records. Any mismatch should produce a clear exception that a human can act on quickly.
The best systems preserve enough detail to explain why numbers differ. This is where event timestamps, reference IDs, fee breakdowns, and currency conversion metadata matter. Without that detail, finance teams waste time reconstructing the story manually.
Use analytics to improve conversion and cost
Payment analytics should not just describe what happened; it should guide action. If you can segment approval rates by issuer, geography, currency, device type, or payment method, you can optimize routing and UX. If you know which step creates drop-off, you can focus engineering effort where it improves revenue. This is especially valuable in payment hub environments serving multiple SaaS products or tenant groups.
For teams wanting a broader model of how analytics turns operations into strategy, the ideas in analytics startup partnerships and commercial signal analysis are helpful analogies for turning data into decisions.
10) A practical reference model for cloud-native payment scalability
Reference architecture components
A practical cloud-native payment gateway typically includes an API gateway, authentication service, payment intent service, token vault, routing engine, fraud/risk service, queue/event bus, worker fleet, reconciliation service, reporting warehouse, and admin console. Each component has a narrow responsibility, and each communicates through well-defined contracts. This keeps the architecture modular enough to evolve without turning into a monolith.
The payment intent service should be the source of workflow truth, while the routing engine decides which processor to use based on cost, geography, payment method, or failover rules. The risk service should enrich the decision, not block the system from scaling. The reporting warehouse should ingest structured events so the business can see what the platform is doing in near real time.
Recommended implementation priorities
If you are starting from scratch, prioritize the following sequence: secure tokenization, stateless API design, durable state machine, idempotency enforcement, async workers, observability, and then advanced routing and analytics. Teams often try to begin with optimization before the basics are stable, but that creates hidden complexity. First make the system correct, then make it fast, then make it cheaper.
A useful rule is to ship the simplest version that can safely process a real transaction end to end and then add sophistication only where data proves the need. This avoids the classic trap of overengineering before product-market fit or operational maturity. It also aligns with the pragmatic rollout logic found in systems build discipline and simulation-based validation.
Governance and operating model
Even the best architecture fails without clear ownership. Define who owns processor credentials, who can change routing rules, who reviews fraud exceptions, who approves deployment changes, and who responds to payment incidents. Document escalation paths and recovery procedures, then rehearse them. In payment systems, governance is not bureaucracy; it is how you prevent a one-line config change from becoming a revenue outage.
Cross-functional alignment matters because payments touch engineering, operations, finance, compliance, and customer support. If those teams share the same event model, dashboard definitions, and incident language, the organization becomes much faster at diagnosing and fixing issues. That is often the difference between a payment platform that merely functions and one that becomes a durable competitive advantage.
Comparison Table: Key scaling patterns for cloud payment gateways
| Pattern | Best For | Benefits | Tradeoffs | Implementation Notes |
|---|---|---|---|---|
| Stateless API layer | High traffic checkout and auth | Horizontal scaling, simpler deployment, easier failover | Requires durable state elsewhere | Persist payment intent and use shared state machines |
| Idempotent write model | Retries, mobile clients, webhook replays | Prevents duplicate charges and refunds | Needs careful key retention and conflict handling | Return original result for same key within policy window |
| Async worker queues | Receipts, fraud enrichment, reconciliation | Better latency and isolation from slow dependencies | Eventual consistency and queue management overhead | Use dead-letter queues and idempotent workers |
| Processor abstraction layer | Multi-vendor routing and failover | Less vendor lock-in, better routing flexibility | Extra mapping complexity | Normalize provider responses into a canonical model |
| Structured payment analytics | Revenue operations and optimization | Improved routing, conversion, and reporting | Requires schema discipline and data pipeline maintenance | Emit event data with stable identifiers and timestamps |
| Tokenization-first design | PCI reduction and safer recurring billing | Lower breach risk and smaller compliance scope | Dependency on vault availability and token lifecycle management | Use hosted fields or client-side tokenization |
Implementation checklist for developers and IT admins
Before launch
Before going live, verify that the system can handle duplicate requests safely, that webhooks can be replayed without corruption, and that every state transition is logged. Confirm that your payment API has a clear timeout policy and that every external dependency has a fallback path. Validate currency conversion, fee calculation, and rounding rules across all supported markets.
During launch
Use a canary rollout with live observability, and monitor the metrics that actually reflect payment health. Watch authorization rate, latency, duplicate request rate, webhook lag, and error-code distribution. Keep support, engineering, and finance aligned on the same dashboard so issues do not get interpreted differently by different teams.
After launch
Run daily reconciliation, monthly access reviews, quarterly incident drills, and regular payment provider performance reviews. Feed the results into roadmap decisions so your architecture keeps getting better. A scalable cloud payment gateway is never truly finished; it improves through disciplined iteration, just like any other core platform.
FAQ
What is the difference between a cloud payment gateway and a payment hub?
A cloud payment gateway usually refers to the technical layer that accepts payment requests and forwards them to processors. A payment hub is broader: it orchestrates routing, state management, risk checks, reporting, and vendor abstraction across multiple services. In practice, a payment hub is the more scalable pattern for SaaS teams that expect to expand across regions, payment methods, and processors.
Why is idempotency so important in payment APIs?
Because retries happen constantly in real systems. Without idempotency, a customer refresh, network timeout, or webhook replay can trigger duplicate charges or duplicate refunds. Idempotency ensures the same request key produces the same business result, which protects customers, support teams, and finance operations.
Should payment processing be synchronous or asynchronous?
Both, but for different parts of the workflow. The customer-facing action should be synchronous enough to confirm intent and return a meaningful state quickly. Non-critical tasks such as reconciliation, receipts, fraud enrichment, and reporting should be asynchronous to improve performance and resilience.
How do I reduce PCI scope in a SaaS payment system?
Use tokenization, hosted fields, and strict data minimization so your application never stores raw card data unless absolutely required. Segment sensitive components, encrypt everything in transit and at rest, and keep logs free of cardholder data. The less sensitive data your platform touches, the easier compliance becomes.
What metrics matter most for payment analytics?
Authorization rate, capture success rate, decline mix, retry rate, webhook lag, time-to-final-settlement, duplicate request rate, and refund/chargeback trends are usually the most important. These metrics show whether your system is converting payments efficiently, failing silently, or leaking revenue. They also help you compare processors and routes objectively.
How should I test a payment gateway before production?
Use layered testing: unit tests for logic, contract tests for provider integrations, integration tests for live-like behavior, and end-to-end tests for the full customer flow. Add failure simulations for timeouts, duplicate submissions, delayed webhooks, partial capture, and currency mismatches. The goal is to prove the system behaves correctly under realistic failure modes, not only under ideal conditions.
Conclusion: Build for truth, then for speed
A scalable cloud payment gateway succeeds when it treats correctness as the foundation for performance. Stateless APIs, idempotency, asynchronous workflows, observability, and tokenization are not separate topics; they are the architecture of trust. If your platform can prove what happened, recover from failures, and scale without losing control, it will be far more valuable than a faster but fragile checkout flow.
For teams ready to go deeper, revisit our guides on resilience patterns for mission-critical systems, disaster recovery, vendor risk management, audit trails, and analytics-driven operations. Those adjacent disciplines all reinforce the same principle: robust systems are built on durable state, clear contracts, and operational transparency.
Related Reading
- Designing a Governed, Domain-Specific AI Platform - Useful for thinking about controlled platform boundaries and governance.
- Productizing APIs and Scalable ETL - Great reference for durable API and data architecture patterns.
- Technical Risks and Rollout Strategy for an Order Orchestration Layer - Relevant when adding routing and orchestration to payment flows.
- Resilience Patterns for Mission-Critical Software - Strong guidance on recovering gracefully from failure.
- Disaster Recovery and Power Continuity - Helpful for business continuity planning and incident preparation.
Related Topics
Daniel Mercer
Senior Payments Architect
Senior editor and content strategist. Writing about technology, design, and the future of digital media. Follow along for deep dives into the industry's moving parts.
Up Next
More stories handpicked for you
Implementing PCI-Compliant Payment Integrations in Multi-Tenant SaaS
Adapting to Security Trends: What JD.com’s Response to Theft Reveals
Building Fraud-Resistant Checkout Flows: Frontend and Backend Controls for Developers
Crafting a Developer-Friendly Payment API: Documentation, SDKs, and Sandbox Best Practices
The Overlooked Cost of Data Centers on Payment Providers: New Insights
From Our Network
Trending stories across our publication group