Services Reference
Every service in the OpenPay stack — what it does, how to configure it, and what ports it uses.
Traefik
Traefik is the reverse proxy that sits in front of all services. It handles TLS termination, rate limiting, load balancing, and routes incoming requests to the correct backend container.
80— HTTP (redirects to HTTPS)8080— Dashboard443— HTTPS
traefik.yml— static configdocker-compose.yml— labels- Rate limiting: 100 req/s per IP
Hyperswitch
The payment orchestration engine. Routes payments to connectors, handles retries, stores payment records, and exposes the REST API. Built in Rust for high throughput and low latency.
8080— API server8081— Admin API
- PostgreSQL — payments, refunds, customers
- Redis — session cache, rate limiting
- NATS — event publishing
Kill Bill
Handles subscription billing, product catalog management, invoicing, and dunning. Integrates with Hyperswitch for payment processing and NATS for event synchronization.
8082— REST API8083— Admin API
- Product & plan management
- Subscription lifecycle
- Invoice generation
- Dunning & retry logic
Tazama
Real-time fraud detection engine. Evaluates each transaction against configurable rules (amount thresholds, velocity checks, geo-blocking by BIN country). Produces risk scores and triggers alerts.
- Amount threshold (e.g., > 500,000 NGN)
- Velocity (e.g., > 5 transactions in 10 minutes)
- Geo-blocking (BIN country != NG)
- NATS — consumes payment events
- Redis — velocity tracking cache
- PostgreSQL — alert history
NATS JetStream
The event bus that connects all services. Uses JetStream for persistent, ordered event delivery. Events are published by Hyperswitch and consumed by Tazama, the NATS-KB Bridge, and your webhooks.
4222— client connections8222— monitoring
payments— payment eventsrefunds— refund eventsfraud_alerts— Tazama alerts
PostgreSQL
Shared database used by Hyperswitch, Kill Bill, and Tazama. Each service uses its own schema within the same PostgreSQL instance. The database persists all payment records, subscription data, and fraud alert history.
5432 — not exposed externally (only accessible via Docker network)