Kaspi payments for self-service machines
Any unstaffed point of sale in Kazakhstan can accept payment through Kaspi and start by itself the moment the money arrives. Examples: a self-service car wash bay, a water vending machine, a flower vending machine whose door opens, an unstaffed book shelf. Nobody has to look at a phone and check whether the money came in.
Qut Pay creates the invoice, watches the payment and tells your system "paid". The money goes straight to your Kaspi Pay account. Qut Pay never holds it.
Qut Pay is a software service. We do not sell or install machines, controllers or MDB modules. You or your integrator build the hardware side that drives the machine. This page is the guide for that work.
In short: which machine, which method
| How the machine is driven | Examples | Method with Qut Pay |
|---|---|---|
| Has a screen, you control the software | kiosk, touch terminal, photo booth, charging station | A. API and a QR on the screen |
| Coin or bill acceptor pulses | self-service car wash, vacuum, water vending, massage chair, arcade machine | B. Permanent QR sticker and a pulse module |
| Electric lock or relay | flower vending, smart fridge, storage locker, turnstile, barrier | C. A QR per door and a relay |
| MDB bus (the vending standard) | snack, drink and coffee machines | D. MDB cashless module and the API |
| No hardware, honesty-based | unstaffed book shelf, roadside stall, take-and-pay | E. Just a QR sticker |
Self-service machines on the market
The list covers types common in Kazakhstan. Within one type the control method depends on the manufacturer, so check the board or the documentation of your machine.
| Area | Machine | Usually driven by | Method |
|---|---|---|---|
| Car | Self-service car wash bay | coin or bill acceptor pulse, sometimes a card terminal | B |
| Car | Vacuum, tyre shine, tyre inflation | pulse or timer | B |
| Car | Automatic (gantry) car wash | controller, sometimes a screen | A or B |
| Car | Paid parking with a barrier | relay | C |
| Car | EV charging station | screen or management server | A |
| Water and drinks | Water vending machine | pulse | B |
| Water and drinks | Milk, drink or kvass dispenser | pulse or MDB | B or D |
| Water and drinks | Coffee machine | MDB, newer ones a screen | D or A |
| Water and drinks | Fresh juice machine | MDB or screen | D or A |
| Food and goods | Snack and drink machine | MDB | D |
| Food and goods | Smart fridge, micro market | electric lock | C |
| Food and goods | Flower vending machine | a lock per cell | C |
| Food and goods | Hot food or pizza machine | screen | A |
| Food and goods | Unstaffed shop, book shelf | none | E |
| Services | Laundromat (washers, dryers) | pulse or controller | B |
| Services | Massage chair | pulse | B |
| Services | Photo booth, photo printing, copier | screen | A |
| Services | Phone charging, power bank rental | screen | A |
| Services | Luggage wrapping | pulse or relay | B or C |
| Entertainment | Arcade machine, claw machine | pulse | B |
| Entertainment | Kiddie ride | pulse | B |
| Entertainment | Trampoline, VR room | timer or relay | B or C |
| Access and storage | Storage lockers | lock | C |
| Access and storage | Paid toilet, shower | turnstile or relay | C |
| Access and storage | Gym or coworking door | relay | C |
A. A machine with a screen: API and a QR on the screen
The machine or its server creates an invoice with POST /api/v1/invoices and shows the qrImageUrl image on screen. The customer scans it in Kaspi.kz and pays. The machine learns about the payment by webhook, or by polling GET /api/v1/invoices/{id} every 2–3 seconds. Every invoice is new, and the QR is valid for about 3 minutes.
Full guide with request examples and key-handling rules: Add Kaspi payments to your own device via API.
B. A pulse-driven machine: a permanent QR and a pulse module
A car wash, water vending machine, massage chair and similar machines usually start on a "coin accepted" pulse. No screen is needed, a sticker takes its place.
- In the cabinet, under Links, create a separate permanent payment link for each bay or machine, for example
qut.kz/p/wash-bay-3. Either fix the amount (500 ₸) or leave it to the customer. In the second case you can set a minimum and a maximum, for example 200 to 5,000 ₸. - Print the link's QR and stick it on the bay.
- The customer scans the QR with the phone camera, picks the amount and confirms in Kaspi.
- Qut Pay sends the
invoice.paidevent to your server. It carriesmetadata.slug, which tells you which bay it is. - Your server tells that bay's module to fire. The module sends pulses for the amount: if 1 pulse is 10 ₸, then 500 ₸ is 50 pulses.
The webhook body, shortened:
{
"event": "invoice.paid",
"invoice": {
"id": "inv_…",
"status": "paid",
"amount": 500,
"metadata": { "paymentLinkId": "pl_…", "slug": "wash-bay-3" }
}
}
The module. Usually an ESP32 or a Raspberry Pi with an optocoupler or a relay. It is wired in parallel to the coin acceptor's signal line, and the machine takes its pulses as inserted coins. The module connects out to your server (MQTT or HTTP polling), so a GSM modem at the bay is enough. The wiring is best done by someone who knows the machine's circuit.
C. A machine with a door that opens: a QR per door and a relay
Flower vending machines, smart fridges, storage lockers and paid toilets open with an electric lock.
- Fixed price (locker, toilet, parking): one link with a fixed amount per door or cell. Once paid, your server switches that door's relay on for a few seconds, found by
metadata.slug. - Changing price (flowers, items in a fridge): the sticker leads to your own page, for example
your-site.kz/cell/12. The page shows the cell's current price and creates the invoice withPOST /api/v1/invoicesandmetadata: { "cell": 12 }. Once paid, that cell opens.
When a cell is empty, pause its link in the cabinet. A customer who opens it sees that the link is temporarily paused.
D. An MDB vending machine
Snack, drink and coffee machines mostly take cards and QR through a cashless device on the MDB bus. You need a module acting as the MDB cashless device, and ready MDB boards exist on the market. When the customer picks an item, the module's software creates the invoice through the Qut Pay API and shows the QR on a small screen. Once the payment is confirmed, it approves the vend.
This is integrator work, and Qut Pay only creates and confirms the payment here. If your machine's supplier has its own QR module, compare price and terms.
E. An unstaffed shop or book shelf
The simplest case, no hardware at all.
- Create one link where the customer enters the amount, and add a "Comment" field if you like (for example, for the book title).
- Stick the QR on the shelf or the door. Each item shows its price.
- Every payment shows in the cabinet and the Telegram bot reports it. You see at once who paid, how much and for what.
If you have a few item types with fixed prices, make a separate link for each. Then the customer cannot get the amount wrong.
Know this up front
- Verify the webhook signature. Without it, anyone could send a fake "paid" and run the bay for free. Signature:
HMAC-SHA256, verified over the raw, unmodified body. - One invoice, one start. Without a 2xx answer the webhook is retried up to 11 times. Fire the pulses or open the door once per
invoice.id. - Late payments happen. If money arrives for an expired invoice,
invoice.paidcomes withlate: true. Deliver the service or refund the money. - Internet is required. The server, the module and the customer's phone all need a connection.
- The Kaspi connection can drop. If someone signs in to Kaspi Pay with the cashier's number, Kaspi payments stop until the cashier is reconnected. A Telegram alert is sent. Keep a backup payment method: coins, notes or card.
- Links are limited. The number of permanent links depends on the plan: Start 50, Business 300, Pro 1,000. With more machines, create invoices through the API from your own page, as in methods A and C.
- Every opened invoice counts. It is included in the tariff's monthly count even if the customer does not pay.
- Fiscal receipt. Issuing the receipt is the seller's obligation. If Kaspi Kassa is enabled in Kaspi Pay, the receipt for a paid Qut Pay invoice goes to the customer's Kaspi app by itself. Details: fiscal receipt guide.
- Qut Pay is an independent service that works through the "Cashier" role in your own Kaspi Pay account. We are not affiliated with Kaspi Bank JSC. The risks are described openly: trust center.
Pricing
7 days free, counted from the first live invoice. After that, the tariff is chosen by the number of invoices per month:
| Tariff | Price | Invoices per month |
|---|---|---|
| Start | 4,990 ₸ | 800 |
| Business | 14,900 ₸ | 4,000 |
| Pro | 39,900 ₸ | 15,000 |
For example, a car wash with 6 bays and about 40 payments per bay per day makes about 7,000 invoices a month, which is the Pro tariff. The platform takes no percentage of payments. Kaspi keeps its own fee separately (0.95 % for QR), the same as without us. Details: tariffs.
How to start
- Sign up at qut.kz and connect a Kaspi cashier: getting started.
- In the cabinet, under Integrations, add the webhook URL and store the secret on your server.
- If you use the API, test everything in sandbox first with a
qp_test_…key:POST /invoices/{id}/simulatefakes the payment and the webhook arrives for real. - Start with one bay or one cell: make a real 100 ₸ payment and check that the pulse or the door works.
- Then roll out to the rest of the machines.
You can hand the module and server code to an AI agent. Give Claude, Cursor or ChatGPT the link api.qut.kz/for-ai, and it will read the Qut Pay API from there.
Frequently asked questions
Does Qut Pay install the machine or the module?
No. Qut Pay is a software service only: it creates the invoice, watches the payment and sends the webhook. You or your integrator build the module, the wiring and the machine's software.
How is the QR shown on a machine without a screen?
With a permanent QR sticker. In the cabinet's Links section, create a separate link per machine, print its QR and stick it on. When the customer scans it, the payment page opens on their phone.
How fast does the machine start after payment?
The webhook usually arrives within 5 seconds of the payment. Add the response time of your server and the module.
Can a car wash customer choose the amount?
Yes. If the link has no fixed amount, the customer enters it. You can set a minimum and a maximum. Your server counts the pulses from the amount received.
What happens if the Kaspi connection drops?
New Kaspi payments do not go through until the cashier is reconnected. A Telegram alert is sent, and reconnecting in the cabinet takes a few minutes. That is why it is better to keep a backup payment method on the machine (coins, notes, card).