Platform

Managing Customers

The Customers section of the admin portal lets you manage the people enrolled in your loyalty program: their profiles, identifiers, point balances, and redemption history.


Customers list

Navigate to Customers in the sidebar to see all your customers.

Search and filters

  • Search: filter by name with live results (debounced)
  • Status filter: show Active, Deactivated, or All customers

Table columns

The list displays name, email, phone, primary identifier (with type badge), status, and creation date. Click any column header to sort.


Creating a customer

Click Create to open the registration form.

Profile fields

FieldRequiredDescription
First NameNoCustomer's first name
Last NameNoCustomer's last name
EmailNoMust be unique within your vendor
PhoneNoPhone number
Date of BirthNoUsed for birthday promotions
LocaleNoPreferred language (Nederlands or English)

Loyalty card

The form has a single Loyalty card section. You have two options:

  • Leave it blank: Puntjes issues a new card code when you save. Use this when the customer is not being handed a physical card.
  • Pick an unassigned card: choose from the cards you have already generated, or scan the code on the physical card you are giving the customer.

There is no identifier type to choose and no primary flag to set: the card you assign here automatically becomes the one the customer scans. Their wallet pass, the QR in the pass email and the API's loyalty_card_code all follow it, and if they already saved the pass on their phone it is updated to show the new code. Any card they held before stays active and keeps working when scanned. Assigning a replacement never bricks the old one.

If a scanned code is rejected, the message tells you which of the two things went wrong: the code does not match any unassigned card of yours (rescan, or leave the field blank), or the card was already given to another customer.

The email identifier is created for you

You do not add an email identifier by hand. Fill in the Email profile field and Puntjes creates the matching identifier, then keeps it in step with every later change to the address.


Customer detail page

Click a customer's name to view their full profile. The detail page has several sections:

Profile card

Displays all personal information with a status badge. Click Edit to modify profile fields.

Identifiers

A table of all identifiers with their type, value, active/inactive status, and the date they were added. From here you can:

  • Add loyalty card: opens a dialog to assign another unassigned card to this customer. The button is disabled once the customer holds the maximum of five active cards.
  • Deactivate an identifier: disables lookup by that value (with confirmation)

The email row is marked as managed and has no deactivate control; it follows the profile email address. To stop lookups by an address, change or clear the customer's Email field.

Wallet

Shows the current point balance with an Adjust Points button. Clicking it opens a dialog where you enter:

  • Amount: positive to add points, negative to deduct
  • Reason: explanation for the adjustment (recorded in the ledger)

Ledger history

A paginated table of all point movements (earns, adjustments, redemptions, and expirations) with amounts, running balances, and timestamps.

Redemptions

A paginated table of past redemptions with the reward name, status (Valid, Used, Expired), date, and actions.

Redeem a reward

Select an available reward from the dropdown and click Redeem to perform a manual redemption on behalf of the customer. The portal validates sufficient balance and stock before processing.

The dialog also asks which branch the redemption happened at. For a reward restricted to branches the answer is required, and only that reward's own branches are offered; otherwise it is optional and defaults to none. Vendors with no branches see no such question. See Managing Rewards for how the restriction is set.

Use a voucher

Vouchers lists the bonnen a campaign gift handed this customer, and Use voucher spends one. Type the code the customer shows you and confirm. There is no separate preview step, so open the dialog when you are ready to hand the gift over.

A bon from a campaign limited to branches needs one of those branches named, and the picker offers only the ones that bon allows. If the code turns out to be scoped after you submit (a bon issued while this page was already open, for instance), the dialog says so and asks for a branch. The bon is not spent in that case. See Managing Campaigns for how the limit is set.


Loyalty cards

Navigate to Loyalty cards in the sidebar. This page is where you create the stock of codes that gets printed on physical cards, so you can hand a customer a card before they are registered.

You do not need this page to run a loyalty program. If you never pre-print cards, Puntjes issues a code for every customer automatically and this list simply fills up on its own.

Generating a batch

Click Generate cards, enter how many you need, and confirm. Codes are created immediately and grouped into a batch so you can find them again later.

  • Between 1 and 10,000 cards per batch. For a larger print run, generate several batches.
  • Generated cards cannot be deleted: generate what the print run actually needs.
  • New cards start as Unassigned. They become Assigned when a customer is registered with them.

Downloading the CSV

After generating, a panel appears with Download CSV for the batch you just created. You can also use Export CSV at any time to download either the current batch or every unassigned card you have.

The file has a single code column. One code per row. That is the file your print shop needs.

Print specification

Codes are 8 characters, drawn from uppercase letters and digits only (A-Z, 0-9). There is no lowercase to preserve, so every common symbology works: QR or Data Matrix (the payload is simply the code itself), Code 128, or Code 39 if your printer or scanner requires the older uppercase-only standard.

Ask your print shop for a font that distinguishes 0/O and 1/I, so a code that has to be typed in by hand is not ambiguous.

Finding a card

The list can be filtered by status (All / Unassigned / Assigned) and by batch, and searched by code. Assigned cards show the customer holding them.

Generate stock before your POS starts scanning

A scanned code can only be accepted if it matches a card you have already generated. If tills start scanning pre-printed cards before the matching batch exists in Puntjes, every scan is correctly rejected as unknown stock.


Customer actions

Deactivate

Deactivating a customer prevents them from earning or spending points. Puntjes asks you to confirm first. The customer can still be identified in lists but cannot transact.

Anonymize

Anonymizing a customer permanently removes all personal data for GDPR compliance. You must type ANONYMIZE in the confirmation dialog to proceed. Anonymized customers are excluded from all queries and reports.

Anonymization is permanent

This action cannot be undone. All personal data is irreversibly deleted. The wallet and ledger history remain but are no longer linked to identifiable information.

Previous
Admin Portal