TL;DR
- Client: CoffeeBox — a vending coffee machine franchise from Kazakhstan, expanding into Uzbekistan
- Challenge: integrate Click, Payme, and Uzum with two types of Chinese coffee machines and give the owner full control through an admin panel
- Result: pilot machines are running in Tashkent, from scanning a QR code to coffee in hand — just seconds. The system is ready to scale to dozens of locations
Context
CoffeeBox is a vending coffee machine network operating under a franchise model from Kazakhstan. In Kazakhstan, the business is already well-established, but entering the Uzbek market presented a challenge without which the launch was impossible: they needed to accept payments through local payment systems and manage the machines remotely.
Vending machines are not a “set it and forget it” affair. Each machine must accept payment in real time, verify the transaction status, and dispense the drink. And the owner needs a clear picture: which machines are online, how many orders have been processed, and which payment methods customers are using.
CoffeeBox was looking for a team experienced in integrating Uzbek payment systems and willing to dig into the APIs of Chinese equipment manufacturers. After our first call, we agreed on the architecture and kicked things off within three days.
The Problem
Launching a vending business in Uzbekistan hit three blockers:
- Local payments. Click, Payme, and Uzum — each system has its own protocol, its own confirmation logic, and its own integration requirements. Without all three, you lose a chunk of your audience
- Two machine types — two different APIs. CoffeeBox uses Jetinno and HappyWorker machines. Both are Chinese manufacturers with different protocols, different documentation, and different approaches to communication
- Fragmented control. Each manufacturer has its own control panel, but neither shows payments through Click, Payme, or Uzum. To understand how much money came in and from where, the owner had to manually combine data from multiple systems
Project Goals
- Payment through any provider. The customer selects a coffee on the machine’s screen, gets three QR codes — Click, Payme, Uzum — and pays whichever way is most convenient
- Two machine types — one system. Jetinno and HappyWorker use different APIs, but for the customer and owner there’s no difference — everything goes through a single backend
- Support at every stage. This was CoffeeBox’s first launch in Uzbekistan — we helped with communication with payment providers, advised on the process of obtaining credentials, and answered the client’s questions throughout the entire project
The Solution: A Payment Hub for Vending
We designed and built a backend service that became the connecting link between payment systems, coffee machines, and the owner’s admin panel.
Payment System Integration
For each payment provider, we implemented the full cycle: QR code generation, processing of webhook An incoming HTTP request from an external system notifying about an event — for example, a successful payment notifications, and transaction confirmation and cancellation.
- Payme — JSON-RPC 2.0, full cycle: CheckPerformTransaction → CreateTransaction → PerformTransaction
- Click — two-phase scheme: Prepare (reserving funds) → Confirm (confirmation)
- Uzum — REST API with check, create, confirm, and refund operations
Connecting Two Machine Types
Jetinno and HappyWorker communicate with the server differently — we wrote a separate module for each machine type. For the owner, there’s no difference: both work through a single system and a single admin panel.
Unregistered devices are automatically created in the system with a disabled status — until an administrator manually activates them. This protects against unauthorized connections.
Admin Panel
The owner sees the full picture:
- Machines — status, type (Jetinno / HappyWorker), owner assignment
- Orders — status, amount, payment system, machine assignment
- Transactions — details from each payment provider, external IDs, timestamps
- Audit log — all incoming and outgoing requests with bodies and IP addresses
Learn more about this service: Payment system and external service integration
How It Works: The Customer Journey
- A person walks up to the machine and selects a drink on the screen
- The machine sends a request to the backend — an order is created
- The backend generates three QR codes: Click, Payme, Uzum
- The customer scans the QR code with their preferred method and pays
- The payment system sends a webhook — the backend confirms the transaction
- The backend notifies the machine of the successful payment
- The machine dispenses the coffee
From scanning the QR code to receiving the drink — roughly 15 seconds. No cash, no card terminals.
Key Decisions
1. Working with Chinese Manufacturers
We studied both manufacturers’ documentation, figured out the specifics of their APIs, and set up data exchange. Where documentation was incomplete, we reached out directly to Jetinno and HappyWorker technical support, tested on real requests, and achieved stable operation. The client didn’t have to deal with the intricacies of Chinese APIs — we handled this entirely and came with ready-made solutions.
2. Unified Order Status Across Three Payment Providers
Each payment system works differently, but we brought all three to a single logic: order created, paid, coffee dispensed. The owner sees the same picture regardless of which payment provider processed the payment.
3. Security and Reliability
When money is involved, you can’t afford a lost transaction or a double charge. We built protection into the architecture:
- Payment system keys are stored encrypted — even with database access, they can’t be read
- Every request between systems is signed — it can’t be forged or tampered with
- Duplicate payment for the same order is prevented at the system level
- A new device won’t start operating until an administrator manually activates it
- Payment confirmation to the machine is sent in the background — this doesn’t slow down the response to the payment system and improves reliability
What’s Next
The payment infrastructure is launched and running in production. It’s the foundation on which CoffeeBox is already building the next stages:
- Mobile app — ordering coffee in advance, paying through the app, loyalty program
- Business analytics — sales by location, popular drinks, peak hours, unit economics for each machine
- Scaling — connecting new locations through the same infrastructure with no backend modifications
Next stage: Mobile app development
How We Worked
- Agreed on the architecture — analyzed the franchise business model, requirements for launching in Uzbekistan, and designed the system
- Submitted requests to payment systems — while the organizational processes for obtaining credentials were underway, we worked on machine integration in parallel
- Connected the coffee machines — studied the Jetinno and HappyWorker APIs, set up data exchange, and tested locally
- Integrated payment providers as they became ready — as soon as credentials arrived from Click, Payme, and Uzum, we integrated and tested on real transactions
- Launched the pilot — production deployment, first machines in Tashkent accepting payments
Similar case: Contab Case Study: a unified hub for requests, documents, and finances
Who This Solution Is For
If you recognized your situation in at least one of these points, we can help:
- you’re launching vending machines, terminals, or other IoT equipment in Uzbekistan and need to accept payments through Click, Payme, or Uzum
- you have multiple device types from different manufacturers and need a single backend instead of a separate integration for each one
- you’re entering the Uzbekistan market from Kazakhstan, Russia, or another country and need local payment infrastructure
- transaction security, audit trails, and full control through an admin panel are important to you
FAQ
How long does it take to integrate one payment system? +
On our end, integrating one payment provider takes about a week. But the overall timeline depends on how quickly the payment system issues credentials and keys — that process is on their side and can take anywhere from a few days to a few weeks. That's why we work on other tasks in parallel while we wait.
Can other types of vending machines be added? +
Yes. The system is designed so that a separate module is written for each new machine type, while all payment and management logic remains shared. Adding a new manufacturer doesn't require reworking the existing system.
How is payment security ensured? +
Payment system keys are stored encrypted, all requests between systems are signed, and duplicate charges for the same order are prevented at the system level. A new device won't start accepting payments until an administrator manually activates it.
Can this backend be used for more than just coffee machines? +
Yes. The architecture is suitable for any vending and IoT devices that need to accept payments: snack machines, charging stations, laundry machines, and other equipment.