
For merchants
Merchants keep your billing screen. Loyalty rides alongside — lookup, redeem, earn, reverse — without leaving the ticket.
11/11 endpoints live-verified
Integrate OwnRewards once — then every merchant on your platform can run points, rewards, coupons, WhatsApp win-backs and a branded member app at the counter. Verified REST APIs. Days to ship, not months.
For POS vendors & in-house POS teams · Merchants keep your till UI

Integrate once
Every merchant on your POS unlocks full OwnRewards loyalty

Merchants keep your billing screen. Loyalty rides alongside — lookup, redeem, earn, reverse — without leaving the ticket.

You become the POS that ships enterprise retention. Co-market with us; partner pricing available.
What you enable
You don't rebuild loyalty. You open the pipe. Merchants configure programs in OwnRewards; your POS becomes the place they earn and redeem.
Earn on every closed bill — with a margin rulebook (OTP, caps, stacking) so generosity doesn't eat the ticket.
See featureCatalog redemptions and ruled coupons validated before payment — shared festival codes or unique per customer.
See featureStatus ladders that upgrade automatically — celebrate in WhatsApp and show progress in the member app.
See featureBalance updates, OTPs and win-backs on the app customers actually open — quiet hours and credits enforced.
See featureBranded PWA — points card, coupon wallet, referrals. No app store.
See featureBirthday, silence win-back, points-expiring — set once in OwnRewards; your POS just posts the bill.
See featurePost-visit forms after the bill; 2★ recovery stays private, 5★ gets a Google path.
See featureCohorts, at-risk lists, dual loyalty ROI — retention they can prove from the same bills you already send.
See featureCounter loop
Do not redeem by only posting a bill — redemption goes through cart-checkout. Earn happens after payment on save-own-bill.
Cashier enters the customer phone. POS calls cart-validate — balance, eligible rewards and coupons come back in one response.
POST /loyalty-redeem/cart-validateCustomer picks points, a reward or a coupon. Optional OTP confirms high-value redemptions. Discount lands on the ticket before payment.
POST /loyalty-redeem/cart-checkoutAfter payment, POS posts the closed bill with a unique order id and stable itemIds. Points credit; WhatsApp fires.
POST /loyalty-bill/save-own-billVoid or return? Call order/return — loyalty reverses cleanly. Duplicate bill posts return 409 and credit nothing twice.
POST /v1/loyalty/order/returnAPI surface
Live reliability suite · 11/11

| Job | Endpoint | Notes |
|---|---|---|
| Pre-bill lookup | POST /loyalty-redeem/cart-validate | Points, redeemable balance, eligible rewards & wallet coupons |
| Typed coupon check | POST /loyalty-redeem/validate-coupon | Shared or unique codes before apply |
| Redeem + OTP | POST /loyalty-redeem/cart-checkout | Apply reward / points / coupon; OTP when outlet requires it |
| Bill earn | POST /loyalty-bill/save-own-bill | billStructureId auth · unique order id · line items with itemId |
| Cancel / return | POST /v1/loyalty/order/return | API key · reverses earn/redeem safely |
| Product catalog | You host HTTPS catalog | OwnRewards pulls; register catalogUrl + Bearer token |
| Custom events | POST /events/publish | Optional — birthdays, visits, custom triggers |
| Outbound webhooks | Platform webhooks (HMAC) | Earn, redeem, tier — push into your stack |
Auth: billStructureId on save-own-bill · optional API key on cart routes · X-API-Key + Secret on /v1/loyalty and events.
Ship it
Outlet → Integrations → Custom POS. You get billStructureMappingId and a saveBillUrl.
Post one sample to save-own-bill. Map your JSON fields to OwnRewards canonical fields in admin.
draft → pending → active. Earn runs only when active — no surprise credits during mapping.
cart-validate → (validate-coupon) → cart-checkout → save-own-bill → order/return on voids.
Register your catalog URL. Create an API key for /v1/loyalty and events. Subscribe to webhooks.
// 1) Lookup at the till
POST /loyalty-redeem/cart-validate
{
"phoneNo": "9876503099",
"countryCode": "91",
"outletId": "<outletId>",
"billAmount": 500,
"cartItems": [{ "itemId": "SKU-1", "name": "Latte", "qty": 1, "price": 180 }]
}
// 2) Apply reward / points / coupon (+ OTP when required)
POST /loyalty-redeem/cart-checkout
{ "phoneNo": "…", "outletId": "…", "rewardId": "…", "otp": "123456" }
// 3) After payment — earn (unique order id; 409 = already credited)
POST /loyalty-bill/save-own-bill
{ "billStructureId": "…", "orderId": "POS-88421", "items": [/* itemId required */] }
// 4) On void / return
POST /v1/loyalty/order/return
Headers: X-API-Key, X-API-SecretWhy POS vendors ship this
Loyalty programs raise switching cost. Merchants who earn and redeem inside your POS stay on your POS.
You ship the connector once. Each merchant configures their own earn rates, rewards and WhatsApp in OwnRewards.
Partner pricing, co-marketing and a joint story: billing + retention in one counter flow.
Idempotent bills (409), OTP redemption, HMAC webhooks, rate limits with Retry-After — built for real tills.
FAQ
Teams that already post bills over HTTPS usually ship the core loop (validate → checkout → save-own-bill → return) in a few days. Catalog pull and webhooks add a short follow-up.
Next step
Book 30 minutes — we'll walk the counter loop against your bill payload and leave you with a ship checklist.
Card after outlet · charged after 14 days · Live in a day