Bitta Retail POS guide

Licensing and trials

How Bitta Retail POS licensing works: the 30-day trial, server-signed entitlement, 14-day grace period, terminal cap, what is blocked at expiry, and how to activate, refresh, or move a license.

status: verified applies-to: 1.0.0.121rev: 4

Bitta Retail POS ships with a 30-day full-function trial and a server-signed subscription license. This page explains the license states, what is (and is not) blocked when unlicensed, the terminal cap, and how to activate, refresh, or move a license.

How licensing works

The license is a server-signed entitlement: a small payload (plan, licensed terminal count, issue and expiry timestamps, tenant binding) signed by the Bitta Apps license service. The app verifies the signature against a public key embedded in the app, and the stored entitlement is kept in tamper-resistant isolated storage - it is never a table field, cannot be read or written by configuration packages, and is never logged. Nothing in your environment can mint or alter a license.

The verified entitlement produces one of five license states:

State Meaning Blocks anything?
Trial No (or invalid) stored entitlement, within 30 days of first use No
Active Valid entitlement, before its expiry timestamp No (except terminal cap)
Grace Period Valid entitlement, expired, within the 14-day grace window No (except terminal cap)
Expired Valid entitlement, beyond the grace window Yes - new sales and register open
Unlicensed No entitlement and the trial has run out Yes - new sales and register open

A license is bound to your Microsoft Entra tenant and to the exact Business Central environment name it was activated in. An entitlement copied to another environment - even in the same tenant - is rejected. A tampered or invalid entitlement never causes a data lockout; it simply falls back to the trial/grace path, and an invalid response never overwrites a previously stored valid license.

Where to find it

Open Tell Me (Alt+Q) and search "POS License", or use Setup -> POS License on the Bitta Retail POS Admin role center. The page shows License State, Days Left, Plan, Licensed Terminals, Active Terminals, Expires At, and Last Verified Online. It is granted to the admin permission set only.

Trial and grace period

Two safety windows keep the store trading:

  • Trial - 30 days from first actual use. Everything works during the trial, with no terminal cap ("Unlimited (trial)"). The trial starts automatically; no setup or server call is needed. The trial clock uses the Business Central service's UTC time, not the workstation clock.
  • Grace period - 14 days after a stored license expires. The grace window is anchored to the entitlement's expiry or the last successful online verification, whichever is later. That anchor is what makes grace work during outages: if the license service is unreachable while your subscription renews, the register keeps working, and a failed refresh never deletes the stored license.

A dismissible banner appears at the top of both role centers when the trial has 7 or fewer days left, when the license is in its grace period, or when it is expired or unlicensed. The banner carries an Open POS License page action and is silent in a healthy Active state.

TIP

Activation is non-disruptive at any point - you can activate mid-trial without losing anything, and there is no interruption at the register.

Terminal cap

Per-terminal plans license a fixed number of POS terminals. The app counts the terminals currently marked Active on the POS Terminals page and compares that to the licensed count; a licensed count of 0 means unlimited (the trial behavior). The cap is only evaluated in the Active and Grace Period states.

If you see the cap error - "You have %1 active POS terminals but your plan licenses %2..." - deactivate a retired terminal on the POS Terminals page to free the seat, or upgrade your plan. Only Active terminals count, so keep the Active flag honest for decommissioned tills. See Stores, terminals, and users for terminal management.

What is blocked when unlicensed

Enforcement is deliberately minimal and never data-destructive. In the Expired and Unlicensed states (or when the terminal cap is exceeded), exactly two things are refused:

  • Creating a new POS sale - enforced at the database insert, so neither the register nor an API call can create sales in a blocked state. This includes returns: no new revenue transactions.
  • Opening the register - the block surfaces at the top of the login flow, before PIN entry.

Everything else keeps working in every state: viewing data, posting existing open sales, end-of-day consolidation, reports, and exports. Trial and Grace Period never block anything.

A blocked user sees one of two messages: "Your Bitta Retail POS trial has ended. Open the POS License page to activate your subscription." (Unlicensed) or "Your Bitta Retail POS license has expired. Open the POS License page to refresh or re-activate your subscription." (Expired).

NOTE

A cashier hitting the block cannot fix it at the till - an administrator needs to open the POS License page. After activating, new sales work immediately, subject to a short per-session state cache of about five minutes (reopening the session clears it).

Activating, refreshing, deactivating

The POS License page is the entire licensing UI: the read-only status group, an Activation Code field, and three actions.

  1. Open POS License, paste the activation code from your purchase confirmation, and choose Activate. The app contacts the Bitta Apps license service, verifies the returned license locally, and stores it. Success reads "Your Bitta Retail POS license is active."
  2. After renewing your subscription (or periodically), choose Refresh License. The service re-issues the license with a fresh expiry while the subscription is active. On any failure the stored license is untouched and grace applies - simply retry later.
  3. To move the license to another environment, choose Deactivate here (confirmation required), then activate in the target environment. Deactivating never restarts the trial.

If activation fails you get a specific message: a blank code prompts for the code, an unreachable service reports the connection problem (an already-active license keeps working during outages), and a wrong or disabled code surfaces the server's explanation.

Notes and limits

  • Activation requires a real Microsoft Entra tenant. Local development containers and on-premises environments without one cannot activate online and run on the trial and grace windows only.
  • The activation call sends your environment identity, active terminal count, and app version; it never sends sales data.
  • If the register will not open and you suspect licensing, see Troubleshooting. License events also emit privacy-safe telemetry - see Telemetry and diagnostics.
// next step

Ready to try Bitta Retail POS?