Centili — Global Carrier-Billing Platform
A next-gen direct carrier-billing platform orchestrating millions of transactions across 80+ markets, with MACH architecture and Temporal workflows for exactly-once guarantees.
Visit live site ↗
Carrier billing is payments on hard mode: many operators, many markets, money in motion, and no tolerance for a transaction processed twice. Centili needed a platform that orchestrates millions of these flows reliably — and front-of-house tooling that makes the complexity manageable for operators and developers alike.
The challenge
The core requirement is correctness at scale. A billing event that gets retried can’t become a double charge, and a network blip can’t lose a settlement — across 80+ markets with different rules, and against the CAMARA billing and Aduna verification standards. The previous generation leaned on asynchronous Kafka saga choreography, which is hard to reason about when money is on the line. Around that engine, two very different audiences need first-class tooling: operators who run campaigns and reconcile revenue, and developers who integrate.
The approach
We built on a MACH foundation — microservices, API-first, cloud-native — as a Turborepo monorepo. The legacy saga choreography was replaced with Temporal durable workflows that bound every payment into explicit, exactly-once executions, so 1-STEP and 2-STEP flows, retries and compensations all resolve to a single correct outcome. Kafka carries strictly-typed event schemas between services, Kong plus a GraphQL BFF fronts the APIs, and PostgreSQL and Redis serve state and read paths.
What we built
- The Billing Engine — a Temporal worker pool running the saga heartbeat and compensation logic for exactly-once settlement
- An API Gateway (Kong + GraphQL BFF) with rate limiting, plus an Identity Service using Keycloak and opaque MSISDN abstraction
- A sub-100ms Risk Engine for algorithmic fraud evaluation, and a Settlement Service for fiat payouts and reconciliation
- A Catalog/PIM and Bundling Engine handling products, variants, localized pricing matrices and pricing-waterfall evaluation
- The Operator Dashboard and Developer Portal in Next.js / TypeScript on one shared design system, plus a Sandbox Emulator for destructive MNO testing
- An Observability layer with a PII redactor and OpenTelemetry tracing across services
The outcome
The result is infrastructure operators can trust with real money at real volume, wrapped in tooling people actually like using. Reliability engineering and interface craft are not separate disciplines here — and that’s the standard we apply to every build, whatever its scale.