Integrations
Tills, shops and messaging, connected
Everything a shop already runs keeps running. Tills and sites call one till API, online orders arrive by webhook, and messages leave through the providers you hold the accounts with.
Till API · /v2
One base URL for every cash register and shop site
A till identifies the buyer by phone, e-mail, card number or a code from the app, asks for a quote, and commits the receipt after payment. Each call is a POST with a JSON body and a bearer key issued in the back office; keys bind to a location or stay global.
The engine does the money work: first-match rules, split of the write-off across earned, gifted and promo balances, caps per item and per cart, promo codes, gift certificates, a reserve that holds points while the cashier finishes, confirmation codes for write-off, receipt texts, and idempotency by the external receipt id so a retried request never doubles a sale.
Amounts travel in the tenant's currency with its own number of decimals (euros with two, yen with none) and are stored in minor units. One point equals one unit of currency.
| Group | Calls | Examples |
|---|---|---|
| Customer | 14 | buyer-register, buyer-info, buyer-edit, buyer-bonus, purchase-list, groups |
| Purchase | 10 | purchase-dry-run, purchase, purchase-info, edit, cancel, change status, purchase-request with a reserve, write-off-request |
| Confirmation codes | 5 | send and verify registration, write-off and custom codes |
| Gift certificates | 4 | issue, check, redeem, cancel |
| Mobile app, additional, service | 8 | app tokens, promo code check, health |
POST /v2/purchase
Authorization: Bearer <till key>
{
"phone": "+4915112345678",
"external_purchase_id": "receipt-2026-10-22-0417",
"sale_point": "Berlin Mitte",
"write_off_bonus": 10,
"items": [
{ "name": "Espresso beans 1 kg", "amount": 100.50, "quantity": 1 },
{ "name": "Filter paper", "amount": 20.00, "quantity": 2 }
]
}
HTTP 200
{
"success": true,
"purchase_amount": 120.5,
"payment_amount": 110.5,
"total_write_off_bonus": 10,
"total_write_on_bonus": 11,
"balance": 51,
"items": [
{ "amount": 100.5, "payment": 90.5, "write_on_bonus": 9, "write_off_available": 51 },
{ "amount": 20, "payment": 20, "write_on_bonus": 2, "write_off_available": 51 }
],
"print_on_check": "You earned 11 points. Balance: 51."
}

POS API · /pos/v1
A compact protocol for terminals
Sixteen calls for a terminal that only needs to register a purchase, look up a member by phone or card, hold a redemption and confirm it with a code. Authenticated with an API key header, bound to a location, rate limited per key.
POS API reference- Member lookup and registration from the terminal
- Purchase registration with items and the cashier
- Redemption hold, confirmation by one-time code, release
- Referral code check at the till
Shopify and WooCommerce
Online orders earn and redeem like receipts at the till
Shopify
Connect a store with its Admin API token in the integrations screen. Loyalti registers webhooks for paid orders, cancelled orders and refunds, maps the order lines to the catalog and runs them through the same till engine, so rules, caps and point expiry apply to the shop exactly as to the store.
- Customer matched by e-mail or phone, created on first order with consent flags
- Refunds reverse the accrual of the refunded lines only
- Members issue a discount code from their points in the portal; the code is created in Shopify and tracked until used
- Webhook signatures verified, events stored and replayable
WooCommerce
REST credentials of the shop and a webhook secret. Order created, updated, paid and refunded events feed the engine; order status policy decides which statuses count as a sale and which as a return.
- Coupon codes issued from points and consumed in the shop
- Catalog sync: products, categories and variants for rules and restrictions
- The same member, balance and history across the shop and the stores

Bitrix24
CRM in sync with the programme
Members, their balances and purchases are pushed to Bitrix24 contacts and deals; Bitrix24 webhooks bring new contacts and deal changes back. Field mapping and the direction of sync are configured per tenant.
- Contact and deal mapping with custom fields for balance and tier
- Incoming webhook endpoint with a shared secret
- Sync log and retry from the integrations screen
Messaging channels
Six channels, one message, the right one per member
| Channel | Provider | What is supported |
|---|---|---|
| SMS | Twilio | Sender id or messaging service, delivery receipts by status callback, one-time codes for registration and write-off, campaign sends in the recipient's timezone |
| Twilio WhatsApp Business | Approved content templates with variables, session messages, one-time codes, campaign channel with fallback to SMS | |
| Telegram | Your bot | Linking by deep link, campaign messages, one-time codes, balance and history replies, menu in the member's language |
| Viber | Viber bot | Campaign messages with buttons, linking from the portal, delivery status |
| Any SMTP | Templates per event, the e-mail maker for campaigns, open and click tracking, platform e-mails for verification and passwords | |
| Push | APNs and FCM | Device tokens from the app, campaign pushes, Wallet pass updates |
Provider credentials are entered once in the super-admin panel and stored encrypted. Each tenant chooses sender names, templates and the channel priority used when a campaign is set to fall back. A sandbox mode delivers only to listed test recipients, so a staging tenant never writes to real customers.

Apple Wallet and Google Wallet
A card the till scans and the phone keeps current
A loyalty pass with the member's name, balance and tier, a barcode or QR for the till, and your colours and logo. The pass is issued from the portal or a link in a message; the balance on the pass updates after each purchase through pass updates.
- Apple Wallet with your pass certificate, Google Wallet with a service account
- Electronic cards dashboard: issued, installed, active, redemptions from cards
- Plastic and digital cards share the same card number
Outgoing webhooks
Your systems hear about every event
Endpoints with a signing secret subscribe to member, points, tier and order events. Deliveries are logged with the response and retried from an outbox, so an ERP, a BI pipeline or a CDP stays in step without polling.

| Event | When |
|---|---|
| member.created | A member registers from any source |
| member.updated | Profile, consents or labels change |
| points.earned | A receipt, a grant or a scenario adds points |
| points.redeemed | Points pay for a purchase or a code |
| points.expired | Points reach their expiry |
| tier.upgraded, tier.downgraded | A member moves between tiers |
| order.approved, order.canceled | An order is settled or reversed |
Mobile app
A branded app for iOS and Android, built on the same API
The member portal covers the browser; when a brand wants its own app, we build one on the Platform API and the Till API: balance and history, a Wallet card, offers and campaigns, push notifications, registration and phone confirmation, a QR code for the till. Delivered as a custom project alongside the platform, for both platforms.
- Mobile app tokens and device registration are part of the till API
- Push through APNs and FCM is already wired for campaigns
- The app uses the same member, balance and rules as the stores and the shop
Backups
Scheduled dumps to S3, restore from the screen
A backup service dumps the database on schedule, keeps a retention window locally and in any S3-compatible bucket, and logs every run. Restore of a tenant or the whole platform runs from the back office; a restore endpoint accepts a dump up to a gigabyte.
Monitoring
Prometheus, Grafana, Loki and Alertmanager included
The platform exposes a health endpoint and a metrics endpoint with request, queue and till counters. The monitoring stack ships with dashboards and alert rules; the super-admin panel shows queues, logs and alerts without leaving the product.