Age-restricted sale check
Retail Extensions · Rule · checked 2026-10-22
Age-restricted sale check is for a store that sells alcohol, tobacco, vapes, knives or other goods a customer must be old enough to buy. When the cashier scans a restricted item, the till shows the date of birth the customer must be born on or before, and one tap records the ID check on the sale. When the cashier presses Pay, a restricted item the sale's ID check does not cover is refused, even one the cashier picked from a list. Your manager sets the ages; the cashier checks the ID. This page covers what the app adds, how to set it up, how the cashier uses it, and how to remove it.
What it does
| The cashier sees | When |
|---|---|
| A sheet titled Age check: "⟨item⟩: customers 18 or over. Born on or before ⟨date⟩. See their ID.", then "This will be added to ⟨item⟩: IVENDNEXT AGE ID Checked: 18 or over", with Don't add it and Add with these details | The cashier scans an item whose group (or the item itself) has an age. With your ask for ID policy set to an age above the item's, the sentence ends "Ask for ID if they look under 25." instead. |
| Nothing | A later restricted item of the same sale needs that age or less: the sale was asked about already. |
| "This sale can't be paid", with "Line ⟨n⟩: ⟨item⟩ is for customers 18 or over. See their ID, then enter 18 in Sale details, or take it off." | The sale has a restricted item and no ID check: the cashier picked it from a list, chose Don't add it for an earlier item, or typed something that is not an age, such as a date of birth. |
| "This sale can't be paid", with "Line ⟨n⟩: ⟨item⟩ is for customers 21 or over; the sale's ID check says 18. See their ID, then enter 21 in Sale details." | An item needs a higher age than the sale's ID check. |
| The item goes on, or the sale goes on, and is flagged on Sales to review | The service did not answer in time, has not been sent the app's user yet, or could not read your shop. |
A refund is never checked. An exchange is checked for the items it sells. No date of birth or ID number is asked for or kept: the sale records the age the cashier confirmed, such as "18 or over".
What you set up first
-
Install the app from the App library (see About Retail Extensions). The install adds the settings record IVENDNEXT AGE Settings, a field Customers must be at least this old on Item Group and on Item, the sale detail IVENDNEXT AGE ID Checked and the role IVENDNEXT AGE Integration, with no one in it. Its two checks come in switched off.
-
Make a user for the app. Tick Is Desk User, give it the role IVENDNEXT AGE Integration alone and save. Then generate its API key: on the user, open Settings and press Generate Keys.
-
Search Desk for Role Permissions Manager. Give IVENDNEXT AGE Integration these rights:
Record type Right Why Item Group Read the service reads your ages and your group tree Item Read it reads an item's own age -
Search Desk for Registered Application and open IVENDNEXT AGE Check. Choose the app's user as its Application User and save.
-
Make the record Default of IVENDNEXT AGE Settings, and set the ages (below).
-
Switch the checks on (below).
-
In the App library, find the app under Installed and press Details. On the app's record, press Connect again. Your site sends the service the API key of the app's user.
Settings
Search Desk for IVENDNEXT AGE Settings and make the record Default.
| Field | What it does |
|---|---|
| Hours from UTC at the shop | Your own day decides the date of birth the till shows: 4 for Dubai, 3 for Nairobi or Riyadh, 2 for Johannesburg, −6 for Mexico City. Blank: UTC. Change it when your clocks change. |
| Ask for ID from anyone who looks under | Your policy, such as 25: the till adds "Ask for ID if they look under 25." on an item whose age is lower. 0 or blank: "See their ID." |
Ages
Open Item Group and, on each group the law restricts (such as Alcohol or Tobacco), set Customers must be at least this old: 18, or 21, as your country says. The age covers every group below it, unless a group below sets its own: Alcohol at 18 with Beer at 16 below it sells beer at 16 and wine at 18. 0 means none of its own, so the group above applies: to sell a group with no age, move it out of the restricted group.
On an item whose age differs from its group's (a knife among kitchenware), open Item and set the same field. 0 means its group's age applies. On an item with variants, set the age on each variant or on their item group: the till asks at the scan by the variant's own age or its group.
The service reads your settings and ages again within a minute of a change.
Switch the checks on
The app has two checks: Age check at the scan, and Age check at Pay.
- Search Desk for Retail Extension Subscription and open Age check. In its Settings, add the item groups you gave an age, beside what is there, so it reads like
{"event": "scan", "item_field": "ivendnext_age_min_age", "item_groups": ["Alcohol", "Tobacco"]}. The item field already asks about items with their own age. A group left off this list is still caught at Pay. - On each of the two, read what it is sent, tick the consent, choose the POS Profiles of your stores and switch it on.
One app answers the scan on a POS Profile. Where another app already does (Till guard rules, Warranty capture), Age check cannot be switched on for that profile: switch on Age check at Pay alone there, and the cashier enters the age in Sale details when Pay asks. A POS Profile can have at most three checks before payment, 10 seconds together; Age check at Pay takes 4.
At the till
- The cashier scans a restricted item. A sheet shows the date of birth the customer must be born on or before.
- The cashier checks the customer's ID. If the customer is old enough, the cashier presses Add with these details: the item goes on the sale and the ID check is recorded. Otherwise, Don't add it.
- The cashier presses Pay. If the sale is refused, the cashier reads why and presses Back to the basket. After checking the ID, the cashier taps Sale details on the basket, enters the age in IVENDNEXT AGE ID Checked and presses Save, or takes the item off, then presses Pay again.
What leaves your shop
The app's service runs at age-restricted-sale-check.ivendnext.app, hosted by CitiXsys. After the install, and when you press Connect again, your site sends the service its key from the App library, its address, the two checks' signing keys, and the API key of the app's user.
When the cashier scans a restricted item, your shop sends the scanned item: its code, item group, quantity, unit, batch and serial, the code scanned, the till's reference for the sale, the store, the POS Profile, the till's language, the signed-in cashier's user and the customer.
At each Pay, and before each refund the till pays, your shop sends the priced sale: the store, the POS Profile, the company and the till's day and terminal, the signed-in cashier's user, the customer and their customer group, the price list, the currency and the till's language, the coupons, the details the cashier captured for the sale (the ID check, and any other detail such as a prescription number) and for each line, each line's item code, item group, quantity, unit, price, amount and discount, the totals, the payment methods offered and the till's own reference for the sale. On a refund it also sends the original sale, which kind it was, and how it was paid. No card details are sent.
The service reads your settings, item groups and items with the app's user. It keeps them for up to a minute, and remembers for four hours which ages it asked about on each sale's reference. It keeps no sale. It keeps your site's keys until you remove the app. It writes nothing to your shop.
Limits
- A sale whose first item is restricted is asked twice: the till names the sale only once it has an item.
- The sale keeps one ID check. When a later item asks for a lower age (a beer at 18 after a vape at 21 on a sale's first scan), the lower one replaces it, and Pay names the higher age to enter.
- Until Connect again has sent the app's user, and whenever the service does not answer in time, a restricted item goes on and the sale is paid, flagged for review. Offline, the same. Setting Age check's answer when the service is down to refuse stops a restricted item that is scanned; an item picked from a list still goes on, flagged. Setting Age check at Pay's to refuse stops every sale on that POS Profile while the service is down.
- The first scan after a quiet spell can take too long: the item then goes on with no sheet, flagged, and Pay asks for the age.
- One time zone, and one age per item group, apply to your whole site, so stores in two time zones or two countries share them.
- After an update of the app, check that Age check's settings still name your item groups.
- There is no manager override of a refusal, and no restricted selling hours, in this version.
- The check at Pay does not run when a sale is parked to another till, on a layaway deposit, on an account collection, or in the back office's own POS screen.
How to remove it
- In the App library, find the app under Installed and press Details.
- On the app's record, press Export and uninstall and confirm. iVendNext first exports your settings record and the age fields to a file, and tells the service that the app was removed.
- iVendNext removes the two checks, the settings record, the two fields, the feed registration and the role. The ID check field is kept, switched off, once your past sales name it.
- Make a new API key for the app's user, or disable the user, so the key the service had stops working.