Six interconnected capability layers — all API-first, all self-service, and all built to the engineering standards that regulated industries and large-scale operations actually require.
The VariaOS ledger is append-only and immutable. Every accrual, conversion, redemption, expiry, and adjustment creates a LedgerEntry row — no entry is ever updated or deleted, and balance is derived from a snapshot, not a mutable field. Why it matters: points are a financial liability, and a running total silently loses or double-counts under retries, refunds, and concurrency. An append-only ledger makes every balance provable from history — for your finance team that's an audit that passes instead of a reconstruction; for the platform it's the guarantee the naive build can't retrofit.
LedgerEntry model — no mutable balance fieldsLedgerTransaction grouping — all-or-nothing across entries{
"id": "le_01HX9Z...",
"tenantId": 42,
"customerId": "cust_8f3a...",
"transactionId": "txn_c2e1...",
"entryType": "EARN",
"signedAmount": 350,
"runningBalance": 2850,
"referenceOrderId": "ord_9k2p...",
"ruleSetId": "rs_v3_base",
"status": "COMMITTED",
"createdAt": "2026-05-28T09:14:02Z",
// — never updated, never deleted —
}
In the product — AcmeRetail demo tenant, synthetic data · click any screenshot to enlarge




A purpose-built DSL powered by an ANTLR4 grammar with a sandboxed evaluator. Tenants write, version, and test rules without engineering support — and without risking the ledger.
Accrual logic in a purpose-built language that reads like the business rule it implements — authored, tested, and activated by loyalty programme managers themselves. For your team that means promotions ship in hours, not engineering sprints; for the platform it means rule changes are governed data, not code deployments, so a pricing change can never destabilise the engine.
Every rule runs on a sandboxed IR evaluator with no access to the filesystem, network, or other tenants' data — isolation by construction, not by policy. You get the freedom to let non-engineers write live logic without opening a security hole; the platform gets a hard guarantee that the worst a bad rule can be is a wrong number, never an exploit. A Wasmtime hardware-isolated tier is on the roadmap for Scale/Enterprise.
No rule can block order ingestion: a static complexity budget (10,000 units) is enforced when a rule is saved, so anything that could blow the 50ms evaluation window is rejected before it ever runs live. Your checkout-adjacent latency is protected from the rules layer by design — and no tenant can accidentally (or deliberately) stall the pipeline for anyone.
Test a rule against real order data with zero ledger writes: inspect the evaluation trace, see exactly which conditions matched, and preview the points outcome before going live. Rule changes stop being a leap of faith — programme managers catch a mispriced promotion before members do, and finance signs off on earn-rate changes with evidence instead of estimates.
Split live order traffic between two rule sets with deterministic HMAC assignment — the same customer always lands in the same variant, so the experiment is clean. Run a controlled test on your earn rate, measure the outcome through the reporting API, and promote the winner without a deploy. Programme economics stop being set-and-guess: the earn rate becomes an experiment you can defend to finance.
Every rule-set change is versioned and attributed in the audit trail, and any previous version is a one-click rollback. When finance or an auditor asks why April's earn rate changed, the answer is a record, not a memory — and a bad change is a revert, not an incident.
In the product — AcmeRetail demo tenant, synthetic data · click any screenshot to enlarge



In a market of predominantly REST-only reporting, VariaOS ships a full GraphQL API with real-time WebSocket subscriptions. For your team that means live dashboards and member-facing balances that update the moment a transaction commits — no polling loops, no stale caches, and you fetch exactly the fields you need. For the platform it means one governed read surface — paginated, cost-capped by design, scoped tokens for embedded use — instead of a sprawl of bespoke report endpoints.
/graphql/v1 — Hot Chocolate serverdataAsOf staleness metadata on every responserulePerformance query with up to 12-month lookbacksubscription LiveTransactions { onLedgerCommitted { # tenant comes from your authenticated credential eventType customerId pointsDelta newPointsBalance creditDelta newCreditBalance tierId tierRank occurredAt } } # — credential rides in the graphql-ws connection_init payload # — pushed the moment each transaction commits
On the enterprise roadmap: native CDC feeds that push loyalty data directly into your warehouse of choice — with PII governance, DPA workflow, and application-level encryption built in. No third-party tooling. Today, historical loyalty data moves in and out through the auditable order-data import API with reconciliation reporting.
Planned: CDC-based feeds targeting end-to-end latency under 5 minutes on Growth and above — so your BI team analyses loyalty next to every other business domain, minutes after it happens, without building an ETL pipeline.
Planned: configure which customer PII fields are excluded from warehouse feeds, with a DPA confirmation workflow at no additional charge — warehouse analytics without expanding your PII footprint, governance decided once and enforced on every feed.
Planned for the Scale and Enterprise tiers: export full historical loyalty data across any date range — useful for bootstrapping a new connector or recovering from a failed sync.
Customers, transactions, orders, rule evaluations, tier history, and webhook deliveries — planned as individual CDC feed subjects on Scale and Enterprise.
Planned: application-level AES-256 DEK per export file, tenant KEK stored in Azure Key Vault — encryption at the application layer, independent of storage-level encryption.
Planned: US, EU, and APAC region selection, with EU data residency (GDPR DPA + Standard Contractual Clauses) included from Growth at no additional charge. The private beta runs in US Azure regions today — stated plainly, here and in every partner agreement.
Security at VariaOS is not a feature layer added on top — it is built into the data model, the event bus, and the key management architecture from the ground up.
Every customer's PII fields are encrypted with a unique AES-256 Data Encryption Key (DEK), itself encrypted under a per-tenant Key Encryption Key (KEK) stored in Azure Key Vault. Compromise of one DEK cannot affect any other customer record — blast radius is the security story: one key exposes one customer, never a table.
To satisfy a right-to-erasure request, the customer's DEK is destroyed in Azure Key Vault. All encrypted PII fields become permanently irrecoverable — without touching the immutable ledger. The audit trail survives; the personal data does not. You never have to choose between satisfying the regulator and satisfying the auditor.
Negative tests in CI prove that no personal data reaches the event bus — verification in the pipeline, not reviewer vigilance. An event schema registry with publish-time validation is on the roadmap. Everything downstream — webhooks, analytics, integrations — inherits a bus that simply has nothing to leak.
All webhook deliveries are signed with a timestamp-bound HMAC-SHA256 signature. SSRF protection prevents webhook endpoints from targeting internal network addresses. Secrets rotate with a configurable grace period to prevent delivery interruption. Your systems can trust what they receive: forged or replayed deliveries fail cryptographically, not procedurally. An in-portal delivery dashboard tracks every webhook and connector delivery — PII-free, with dead-letter replay.
API keys are stored as Argon2id hashes — the OWASP-recommended memory-hard algorithm that resists GPU and ASIC brute-force attacks. Raw keys are shown once at creation and never stored in plaintext — a database breach yields no usable credentials, even to us.
Planned hardening: FIDO2 hardware-key authentication and dual-operator approval for Super Admin operations (tenant provisioning, role escalation, key management).
All tenant-scoped administrative actions are written to an immutable audit log with default-deny PII redaction and CSV/JSON export. Records cannot be deleted by tenant administrators, and retention is configurable per tenant (30-day floor, 365-day default) with automated purge. When a security review asks who did what and when, the export is the answer.
On the scale-out roadmap: mutual TLS between services via a service mesh. Today the platform runs as a consolidated deployment on Azure Container Apps, and all external traffic — API, portal, and webhooks — is TLS-only.
In the product — AcmeRetail demo tenant, synthetic data · click any screenshot to enlarge

Integration is where loyalty projects live or die, so every source follows one canonical path — normalise via field mapping, evaluate, record — and ingestion is idempotent by order id, so retries and webhook redeliveries can never double-count. Statuses below are honest: private-beta connectors are built and tested, enabled per tenant during onboarding.
The OpenAPI 3.1 spec is published at /openapi/v1.json — generate typed clients for TypeScript, Python, Java, or C# with standard OpenAPI tooling.
In the product — AcmeRetail demo tenant, synthetic data · click any screenshot to enlarge


Self-serve sandbox provisioning is rolling out — join the waitlist for an invite. Full API access, sample data pre-loaded, DSL simulator enabled, and a separate GraphQL endpoint with introspection on.