Every movement is one row.
Earn, redeem, refund, expire and adjust, each with its source and order reference.
Every point a member earns, spends, loses or gets back is one row in a ledger that cannot be edited. Retries, double-clicks and flaky networks cannot award the same purchase twice.
A till that retries after a timeout, or a web shop that fires the same webhook twice, quietly hands out free points. Over a year that becomes a liability nobody can explain. Points need the same care as payments.
Earn, redeem, refund, expire and adjust, each with its source and order reference.
Quote the value first, with your minimum and per-order limits applied.
A missing Idempotency-Key is rejected with IDEMPOTENCY_KEY_REQUIRED. Reusing a key with a different body is rejected with IDEMPOTENCY_KEY_MISMATCH. Every member write takes a row lock, so concurrent tills cannot overspend a balance.
1POST /api/v1/points/award2Idempotency-Key: ord-5811434{ "member": "pos:000731",5 "purchase_amount": 2450.00, "currency": "MKD",6 "source": "pos", "source_ref": "ord-58114",7 "pending_until": "2026-10-15T00:00:00Z" }
Not today. One rate applies per order: campaign, tier or programme default.
Not today. Expiry is end of year, a rolling number of days, or never.
Each programme has one currency. Purchases in another currency are rejected rather than converted.
Tell us about your members, your tills and your shop, and we’ll show you where Vendor Loyalty fits.
Launch a store yourself, or talk to us about connecting ecommerce to the systems you already run.
Everything you need to launch, manage and grow an online store. From €39/month.
Explore CommerceLarger catalogs, advanced pricing, complex operations and deeper integrations.
Explore Scale