# Ixkio Documentation

Ixkio is a full featured NFC tag authentication and management platform. It's one of the most powerful, flexible and scaleable NFC management platforms on the market. Packed full of features and tools to enable the deployment and control of your NFC tags.&#x20;

Ixkio supports both [Redirect](/using-redirect-mode/redirect-basics) (dynamic links), [Direct Response](/using-direct-response-mode/using-direct-response) and [API](/flex-api/flex-api-getting-started) backend authentication for your NFC tags.&#x20;

## New to Ixkio ?

These guides will help get you started but we recommend that if you are planning out a large tag structure, then speak to us first for advice.&#x20;


# Organisation / Structure

## The Basics

Ixkio is designed to allow the management of large scale tag deployments - but can easily be used to manage just a handful of tags.&#x20;

This is how tags are organised :&#x20;

**Organisation Folders** > **Active Folders** > **Tag Groups** > **Batches** > **Tags**\
\
For example: 2026 > Summer Release > Shoes > Size > Tags

{% hint style="info" %}
The platform is designed so that tags inherit data/rules from the chain above them in a hierarchy structure.&#x20;
{% endhint %}

### Organisation Folders

* Org Folders are simply there to help you organise your project.
* They have no settings or features.
* Org Folders are optional, you don't need to use them.&#x20;

### Active Folders

* Active Folders define the Response Mode (Redirect, Direct or Dynamic).
* Active Folders cannot be inside another Active Folder.
* Extended Data (for example, product data such as colour, size, etc) fields are created at the Folder level.&#x20;
* You must have at least one Active Folder.

### Tag Groups

* Response Rules can be set for all Batches/Tags at the Tag Group level.
* Extended Data is entered at the Tag Group level and will be inherited by all Batches and Tag Codes within the Group.&#x20;
* You must have at least one Tag Group.

### Batches

* Batches directly contain Tag Codes.
* Tag Data can be downloaded and uploaded at the Batch level.
* Tag encoding with the ixkio App is controlled at the Batch level.
* Assignment always moves a Tag Code from one Batch to another.
* You can move Batches between Tag Groups.&#x20;
* Extended data (product data for example) can also be set at the Batch level overruling the Tag Group data and then being inherited by all the Tag Codes within the Batch.
* You must have at least one Batch.

### Tag Codes (XUID)

* <mark style="background-color:green;">Tag Codes are unique URLs/links for encoding onto NFC Tags or QR Codes.</mark>
* You can move Tag Codes between Batches under the same Active Folder.
* Rules can be created at a Tag Code level or are inherited from the Tag Group level.

> You can encode a Tag Code onto as many NFC tags as you want but they will be managed the same way. If you want to manage each single NFC tag on it's own, encode a unique Tag Code on each one.&#x20;

## Recommended Structure

If you are setting up a large structure, talk to us first. Alongside the hierarchy structure, there's also additional management tools such as Clusters which can be used to organise large numbers of tags. We can provide advise on the best way to set things up for scale.&#x20;

#### Keep it simple

As a general rule, keep it simple. Most projects won't need Org Folders and many won't need more than one Active Folder. Many of the projects - even those with hundreds of thousands of Tag Codes - can be simply managed with multiple Tag Groups under a single Active Folder.&#x20;

#### Use Batches

Batches are an important way to help manage projects. You can download stats, encode with the ixkio mobile app, move tags with Assignment and create associations all at the Batch level. We recommend using Batches for each set of tags you release.&#x20;


# Folders

<mark style="color:green;">**Organisation Folders**</mark> > <mark style="color:green;">**Active Folders**</mark> > Tag Groups > Batches > Tag Codes

### Overview

There are two types of Folders :&#x20;

Organisation Folders, which are only used to manage your Active Folders&#x20;

{% content-ref url="/pages/kQS6sPACF0BhXl4e1JpI" %}
[Organisational Folders](/getting-started/organisation-structure/folders/organisational-folders)
{% endcontent-ref %}

and Active Folders, which contain important settings like the [Response Mode](/getting-started/response-modes-explained) and act as the top of the organisational tree for managing your tags.&#x20;

{% content-ref url="/pages/rRTZpp3OsIAOO5kNbVIl" %}
[Active Folders](/getting-started/organisation-structure/folders/active-folders)
{% endcontent-ref %}


# Organisational Folders

<mark style="color:green;">**Organisation Folders**</mark> > Active Folders > Tag Groups > Batches > Tag Codes

## Overview

Org Folders are simply there to help structure your projects.

Navigate to *<mark style="color:orange;">Folders > View Folder Tree</mark>* to create and manage Org Folders.&#x20;

{% hint style="info" %}
You don't need to have any Org Folders. For smaller projects, we recommend just using Active Folders.
{% endhint %}

It's possible to have an Org folder within an Org folder. You can do this by dragging and dropping your Org Folder to the location you want it to move to.

You can also have multiple Active Folders within Org Folders.

You cannot delete an Org Folder unless it is empty.&#x20;

### Creating Organisation Folders

Navigate to the *<mark style="color:orange;">Main Menu > Folders > View Folder Tree</mark>*.&#x20;

In the Add Root Folder panel, enter the Folder name and choose the Folder Type using the drop down list. Then click Add Folder.

### Deleting an Organisation Folder

To delete an Org Folder, navigate to *<mark style="color:orange;">Main Menu > Folders > View Folder Tree</mark>*. Then right click on the desired Folder and click 'Delete'. Org Folders need to be empty to be deleted.&#x20;


# Active Folders

Organisation Folders > <mark style="color:green;">**Active Folders**</mark> > Tag Groups > Batches > Tag Codes

## Overview

At least one Active Folder is required. Active Folders have important settings but are also used to manage structures.&#x20;

Important Active Folder settings :&#x20;

* [Response Mode](/getting-started/response-modes-explained)
* [Extended Data Fields](/features/meta-data/extended-data)
* [Data Merge Settings](/features/datamerge)
* Templates for Direct Response

## Creating Active Folders

Navigate to the *<mark style="color:orange;">Main Menu > Folders > View Folder Tree</mark>.*&#x20;

In the Add Root Folder panel, enter the Folder name and choose the Folder Type using the drop down list. Then click Add Folder.\
\
Alternatively, you can right click on an Org Folder and click 'Add Active Folder'. This will place the new Active Folder within your Org Folder.

To rename an Active Folder, right click on the Folder and click 'Rename', enter the text and press enter. You can also rename an Active Folder from the Active Folder screen.&#x20;

After an Active Folder has been created, you can add the [Active Folder settings](/getting-started/organisation-structure/folders/active-folder-settings).&#x20;

## Moving Active Folders

To move an Active Folder, navigate to the *<mark style="color:orange;">Main Menu > Folders > View Folder Tree</mark>*. From here you can drag and drop your Active Folder to an Org Folder. Active Folders cannot exist inside other Active Folders.&#x20;

{% hint style="info" %}
It's possible to have multiple Active Folders within an Org Folder
{% endhint %}

## Deleting Active Folders

To delete an Active Folder, navigate to the *<mark style="color:orange;">Main Menu > Folders > View Folder Tree</mark>*. Right click on the desired Folder and click 'Delete'.

Alternatively, you can navigate to the *<mark style="color:orange;">Main Menu > Folders > List Active Folders</mark>*. Then click on the Active Folder you wish to delete. In the Folder Detail panel, click the Settings tab, select the Folder Status drop down list and select Delete, then Update.&#x20;

{% hint style="danger" %} <mark style="color:red;">**IMPORTANT**</mark>

Once an Active Folder has been deleted, it cannot be recovered, including all of its contents (Tag Groups, Batches and Tag Codes).
{% endhint %}


# Active Folder Settings

Organisation Folders > <mark style="color:green;">**Active Folders**</mark> > Tag Groups > Batches > Tag Codes

## New Active Folders

Before an Active Folder can be used, the [Response Mode](/getting-started/response-modes-explained) needs to be selected. After [creating a new Active Folder](/getting-started/organisation-structure/folders/active-folders#creating-active-folders), navigate to the Settings tab on the Folder Detail panel. Select the chosen Response Mode and click Update to activate.&#x20;

{% hint style="info" %}
Active Folder Response Mode cannot be changed after being set. If in doubt, just choose Dynamic.&#x20;
{% endhint %}

## Active Folder Settings - Direct & Redirect

These are settings available across both of the Response Modes.&#x20;

### Folder Status

*<mark style="color:orange;">Folder Detail Panel > Settings Tab</mark>*

Changes the Status of the Folder and all Tag Groups, Batches and Tag Codes underneath. Options are :&#x20;

**Active :** Normal function.&#x20;

**Inactive :** Tag Code response is disabled.&#x20;

**Delete :** Will delete the Folder. All Tag Groups need to have been deleted to delete a Folder.

### Folder Name

*<mark style="color:orange;">Folder Data Panel > Core Tab</mark>*

Change the name of your Folder. As Folder names can also be used in Redirects (see [Datamerge](/features/datamerge)), the range of allowed characters is limited. Any update to the Folder Name here is instantly changed throughout the system.

## Redirect Response Mode Settings

### Test Mode

*<mark style="color:orange;">Folder Detail Panel > Settings Tab</mark>*

Test Mode allows you to see the decision process and actions taken during the Redirect. It is designed as an easy debug mechanism to understand, for example, how any Rules are being processed.&#x20;

{% hint style="warning" %}
We strongly advise not to use test mode once your project has gone live. If you need to undertake further testing, create a duplicate setup under another Folder.&#x20;
{% endhint %}

### Locus

&#x20;<mark style="background-color:green;">Module</mark>&#x20;

*<mark style="color:orange;">Folder Function Panel > Locus Tab</mark>*

Locus is a powerful feature that enables control over Tag Codes directly from an NFC tag scan using the ixkio mobile app. Some Locus features are now also available with Direct Response.&#x20;

To enable Locus, [activate the Locus Module](/modules/adding-modules).&#x20;

Note that Locus is still in beta. Contact us for further information on using Locus

## Direct Response Settings

### Templates

Templates are the page that users see when tapping and NFC tag in Direct Reponse mode. You can create multiple Templates and show different content to different users across different tags - or even different users scanning the same tag.&#x20;


# Tag Groups

Organisation Folders > Active Folders > <mark style="color:green;">**Tag Groups**</mark> > Batches > Tag Codes

## Overview

The Tag Group level is designed a broad management level for tags that will have a similar response. In many cases, projects can be managed simply from Tag Groups. Small projects may only need a single Tag Group. TapStart accounts have just one Tag Group.&#x20;

Important Tag Group settings :&#x20;

* [Rules](/features/rules)
* [Extended Data Defaults](/features/meta-data/extended-data)

## Creating Tag Groups

You create Tag Groups at the Active Folder level.&#x20;

Scroll down to the bottom of the Active Folder page to the Tag Groups panel. Click the *Add New Tag Group* button. This will direct you to the Add New Tag Group screen where you can enter the name of your new Tag Group.&#x20;

Tag Group names can only have a character restriction so they can be used within [Subtags](/features/subtags) and [Datamerge](/features/datamerge).&#x20;

{% hint style="info" %}
You cannot move Tag Groups between Active Folders.
{% endhint %}

### Tag Type

If you are on the Flex Pro or Ultra plans, then you can also select the Tag Type of your Tag Group. This cannot be changed after the Tag Group has been created. If you are using authentication grade NFC tags (NTAG424 for example), then you must select Authentication. If you are using standard NFC tags (NTAG213 for example), then you should select Standard.&#x20;

This setting changes the way that data is handled and it's important to select the right Tag Type.&#x20;

You cannot mix Tag Types within the same Tag Group.&#x20;

## Deleting Tag Groups

Tag Groups need to be empty of all Tag Codes and Batches before they can be deleted.&#x20;

Navigate to the Tag Group you want to delete, then *<mark style="color:orange;">Folder Detail Panel > Settings Tab</mark>.* Select *Delete* from the *Folder Status* dropdown menu. Then *Update.* You will be prompted to confirm you are sure and then the Tag Group will be deleted.&#x20;

{% hint style="danger" %}
Deleting a Tag Group is permanent. It cannot be reversed. Proceed with caution !
{% endhint %}


# Tag Group Settings

Organisation Folders > Active Folders > <mark style="color:green;">**Tag Groups**</mark> > Batches > Tag Codes

## Overview

Tag Group settings will be dependent on the selected [Response Mode](/getting-started/response-modes-explained) and other [Active Folder](/getting-started/organisation-structure/folders/active-folders) settings.

## Generic Tag Group Settings

These are settings available across more than one of the Response Modes.

### Tag Group Status

*<mark style="color:orange;">Tag Group Detail Panel > Settings Tab</mark>*

Changes the Status of the Tag Group and the effective status of the Tag Codes underneath. Options are :&#x20;

**Active :** Tag Codes under the Tag Group are Active.&#x20;

**Inactive :** Tag Code response is disabled. For both Redirect and Direct Response Mode, any request for Response (ie, a tag scan directing to ixkio), will show a blank page. No message is provided. For API Response Mode, a 'tg\_inactive' error will be returned.

**Delete :** Will delete the Tag Group. All Batches need to have been deleted to delete a Tag Group.

### Chip Count Enabled

*<mark style="color:orange;">Tag Group Detail Panel > Settings Tab</mark>*

This will enable the display of the Chip Count within the interface. Important : Read the notes on the difference between between [Chip Count and Scan Count](/explainers/chip-count-vs-scan-count).&#x20;

### Tag Group Name

*<mark style="color:orange;">Tag Group Data Panel > Core Tab</mark>*

This changes the interface name for the Tag Group. This name can also be included in the Response using [Subtags](/features/subtags).

### Extended Data Defaults

*<mark style="color:orange;">Tag Group Data Panel > Extended Tab</mark>*

Allows the setting of default data for any [Extended Data](/features/meta-data/extended-data) fields you have created (at the Active Folder level). Any data entered here will automatically be inherited by all Tag Codes within this Tag Group unless specifically set at the Tag Code level.&#x20;

Extended Data defaults can be included in the Response either using [Subtags ](/features/subtags)or [Data Merge](/features/datamerge). To include this data in a Data Merge response, you also need to allow this on the *<mark style="color:orange;">Active Folder > Folder Function Panel > Response Tab</mark>*.

## Tag Group Functions

### Ruleset

*<mark style="color:orange;">Tag Group Function Panel > Ruleset Tab</mark>*

You can create Rules here to change how tags will respond. Rules created here will apply to all tags created under this Tag Group but you can also break the link by created Tag Code specific rules if you choose.&#x20;

{% hint style="warning" %}
You need to set a Default [Redirect destination URL](/using-redirect-mode/redirect-basics) or select a Default Template or your tags will have nowhere to go when scanned !
{% endhint %}

{% content-ref url="/pages/vi6PgLwhie5adMmP9eCF" %}
[Rules](/features/rules)
{% endcontent-ref %}

### Clusters

*<mark style="color:orange;">Tag Group Function Panel > Clusters Tab</mark>*

Clusters allow grouping of Batches. Clusters for Batches under this Tag Group can be created here. Cluster names can also be dynamically included in Redirect links or Direct Response templates.&#x20;

{% content-ref url="/pages/UDkWXDuqB8FTPxTEmnBM" %}
[Clusters](/advanced-features/clusters)
{% endcontent-ref %}


# Batches

Organisation Folders > Active Folders > Tag Groups > <mark style="color:green;">**Batches**</mark> > Tag Codes

## Overview

Batches are an important tool for managing large numbers of Tag Codes that will act in a similar way and will typically have the same Rules and settings.&#x20;

For example, if you have a product that has a manufacturing run every few months, you can create a new Batch for each run. This will give you control and organisation over the release of your tags.&#x20;

## Creating a Batch

Batches are created at the Tag Group level.

Navigate to the Tag Group where you wish to create your Batch, then the Batches panel. Click 'Add New Batch'. This will instantly create a new Batch and display the Batch screen.&#x20;

You can name your new Batch in the *<mark style="color:orange;">Batch Data Panel > Core Tab</mark>*

The Batch name is used internally for management but can also be dynamically included in the Response using [Subtags](/features/subtags).&#x20;

## Moving a Batch

You can move Batches between Tag Groups within the same Active Folder. Batches cannot be moved outside the current Active Folder.&#x20;

To do this, on your chosen Batch screen, navigate to *<mark style="color:orange;">Batch Detail Panel > Move Tab.</mark>* Select your destination Tag Group from the dropdown list and click 'Move Batch'. All Tag Codes within this Batch will automatically inherit any Rules or settings from the destination Tag Group.&#x20;

## Deleting a Batch

To delete a Batch, on your chosen Batch screen navigate to *<mark style="color:orange;">Batch Detail Panel > Settings Tab</mark>*. You will be asked to confirm your delete action.&#x20;

{% hint style="danger" %}
Deleting a Batch and therefore any Tag Codes within that Batch is permanent. It cannot be undone. Proceed with caution.&#x20;
{% endhint %}


# Batch Settings

Organisation Folders > Active Folders > Tag Groups > <mark style="color:green;">**Batches**</mark> > Tag Codes

## Generic Batch Settings

### Batch Status

*<mark style="color:orange;">Batch Detail Panel > Settings Tab</mark>*

Modifies the status of the Batch. Options are :&#x20;

**Active :** Normal function.&#x20;

**Inactive :** Tag Codes within this Batch are disabled.  For both Redirect and Direct Response Mode, any request for Response (ie, a tag scan directing to ixkio), will show a blank page. No message is provided. For API Response Mode, a 'batch\_inactive' error will be returned.&#x20;

**Delete :** Will delete the Batch. A prompt will be given to confirm. This action cannot be reversed.&#x20;

### Batch Name

*<mark style="color:orange;">Batch Data Panel > Core Tab</mark>*

This changes the interface name for the Batch. This name can also be included in the Response using [Subtags](/features/subtags).

### Encoding Data

*<mark style="color:orange;">Batch Function Panel > Encoding</mark>*

Encoding URL for Tag Codes within the Batch can be downloaded as a CSV file. The CSV also contains XUID Tag Codes and any [CUID](/features/meta-data/core-data#custom-uid-cuid) entered for reference purposes.&#x20;

### Associate Data

*<mark style="color:orange;">Batch Function Panel > Associate</mark>*

The Associate Data feature can be used to upload CUID, UID or default Response data via CSV for all of some of the Tag Codes within a Batch.&#x20;

{% content-ref url="/pages/Ea5GmQw4cIVwYsbP0WUr" %}
[Associate Data](/features/associate-data)
{% endcontent-ref %}


# Tags

Organisation Folders > Active Folders > Tag Groups > Batches > <mark style="color:green;">**Tags**</mark>

## What is a Tag Code/XUID?

A Tag Code or 'XUID' is a unique 8 or 16 character code which defines that tag within the ixkio platform.&#x20;

This XUID is used in the tag URL which is encoded on the NFC tag to direct to the ixkio platform (or used via the API).&#x20;

For example, a Tag Code of\
\
`12456ax`\
\
would be encoded onto an NFC tag as

`https://t.ixkio.com/12456ax`

This will then identify the Tag Code within the platform.&#x20;

### Encoding multiple NFC Tags with one XUID

In many use cases, a single Tag Code would be encoded onto a single NFC Tag allowing for full control over each and every tag.&#x20;

However, you can also encode multiple NFC tags (or QR Codes) using the the same Tag Code. For example, one Tag Code can be encoded onto 100 different NFC tags. In this instance, all 100 NFC tags would be managed together.&#x20;

{% hint style="warning" %}
If you encode multiple tags with the same tag code link, then changing the Response URL on ixkio will change the destination of *all* the tags encoded with that Tag Code.&#x20;

To manage tags individually, you must put a unique XUID on each tag.&#x20;
{% endhint %}

Important notes for encoding multiple NFC tags with the same XUID :&#x20;

* Chip Counts will not work correctly if the same XUID is used across multiple tags
* Authentication NFC Tags ***must*** be encoded with unique XUID (or CUID/UID) codes

## Creating a Tag Code

*<mark style="color:orange;">Batch Screen > Batch Function Panel > Add</mark>*

Tag Codes are created at the Batch level. Tag Codes can be added in any quantity up to your current account limit. \
\
Enter the quantity of desired Tag Codes and set the Status (Active or Inactive).

If you have enabled Assignment, then you will also need to select the starting Assignment Status of the Tag Codes. &#x20;

Click 'Add Tags' to add your Tag Codes.

You can add additional Tag Codes to a Batch at any time.&#x20;

{% hint style="info" %}
If you want to add Tag Codes with your own CUID or tag UID, then create the Tag Codes first. Then download the codes (get [Encoding Data](/getting-started/organisation-structure/batches/batch-settings#encoding-data)), then upload using [Associate Data](/features/associate-data).&#x20;
{% endhint %}

## Moving Tag Codes

Instructions on moving tag codes, can now be found on a dedicated page.

{% content-ref url="/pages/sXJJxOUWl4aXTZKmcGzC" %}
[Moving Tag Codes](/getting-started/organisation-structure/tags/moving-tag-codes)
{% endcontent-ref %}

## Deleting a Tag Code

*<mark style="color:orange;">Tag Screen > Tag Detail Panel > Settings Tab</mark>*

Select 'Delete' from the 'Tag Status' dropdown and click 'Update'. You will be prompted to confirm the deletion.&#x20;

{% hint style="danger" %}
Deleting a Tag Code is permanent and the Tag Code cannot be recovered. Proceed with caution. &#x20;
{% endhint %}

Deleted Tag Codes are not re-used on your account or any other ixkio account.&#x20;


# Tag Code Settings

Organisation Folders > Active Folders > Tag Groups > Batches > <mark style="color:green;">**Tag Codes**</mark>

## Generic Tag Code Settings

### Tag Status

*<mark style="color:orange;">Tag Detail Panel > Settings Tab</mark>*

Modifies the Status of the Tag Code. Options are :&#x20;

**Active :** Normal function.&#x20;

**Inactive :** Tag Code is disabled.  For both Redirect and Direct Response Mode, any request for Response (ie, a tag scan directing to ixkio), will show a blank page. No message is provided. For API Response Mode, a 'tag\_inactive' error will be returned.&#x20;

**Delete :** Will delete the Tag Code. A prompt will be given to confirm. This action cannot be reversed.&#x20;

{% hint style="info" %}
If you want to change the Status of a selection of different Tag Codes within a Batch, you can use [Associate Data](/features/associate-data).
{% endhint %}

### Tag Data (Core)

*<mark style="color:orange;">Tag Data Panel > Core Tab</mark>*

The [Core Data](/features/meta-data/core-data) for a Tag Code can be edited directly here. The Core Data include the Tag Name, the chip UID and your CUID (customer unique ID). All of these are optional. &#x20;

The Tag Name does not have to be unique across your account which allows you to have the same Tag Name in multiple Batches, Tag Groups or Folders.&#x20;

The UID and CUID need to be unique across your entire account. The console will prevent you from entering the duplicate UID or CUID entries.&#x20;

### Tag Data (Extended)

*<mark style="color:orange;">Tag Data Panel > Extended Tab</mark>*

If you have created any [Extended Data](/features/meta-data/extended-data) fields, then data for them can be entered directly for each Tag Code. If default data for an Extended Data field is entered at the Tag Group level, it will display here with an 'inherited' notice.&#x20;

If you add Extended Data at a Tag Code level, it will overrule the default Tag Group level Extended Data. However, if you then delete the data at the Tag Code level, the Tag Code will then automatically inherit the default Tag Group level data again.&#x20;

## Redirect & API Tag Code Settings

Both the Redirect and API Response Mode allow Tag Code Rules.&#x20;

*<mark style="color:orange;">Tag Code Function Panel > Ruleset Tab</mark>*

Rules control how ixkio responds to a request. A Rule is required but can be as simple as a default Response such as a destination URL. &#x20;

{% content-ref url="/pages/vi6PgLwhie5adMmP9eCF" %}
[Rules](/features/rules)
{% endcontent-ref %}

Any Rules created at the Tag Group level will automatically be inherited at the Tag Code level.&#x20;

However, you can also create Rules at the Tag Code level which will overwrite any default Tag Group Rules.

Once a Tag Code Ruleset has been created, click on the 'Revert' button which will remove any Tag Code level rules and the Tag Code will default back to the Tag Group Rules.&#x20;

## Authentication Tag Code Settings

If you have ordered your Authentication NFC tags from our sister NFC Tag company Seritag, then we will have uploaded the keys already into your Tag Codes and you will be ready to use.&#x20;

If you are using your own tags then contact us to enable key uploading as it's not available by default. Once enabled, you can upload keys at the Batch level for any Tag Codes under that Batch. Note that there can be a 1-2 hour delay between uploading keys and becoming active.&#x20;

You can see whether the keys are loaded from the Tag Code screen, then *<mark style="color:orange;">Tag Detail Panel > Info Tab.</mark>* Under the setting 'Tag Type' which should say 'Authentication' (not 'Standard') there will be either:&#x20;

<mark style="color:red;">(keys not loaded)</mark> - which indicates that the keys have not been loaded yet.

<mark style="color:green;">**(keys loaded)**</mark> - which means the keys are loaded and the Tag Codes are ready for use.&#x20;

## NFT Settings

&#x20; <mark style="background-color:orange;">Flex Alpha</mark> &#x20;

On Flex Alpha, you can also set NFT data against a Tag Code. You need to have enabled NFT at the Tag Group level (*<mark style="color:orange;">Tag Group Screen > Tag Group Detail Panel > Settings Tab</mark>*).&#x20;

Navigate to *<mark style="color:orange;">Tag Code Screen > Tag Data Panel > NFT Tab</mark>* and set the Chain (Polygon Main, Polygon Test, Etherium Main, Etherium Test), Contract and Token. These need to start 0x.&#x20;

Entering the Owner is optional.&#x20;

NFT settings can also be set via [Management API](/modules/management-api) and [Associate](/features/associate-data) file upload.&#x20;


# QR Codes

## Overview

Ixkio supports using QR Codes either alongside or instead of NFC tags. It's possible - and in many instances very useful - to use the same Tag Code on both an NFC tag and a QR Code and manage them together as one item.&#x20;

You can use Tag Codes purely for QR Codes if required. There's no requirement to use any Tag Codes - or the entire platform - for NFC tags if not needed.&#x20;

## Tracking QR Code Scans

QR Codes can be tracked independently of NFC tag scans within the ixkio platform by using a slightly different URL. For example, if your XUID Tag Code is `12345ax`, you can use either :&#x20;

```
https://qr.ixkio.com/12345ax
```

or&#x20;

```
https://t.ixkio.com/12345ax?qr=1
```

{% hint style="warning" %}
If you are using a custom domain, then you need to use the second example - query string 'qr=1' - with your domain instead of the qr subdomain.&#x20;
{% endhint %}

By using either of these options, the ixkio platform will register the scan as a QR Code scan instead of an NFC tag scan and display it as such in the stats as the 'Form'.&#x20;

If you use the same XUID on both an NFC tag and a QR Code, then using `12345ax` as an example XUID, use :&#x20;

```
https://qr.ixkio.com/12345ax
```

on the QR Code and use :&#x20;

```
https://t.ixkio.com/12345ax
```

on the NFC tag. You can then manage both on the same Rules, settings, etc but will see the different scans via the Console.&#x20;

## Downloading a QR Code

*<mark style="color:orange;">Tag Code Screen > QR Codes Panel</mark>*

Ixkio has built in function to download QR Codes for Tag Codes. Expand the QR Codes panel and click on either 'Download as PNG' or 'Download as SVG' to get your desired format.&#x20;

Downloaded QR Codes will be automatically encoded to work on that Tag Code and register in the platform as a QR Code scan.&#x20;


# Using Authentication (NTAG424) NFC Tags

## Authentication Tags and Keys

Ixkio will store the keys used for tag authentication. For security reasons, tag keys are not visible via the console. You can access the keys at any time by contacting us and we set up a one time download option.&#x20;

#### Authentication (NTAG424) NFC Tags purchased from Seritag

During the encoding process, Seritag will upload the tag encryption keys to ixkio so that your tags are ready to use. They are *your* Tag Authentication Keys and you can request them at any time by contacting us.&#x20;

#### Authentication (NTAG424) NFC Tags encoded with the ixkio mobile app

If you are encoding blank NTAG424 tags with the ixkio mobile app, then ixkio will automatically generate the keys and store them. As always, they are *your* Tag Authentication Keys and you can request them at any time.

#### Authentication Tags encoded using other platforms

You can upload NTAG424 keys to the ixkio platform at the batch level. This setting is not enabled by default - contact us to add this function to your account.&#x20;

The NTAG424 tag can be encoded in a large number of different permutations. Ixkio supports four different encoding settings and it's important that tags are encoded in a certain way so they work correctly. Contact us for more information.&#x20;


# Moving Tag Codes

Organisation Folders > Active Folders > Tag Groups > Batches > Tag Codes

*<mark style="color:orange;">Batch Screen > Tags Panel</mark>*&#x20;

{% embed url="<https://www.loom.com/share/dbc9868352fb41b488849f243bb458d3?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}

You can move Tag Codes individually between Tag Groups and Batches.&#x20;

Select which Tag Codes you want to move by checking the box to the left of the XUID, then 'Move Selected Tags'. Navigate to your destination Batch and on the Tags Panel at the bottom, click Move Tags Here.&#x20;

The Tag Code will automatically inherit any settings or Rules from the new Tag Group and Batch.&#x20;

{% hint style="info" %}
Tag Codes can only be moved between Tag Groups with the same Tag Type (Standard or Authentication) and Folders with the same Response Mode (Redirect or API).&#x20;
{% endhint %}


# Response Modes Explained

## What is a Response Mode ?

Ixkio has three Response modes : Redirect, Direct and API.&#x20;

With the Redirect response mode (often called dynamic links), users scanning your tag are redirected to another page - usually your website. With Direct Response mode, users scanning your tag will see a page created by ixkio.&#x20;

You can create advanced rules (if you want) to allow some users to be redirected and some to see direct response pages.&#x20;

All our plans offer both Redirect and Direct Response.&#x20;

The Response Mode is set at the Active Folder level - you can choose from Redirect (all tags in that folder will be Redirect), Direct Response (all tags will have a page displayed by ixkio) or Dynamic (all tags can be configured with rules so tags can do either).&#x20;

{% hint style="info" %}
The reason for the choice is simply to make the interface simpler by only showing options you need.&#x20;

If you aren't sure what you might need - choose Dynamic !
{% endhint %}

## Redirect

The Redirect system allows management of what's typically called 'dynamic links' - ie, links whose destination can be quickly altered.

When the NFC tag is scanned, the user is directed to the ixkio platform. Ixkio checks where the tag needs to redirected to and redirects the user immediately. This happens almost instantly and user isn't aware of the redirect.&#x20;

Setting up a redirect is quick, easy and flexible. It allows the management of tag destinations after the tags have been deployed.&#x20;

<img src="/files/y0hSmcPi20edBcFawrzh" alt="Redirect System" width="563">

## Direct Response

With Direct Response mode, ixkio displays the landing page directly on tag scan. No other website or server is required.

* Build templates using a drag and drop creator
* Upload your brand and content images
* Display data unique to each tag using [subtags](/features/subtags)

<figure><img src="/files/JhC5Ui8MbcC6kthbMZQ7" alt="" width="563"><figcaption><p>Direct Response</p></figcaption></figure>


# Custom Domain

## Overview

For Redirect and Direct Response users, the usual domain name encoded onto the tags is the ixkio tag management URL : `https://t.ixkio.com.`&#x20;

However, on all our Flex Direct and Flex Redirect plans, you can also use your own domain and map this to ours.&#x20;

{% hint style="danger" %}
You can only have one domain associated with your account and changing this may cause existing tags to stop working. We very strongly recommend you choose a domain and subdomain that you are good to use in the long term.&#x20;
{% endhint %}

You need to create a CNAME on your domain, for example 'auth.yourdomain.com' or 'tap.yourdomain.com' which maps/points to <https://t.ixkio.com>. You can do this through the company that hosts your company domain.&#x20;

We recommend speaking to your domain holding/hosting company if you need advice on setting this up.&#x20;

Once the CNAME has been set, contact us via email at <mail@ixkio.com> for us to configure this on your Account.&#x20;

Ixkio will create an SSL certificate for you free of charge for your domain on our platform.&#x20;

{% hint style="info" %}
It can take 48-72 hours for a CNAME change to be fully active across the internet.&#x20;
{% endhint %}

## Using a Custom Domain with API

You cannot currently use a Custom Domain for accessing either the Response API or the Management API.&#x20;

In both these cases, your end user would not be aware of the ixkio domain in any event so it's highly unlikely that API Mode users would need or require a Custom Domain. &#x20;


# Redirect Basics

The Redirect Response Mode allows the control of tag destinations after tags have been deployed. It's a very powerful, flexible and easy to use option.&#x20;

When using the Redirect Response Mode, tags will link to the ixkio server first and then instantly redirect to your destination web page. You can change the destination and the redirect rules of your tags as many times as you like quickly and easily.&#x20;

## Getting Started with Redirect

{% embed url="<https://www.loom.com/share/cd1957eea10c446f9ef167da539d9c10?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" fullWidth="true" %}

## Key Features

### Rules

[Rules ](/features/rules)allow tag scans to be redirected via ixkio to your website/page based on criteria that you decide such as number of scans.&#x20;

For example, you can define a Rule that directs your tag scans to Page A on the first scan and then Page B for all subsequent scans.&#x20;

Rules can be set at the Tag Group Level or at the individual Tag Level.&#x20;

### Subtags & Datamerge

Ixkio allows the active creation of redirect links using system data. You can construct entire URL using data dependent on the user, system or location of the tag within the ixkio structure.&#x20;

Subtags allows data to be included within the URL. Datamerge allows data to be included onto the URL.&#x20;

For example :&#x20;

#### Subtags

Let's say you have a tag in a Batch called 'blue'. You create a rule with the URL : \
\
`https://authnfc.com/t-shirts/{batch}`

When the tags is scanned, the Batch name 'blue' is actively included into the URL to create :&#x20;

`https://authnfc.com/t-shirts/blue`

There's a large list of available subtags which allow you to create complex and powerful active links - either for changing landing pages or for website/Google analytics.

[Read more about Subtags](/features/subtags). &#x20;

#### Datamerge

Datamerge allows you to append data to the end of a URL. Let's say you have a URL such as :&#x20;

`https://authnfc.com/t-shirts/blue`

When the tags is scanned, datamerge can add data onto the end as a query string, such as :&#x20;

`https://authnfc.com/t-shirts/blue?size=medium`

[Read more about Datamerge.](/features/datamerge)&#x20;


# Using Redirect Mode

The Redirect Mode, like all ixkio configurations, has a number of flexible options. We recommend starting with a simple configuration then gradually experimenting with the features to get your best setup.&#x20;

## Setting up Redirect Mode

These steps are designed to get you started with a simple configuration.&#x20;

### Adding Tag Codes&#x20;

Create a new Active Folder, then under *<mark style="color:orange;">Folder Detail Panel > Settings Tab</mark>*, select the 'Redirect' Response Mode and click 'Update'.&#x20;

Then, add a Tag Group (click 'Add Tag Group' from the 'Tag Groups Panel'). This will automatically create a Batch. Click on the 'Batch 1' link to view the Batch Screen.&#x20;

From the *<mark style="color:orange;">Batch Function Panel > Add</mark>* change the quantity to 10 and click on 'Add Tags' to add some Tag Codes. This will have created 10 new Tag Codes and the full management structure.&#x20;

We would recommend you test the set up on an NFC tag. From the Batch Screen, click on the Tag Code XUID link on the *<mark style="color:orange;">Tags Panel</mark>* to get the Tag Code screen for that XUID. From here you can get the encoding URL by clicking the link icon from the *<mark style="color:orange;">Tag Detail Panel > Info Tab</mark>*.&#x20;

### Managing the Redirect

The redirect destination is managed using [Rules](/features/rules). You don't need to create complex Rules to set up a redirect but you do need to set a 'Default' URL destination.&#x20;

Tag Codes can each have an individual Default URL or you can set the Default URL at the Tag Group Level and it will be inherited by all Tag Codes.&#x20;

To set the redirect URL for the 10 Tag Codes created in the sample above, navigate to the Tag Group level (use the breadcrumb menu).&#x20;

Then, enter a full URL (including https\:// or http\://) into the 'Rule Set Default URL' field at *<mark style="color:orange;">Tag Group Function Panel > Ruleset Tab.</mark>* Now, all the 10 Tag Codes will redirect to your URL on scan.&#x20;

## Using Authentication NFC Tags

Authentication NFC tags need specialist encoding. You can ask Seritag (ixkio's sister company) to encode them for you or you can use the ixkio mobile app to encode. You can't use a regular NFC app like Seritag Encoder or NFC Tools. &#x20;

{% hint style="warning" %}
We strongly advise creating a new Batch for each set of authentication tags, even if it's simply a repeat order.&#x20;
{% endhint %}


# Using Direct Response

With **Direct Response mode**, every tag scan can instantly launch a fully branded landing page - with no external website, hosting or server required.

Showcase your brand, verify authenticity, present dynamic product data and deliver personalised digital experiences directly from the tag scan.

**Direct Response mode allows you to:**

* Display brand images, logos and campaign visuals
* Show authentication status for Authentication Tags
* Present dynamic data, including Extended Data, Core Data, and System Data
* Display unique images and content for each individual tag
* Create multiple page templates and use Rules to deliver different experiences to different users or scenarios
* Integrate AI-powered interactions through ixkio’s TapAI system
* Enable tag data updates using Locus for Direct Response

## How Direct Response Works

{% stepper %}
{% step %}

### Create your Template

Navigate to ***Active Folder > Folder Function Panel > Templates Tab***. Enter a name for your Template (only for internal use) and click Add Template.&#x20;

<div data-with-frame="true"><figure><img src="/files/nfSGUbR7nAtbhzLkSOfm" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Edit your Template

Click on the cog icon to the right of your newly created Template to start editing. You will be taken the Template Edit screen.&#x20;

<div data-with-frame="true"><figure><img src="/files/0mCHYkqNPbr3Vt1i9cyn" alt=""><figcaption></figcaption></figure></div>

Just drag Elements across to the layout to create your landing page. You can modify and update at any time.&#x20;
{% endstep %}

{% step %}

### Set your New Template as the Response

Navigate to your Tag Group, then ***Tag Group Function Panel > Ruleset Tab***. You can create a whole range of Rules showing different Direct Response Templates, but let's keep it simple and just set our new Template as the Default Response :&#x20;

<div data-with-frame="true"><figure><img src="/files/V5pqaqxanIvFIL3w1tr4" alt="" width="375"><figcaption></figcaption></figure></div>

This simply means that all Tags under this Tag Group will see this Template when tapped.&#x20;
{% endstep %}

{% step %}

### Tap your NFC Tag !

Make sure you have created a Batch and then a Tag within this Tag Group. Encode the Tag link onto your Tag and that's it.&#x20;
{% endstep %}
{% endstepper %}


# Rules

## Overview

Rules allow you to change the Response depending on criteria that you set.&#x20;

{% hint style="info" %}
Rules can be applied for both Redirect and Direct Response

With **Redirect**, rules will change which destination web page the tag scan will visit. With **Direct Response**, you can choose which Template the user will see.&#x20;
{% endhint %}

For example, for Tag Authentication on Redirect Response Mode, you would create a Rule to provide one Response (a Redirect to a 'Pass' page) for Authentication Pass and then another Response (a Redirect to a 'Fail' page) for Authentication Fail.&#x20;

Rules can be set at the Tag Group Level or the Tag Code Level.&#x20;

Tag Group Rules will apply to all Tag Codes under that Tag Group.

You can also set specific Rules for individual Tag Codes at the Tag Code level. These will override the general Tag Group Rules.&#x20;

If you have a very small number of tags, you might manage the Rules on a tag by tag basis. In the majority of cases, it's likely that you will manage a number of tags together at the Tag Group level.&#x20;

{% hint style="info" %}
You don't need to have any Rules. You can just use the Default Response if you want the same Response to every request.&#x20;
{% endhint %}

## Rule Structure

Rules are managed as Rule Set > Rule Groups > Rules.&#x20;

A Rule Set contains Rule Groups. Each Rule Group contains Rules, such as 'is the count less than 5'.  And each Rule Group also has it's own Response (ie, it's own URL destination).&#x20;

In addition, the whole Rule Set has it's own Response. This is the 'Default' Response to return if no Rule Groups are matched.&#x20;

On a request, ixkio will run down through each Rule Group in order looking for a positive match.&#x20;

If the Rule Group is matched (for example, the count *is* less than 5), it will return that Rule Group Response.&#x20;

If it doesn't it will move to the next Rule Group and check that one.&#x20;

If no Rule Group is matched, then it will return the Rule Set Default Response.&#x20;

### Rule Set

* The Rule Set displays all the Rule Groups created by you.
* You are allowed up to 3 Rule Groups in a Rule Set.
* Each Rule Set has a Default URL or Default API Response. If no Rule Group is matched (or no Rule Group is created), then the response will be either the Default URL (in the case of Redirect Mode) or the Default API Response (in the case of an API Mode).
* You must have a Rule Set and set a Default Response.&#x20;

### Rule Group

* Rule Groups are optional. You can just use a Rule Set Default Response.&#x20;
* Each Rule Group can have up to 3 Rules.
* Each Rule Group has it's own URL or API Response. This response is activated when the all the Rules of a Rule Group are matched.&#x20;
* Rule Groups are processed in order. The top Rule Group gets checked first. If the Rules do not match, the next Rule Group is checked. If no Rule Group is matched, the Rule Set Default URL/API Response is used.&#x20;
* It is possible to reorder, delete, change and add to your Rule Groups at any time.

### Rules

The selection of [available Rules](/features/rules/rule-types) will vary depending on your tag type (authentication or standard) and your plan (some Rules are not available on the TapStart plan). The most common are :&#x20;

* Scan Count
* QR/NFC
* Tag Authentication

&#x20;Each Rule has a 'Criteria' and a 'Target'

* A Criteria allows you to choose how you want to match.&#x20;
* The Target (if shown) will be what the Criteria will match against.&#x20;

For example, Scan Count could have a Criteria of 'More Than' and the Target could be 5. The Rule would therefore match if the Scan Count reached more than 5 scans.&#x20;

![Rule Set, Rule Group & Rules](/files/lw1of1npbJ404BK5OvCm)


# Creating a Rule

## Overview

Rules are created at either the Tag Group or Tag Code level.&#x20;

Rules created at the Tag Group level will apply to all Tag Codes under that Tag Group - unless you create separate Rules for a specific Tag Code.&#x20;

## Where to Create Rules

### Tag Group Level

To create Rules at the Tag Group level, navigate to your Tag Group and then *<mark style="color:orange;">Tag Group Function Panel > Ruleset Tab</mark>*.&#x20;

Rules created at this level will, by default, apply to all Tag Codes under this Tag Group.&#x20;

If you navigate to a Tag Code, you will see that the Rule Set Default URL (and, if set, any Rule Groups) are 'inherited'. This means they are getting their Rules from the Tag Group level.

![Inherited Rule Group](/files/BlJCb9gh9uJUxfWa40o2)

### Tag Code Level

Rules can also be created at individual Tag Code level. These rules will override the Tag Group Rules. You can 'revert' back to the Tag Group Rules at any time.&#x20;

To create Rules at the Tag Code level, navigate to your Tag Code and then *<mark style="color:orange;">Tag Function Panel > Ruleset Tab</mark>*. Then just follow the create rules instructions below.&#x20;

Creating Rules at the Tag Code level will break the link to the Tag Group rules and they will no longer be inherited. However, you can revert back at any time by clicking the 'Revert' button.

![Revert Button](/files/sPlfsJrJ4rcfHaHRxNBO)

## Creating Rules

The same process applies at both the Tag Group and Tag Code levels.&#x20;

### Setting the Rule Set Default Response

To begin with, you will have a 'Rule Set Default Response'. For API, this will be a field that will show in the [API response](/flex-api/flex-api-getting-started/using-the-flex-api). For Redirect Mode, this will be a URL.&#x20;

This is the Response if no Rule Group is matched.&#x20;

{% hint style="info" %}
If you don't need Rules, then you can simply enter your URL/Response in here. And that's all you need to do. All tags under that Tag Group (or that Tag Code) will now just have that Response.&#x20;
{% endhint %}

### Adding a Rule Group

Click on the 'Add Rule Group' button to add your first Rule Group.&#x20;

Until you have added all the data and settings required, the Rule Group will not be active.&#x20;

#### Add a Response

The Rule Group will have a it's own Response. Again, for API, this will simply be some text. For Redirect, this will be a URL.&#x20;

This is the Response that is given if all the Rules in that Rule Group are matched.&#x20;

#### Add a Rule

Click the small burger menu icon on the top right of the Rule Group box and select 'Add New Rule'. This will allow you to select from the Rule options for your account configuration. For example, you might select 'Scan Count'.&#x20;

You can now see the Criteria and possibly the Target (for the Criteria) for that Rule.&#x20;

For 'Scan Count', you could select 'Count Less Than', with a Target of 5.

#### Save Changes

Once you have added your Rule Group Response and set your Rule, you can 'Save Changes' to activate.&#x20;

### Changing Rule Group Order

Click and hold on the icon in the top left of the Rule Group and drag up and down.&#x20;

Rule Groups are processed in order. So if the first Rule Group is matched, the second will not be processed.&#x20;

If no Rule Group is matched, then the Default Response will be given.&#x20;

### Deleting a Rule Group

Click on the burger menu icon on the top right of your Rule Group and select Delete. Note that you will not be prompted to confirm the deletion.&#x20;


# Rule Example

## Overview

For this example, we will create a Rule within a Redirect Response Mode configuration.&#x20;

## Redirect Rule Example

<figure><img src="/files/5br2fNa7bYDOzi26eKpi" alt=""><figcaption><p>Ruleset Example</p></figcaption></figure>

### How the Ruleset works

In this example, we have created two Rule Groups. The Rule Groups are processed in order.&#x20;

#### User scans an NFC tag for the first time

The user scans a tag for the first time and therefore the scan count is 1. As the scan count is less than 5, then the first Rule Group will be matched and the Rule Group URL : <https://seritag.com> will be the response. Therefore, the user scanning the tag will be redirected to our seritag website.&#x20;

#### User scans an NFC tag for the 5th time

In this instance, the scan count is now 5. The first Rule Group no longer matches so ixkio will proceed to the second Rule Group.&#x20;

This has two Rules. The scan must be from an NFC tag ***and*** the scan count is less than 10.&#x20;

In this instance, the scan would match the second Rule Group and the Rule Group URL : <https://seritag.com/learn/> would be returned.&#x20;

#### User scans an NFC tag for the 11th time

Now, neither the first or second Rule Groups would match and the response would default to the 'Rule Set Default URL'. In this example, the response returned would be <https://ixkio.com>. Therefore, the user scanning the tag would be redirected to our ixkio website. &#x20;

### QR Code Scenario

If the first four scans were from an NFC tag and the fifth scan was from a QR code, then the scan count would still be five (as ixkio's scan count is for both NFC and QR).&#x20;

However, while the scan count is less than 10, the fifth scan was not from an NFC tag and therefore the second Rule Group would not match.&#x20;

The response would therefore default to the Rule Set Default URL.&#x20;


# Rule Types

### Scan Count

A Scan Count is how many times the NFC tag or QR code has been registered on the ixkio Console. The Scan Count rule has a few Criteria options such as:

* Count less than
* Count more than
* Count equal to&#x20;
* Count not equal to

From here you can set your Target. For example, Scan Count more than 10.

### Scan Method

Scan Method matches how the scan occurred. In almost all configurations, this would be either NFC or QR code. This option isn't available on the API Response Mode.

For example, this means you can redirect a QR code to one URL and an NFC tag scan to another URL.&#x20;

### Tamper

If Tag Tamper has been enabled on your tag (only available on a very limited number of specialist tags) then you can change response based on tamper status.&#x20;

The Tamper rule has just two Criteria options to match the chips encoded tamper response :

* Tamper equal to
* Tamper not equal to

### User Authorisation&#x20;

When creating a Rule in the Rule Group, you can choose from the following settings:

* Not Registered User - Anyone that is not registered&#x20;
* Any Registered User - Anyone that is registered (and logged in)
* Administrators Only - Only [Account Master and Account Admin Users](/modules/multiuser) (Multiuser systems only)

This Rule is not available on API Response Mode. We recommend using SmartAccess instead of User Authorisation for easier management.&#x20;

{% hint style="danger" %}
You need to login on the same device that you scan from
{% endhint %}

### SmartAccess Group

Allows users that have scanned SmartAccess Cards within this SmartAccess Group.&#x20;

### Mobile OS

Allows the creation of a Rule based on the Mobile operating system - either iOS or Android. This Rule is not available on API Response Mode.&#x20;

### Mobile Browser

Allows the creation of a Rule based on a selection of the current most popular Mobile Browsers - Safari, Chrome, Samsung, Firefox, UC Browser or Opera. This Rule is not available on API Response Mode.&#x20;

### Tag Authentication

For Tag Groups using Authentication NFC tags this is an essential Rule.&#x20;

You need to create a Response for 'Authentication Pass' and then a Default Response.&#x20;

### Assignment Status

Creates a Rule based on the Assignment Status of that Tag Code. Can be either Assigned or Unassigned. Used for controlling the destination (or API response) of deployed or not-deployed Tag Codes.&#x20;


# Rule Layering

## Overview

Rule Layering is a specific configuration where you can use the Rules from a Tag Group layer with the Default Responses of the Tag Code layer.&#x20;

This can be useful if you want to set a generic Rule across all the Tag Codes within a Tag Group but want to set individual URLs on each of the Tag Codes themselves.&#x20;

## How to use Rule Layering

To use Rule Layering, you should have configured your Rules at the Tag Group level. In one (only one) of your Rule Responses, you add :&#x20;

```
{tagcodedr}
```

At the Tag Code level, you need to enter your Default Destination URL for that Tag Code.&#x20;

Under normal use case, ixkio would not process Tag Group Rules if a Default Response had been entered at the Tag Code level - the Tag Code Response would overrule.&#x20;

However, with Rule Layering, ixkio processes the Tag Group Rules instead and the uses the Tag Code URL where you have used {tagcodedr}

## Rule Layering Example

Let's assume we have a configuration where you want to prevent all non-registered users from being redirected to a Tag Code URL. In this instance, each of our Tag Codes has it's own URL.&#x20;

We create a Ruleset at the Tag Group level like this :&#x20;

<figure><img src="/files/EFMvUscMrxR6C2KBSawX" alt=""><figcaption></figcaption></figure>

Where a Not Registered User would be directed to Seritag and therefore Registered Users would pass through to the Default URL. For this Default URL, we've entered the Rule Layering code {tagcodedr}

At the Tag Code level, we will enter our Default URL as :&#x20;

<figure><img src="/files/WbagtZw9TX2JXXHmhFQf" alt=""><figcaption></figcaption></figure>

#### Normal Process&#x20;

Under normal ixkio process, as the Tag Code Ruleset Default URL is configured, ixkio would use this and ignore the Tag Group Rules, however...

#### Rule Layering Process

When Rule Layers are enabled (by using the {tagcodedr}), then ixkio uses the Tag Group Rules first. In this example, a Non-Registered User would be directed to Seritag. A registered user would pass through to the Tag Code URL, which in this case would be ixkio.&#x20;

## When to use Rule Layering

Generally, when you are entering specific, unique URLs for every Tag Code but want a global Ruleset to apply to them all.&#x20;

Without Rule Layering, you would need to add Rules to each and every Tag Code. With Rule Layering you can have a global generic Ruleset but still allow each Tag Code to have it's own URL.&#x20;

Note that there are often alternative ways to do this if you aren't adding specific full URLs to each Tag Code - for example, adding just the unique part as a CUID or Tag Name on each Tag Code and then using [Subtags](/features/subtags) at the Tag Group Rule level.&#x20;


# Subtags

## Overview

Subtags allow you dynamically add [Meta Data](/features/meta-data) *<mark style="color:green;">**into**</mark>* the responses. This is handled by using curly brackets {}.&#x20;

For example, you could add a CUID (customer unique ID) stored in the ixkio platform dynamically onto a URL by including {CUID} within your redirect response.&#x20;

So, if your CUID for Tag Code was `12345`, a URL entered as :&#x20;

```
https://seritag.com?code={CUID}
```

would become :&#x20;

```
https://seritag.com?code=12345
```

## Using Subtags

Subtags can generally be used anywhere you enter data. For example, you can include a Subtag into a URL Redirect, or a Tag Name, or even another Extended Data field !&#x20;

At the point that ixkio presents that data, it will automatically substitute the content of the Subtag.&#x20;

You can find which subtags can be used in which locations by reading the documents related to the element you are editing. However, example subtags include :&#x20;

<table><thead><tr><th width="275">Subtag</th><th>Data Substituted</th></tr></thead><tbody><tr><td>{xuid}</td><td>The Tag Code XUID</td></tr><tr><td>{cuid}</td><td>The <a href="/pages/7xjLsWhVtyc4EnDRuiuk#custom-uid-cuid">CUID </a>for that Tag Code</td></tr><tr><td>{uid}</td><td>The <a href="/pages/7xjLsWhVtyc4EnDRuiuk#uid">UID </a>for that Tag Code</td></tr><tr><td>{scount}</td><td>The ixkio scan count</td></tr><tr><td>{ccount}</td><td>The chip scan count (if enabled)</td></tr><tr><td>{folder}</td><td>The Folder name</td></tr><tr><td>{batch}</td><td>The Batch name</td></tr><tr><td>{taggroup}</td><td>The Tag Group name</td></tr><tr><td>{tagname}</td><td>The Tag name</td></tr><tr><td>{cluster}</td><td><a href="/pages/UDkWXDuqB8FTPxTEmnBM">Cluster name</a></td></tr><tr><td>{countrycode}</td><td>Two letter country code of the scan location</td></tr><tr><td>{dtcreated}</td><td>Date and time the Tag Code was created</td></tr><tr><td>{dtassigned}</td><td>Date and time Tag Code was Assigned</td></tr><tr><td>{assignstatus}</td><td>Assignment status : 1 or 0</td></tr><tr><td>{encodestatus}</td><td>Encoded status : 1 or 0</td></tr><tr><td>{timezone}</td><td>Abbreviated timezone (PST, GMT, WET, etc)</td></tr><tr><td>{currency}</td><td>Three letter currency code (GBP, USD, EUR, etc)</td></tr><tr><td>{tzlocal}</td><td>Local date and time (based on IP, not device)</td></tr><tr><td>{randnum}</td><td>Random number</td></tr><tr><td>{browser}</td><td>Device browser (mobile devices only)</td></tr><tr><td>{method}</td><td>Scan method (nfc,qr) (if using QR URL)</td></tr><tr><td>{randhex}</td><td>Random hexadecimal</td></tr><tr><td>{os}</td><td>Device OS (ios, android, other)</td></tr></tbody></table>

## Subtags For Redirects

Subtags can be added directly to your Redirect URL (both the Default Response and any RuleGroup Responses). For example, if you wanted to add the scan count into your redirect URL, you would enter :&#x20;

```
https://seritag.com/somepage?scancount={scount}
```

would become :&#x20;

```
https://seritag.com/somepage?scancount=12345
```

(Seritag.com is just being used as an example domain)

You can also use it directly into the URL. So, for example you could use a subtag to dynamically add a Custom ID (CUID) into a URL to change the page name. For example, assuming your CUID for a tag was 'beach' :&#x20;

```
https://seritag.com/{cuid}-property
```

would become :&#x20;

```
https://seritag.com/beach-property
```

### Subtags in Extended Data

If you do not want to put Subtags into the Ruleset Responses or want data to be separated into other fields, it is possible to include Subtags within Extended Data fields.&#x20;

For a step by step on how to do this, read the [Subtags in Extended Data](/flex-api/subtags-in-api-extended-data) documents.


# Datamerge

## Overview

Datamerge adds Meta Data *<mark style="color:green;">**onto**</mark>* the Redirect Response.&#x20;

Let's say you have a URL such as :&#x20;

`https://authnfc.com/t-shirts/blue`

When the tags is scanned, datamerge can add data onto the end as a query string, such as :&#x20;

`https://authnfc.com/t-shirts/blue?size=medium`

{% hint style="info" %}
Generally, it's easier and more logical to use [Subtags](/features/subtags) instead of Datamerge. We would suggest trying Subtags first and if you can't acheive what you need, then use Datamerge.&#x20;
{% endhint %}

Extended Data is additional data that you have added into ixkio related to your Tag Group or individual Tag Code. You need to create the data fields themselves at the Active Folder level and then set the data for those fields at the Tag Group or Tag Code level. You can find out more about [Extended Data here](/features/meta-data/extended-data).&#x20;

Datamerge is useful for passing information stored about the Tag Codes through automatically. In addition, the Datamerge data will follow the Tag Code location so that if a Tag Code is moved to another Tag Group - it can then dynamically show Extended Data associated with the new Tag Group.&#x20;

You can even add Subtags into your Extended Data fields. So you can create an Extended Data field and then add a Subtag into the field data to combine the two dynamic response methods to create more complex response structures. &#x20;

## Using Datamerge

Using Datamerge varies significantly between the Response Modes.&#x20;

### Redirect Mode

When you are using the Redirect Mode, Datamerge will add Extended Data to the end of your Redirect URL as a query string.&#x20;

For example, assume you had created an [Extended Data](/features/meta-data/extended-data) field 'Colour' and have set the value of this at the Tag Group (or Tag Data) level as 'Blue'.&#x20;

Then, navigate to the Active Folder level and *<mark style="color:orange;">Folder Function Panel > Response Tab</mark>* and change the Append setting of the 'Colour' Data Name to 'Add to Redirect'. You are telling ixkio to add this Extended Data field to the end of your Redirect URL.&#x20;

This will change your redirect URL from :&#x20;

```
https://seritag.com
```

to :&#x20;

```
https://seritag.com?colour=Blue
```

If you already have a query string in your redirect URL, then Datamerge will add it to the end of this. For example :&#x20;

```
https://seritag.com?utm_source=nfc
```

would become :&#x20;

```
https://seritag.com?utm_source=nfc&colour=Blue
```

{% hint style="info" %}
Datamerged Extended Data field names (and the Tag Name field) will be converted to lower case and spaces replaced with underscore.&#x20;

Data associated with the fields will **not** be converted to lower case but will have spaces converted to underscore.&#x20;
{% endhint %}


# Meta Data

Meta Data is additional data or information associated with a Tag Code.&#x20;

This might be directly associated with a specific Tag Code, or it might be inherited data from the Batch, Tag Group or Folder the Tag Code is in.&#x20;

There are four types of Meta Data: Core, Extended, System and Action.&#x20;

### Core Data

Core Data fields are created with every Tag Code. By default, they are empty fields. Any data you add will be associated only with that Tag Code. The Core Data fields are :&#x20;

* Tag Name
* UID&#x20;
* Custom UID (CUID)

{% content-ref url="/pages/7xjLsWhVtyc4EnDRuiuk" %}
[Core Data](/features/meta-data/core-data)
{% endcontent-ref %}

### Extended Data

Extended Data fields are optional. They are either text or dates that can be associated with a Tag Code.&#x20;

Extended Data fields can be given data at the Tag Group level to be inherited by all Tag Codes within that Tag Group. Additionally, Extended Data fields can also be given data at the Tag Code level either instead of the Tag Group data or to overrule the Tag Group data.&#x20;

For customers used to using Rules, the Tag Group / Tag Data inheritance works in the same way.&#x20;

Up to 2 Extended Data fields can be created with Flex plans, but more can be added using the Extended Data Module.&#x20;

{% content-ref url="/pages/wOoUILQ06MUdXdFVyZwB" %}
[Extended Data](/features/meta-data/extended-data)
{% endcontent-ref %}

### System Data

System Data is data that is automatically associated with Tag Codes. This is either in relation to their location within the system, such as the Batch Name where the Tag Code is located, or data associated with changes to the Tag Code such as Scan Count or Created Date.&#x20;

For example :&#x20;

* Batch Name
* Batch Code
* Tag Group Name
* Chip Count (if enabled)
* Scan Count
* Date Created

{% content-ref url="/pages/NgGHnsYA1qEpcUbv2AaV" %}
[System Data](/features/meta-data/system-data)
{% endcontent-ref %}

### Action Data

Action Data is typically transient data associated with a Tag Code at the point of scan. This data is available to be included using [Subtags](/features/subtags). This data is also typically stored with Scan data and is available in stats.&#x20;

* OS - android/iOS
* Browser
* Country
* Time Zone

{% content-ref url="/pages/16hRRpfCbqSGKObr2fN2" %}
[Action Data](/features/meta-data/action-data)
{% endcontent-ref %}


# Core Data

## Overview

Core Data is the most common information stored for each Tag Code. Three Core Data fields are always available and are created empty with each Tag Code. They can be left blank without data but the fields are always there and cannot be removed.

Core Data fields can be set either through the Console or in some cases via Locus. The data fields are then included in stats and encoding downloads for ease of identification and can also be displayed dynamically using Subtags or Datamerge.

## Tag Name

The Tag Name is typically used to identify Tag Codes.&#x20;

For example, it might be a location identifier such as 'Main Lobby'. In some configurations you may choose to use the Tag Name field as a general identifier - such as your own Serial Number or Product Code.&#x20;

Once set, the Tag Name is used to help identify the the Tag Code throughout the system and for stats downloads. You can search for the Tag Name and it's available for view throughout all Response Modes.&#x20;

In many cases, it can be more useful to use the CUID as an identifier (such as your own Serial Number) rather than the Tag Name. This is because the CUID can also be used to make the request to ixkio. &#x20;

{% hint style="info" %}
The actual *name* 'Tag Name' can also be changed. For example, instead of 'Tag Name' you might prefer to refer to that Data Field as 'Serial Number'. In which case, references to the Core Data field initially known as 'Tag Name' will then be made with 'Serial Number'.&#x20;

This change can be made by navigating to the Folder level and then *<mark style="color:orange;">Folder Function Panel > Data Tab</mark>*.&#x20;

The change will then affect how the 'previously known as' Tag Name Core Data field is presented in all cases under that Folder.&#x20;
{% endhint %}

### Changing the Tag Name data

Tag Name data can be added and modified via *<mark style="color:orange;">Tag Data Panel > Core Tab</mark>* on the Tag Code screen. &#x20;

Once set, the Tag Name is then generally used throughout the interface instead of the Tag Code (XUID) for ease of reference.&#x20;

## UID

This is reserved for the use of the UID (unique ID) of the NFC chip associated with that Tag Code.&#x20;

While this data can be added manually via the *<mark style="color:orange;">Tag Data Panel > Core Tab</mark>* on the Tag Code screen, the UID data is typically added via an [Association](/features/associate-data) upload.

<details>

<summary>What is an NFC Tag UID ?</summary>

Each NFC tag has a unique 7 Byte (14 character) ID which is called the tag's UID.&#x20;

This UID is not stored in the chip user memory but in the system memory and is locked and cannot be changed (on genuine NFC chips).&#x20;

In many cases, this UID can be used to identify the tag. However, the UID is only accessible with the use of an app on the phone and cannot normally be accessed with 'frictionless' tag scanning (where no app is used). &#x20;

</details>

{% hint style="info" %}
The UID should be stored in ixkio in uppercase with no spaces or delimiters. For example : 04AABBCC112233
{% endhint %}

Under normal use cases, the UID would be added into the ixkio system during the encoding process carried out by us. However, it's not standard procedure and needs to be specifically requested. &#x20;

## Custom UID (CUID)

This is an additional Core Data field available for users typically wanting to add their own Tag Code identifiers - for example a unique Serial Number.&#x20;

This can be set via the Core tab of the Tag Data panel on each Tag Code screen. Or more typically, the CUID is set from a [Association](/features/associate-data) upload.&#x20;

The CUID should be alphanumeric only with no spaces. Maximum length of 24 characters.&#x20;

The CUID must be unique throughout your Account.&#x20;

### Using the CUID in the link

Normally, the Tag Code is the reference when making a request to the ixkio platform. For example, for tags encoded directly to the ixkio platform, the link would contain only the XUID such as :&#x20;

> <https://t.ixkio.com/xuid>

However, it is also possible to use the CUID instead. In these instances, the customer AID ([account ID](/account-management/account-information#account-id)) must also be included as your CUID may not be unique within the whole ixkio platform.&#x20;

So, if your AID is `1E5241` and you have set your CUID to be `a54857`then the encoded link to the ixkio platform would be :&#x20;

> <https://t.ixkio.com/t?c=a54857\\&a=1E5241>

## Association Uploads

In most cases it's not logical to enter UID or CUID data for a set of Tag Codes one by one through the Console.&#x20;

A faster way is to use Tag Association by uploading a CSV file of your data directly into the ixkio platform.&#x20;

{% content-ref url="/pages/Ea5GmQw4cIVwYsbP0WUr" %}
[Associate Data](/features/associate-data)
{% endcontent-ref %}

&#x20;


# Extended Data

## Overview

For each Tag you have the option of creating additional text, image\*[^1] or date data fields. These are called the Extended Data fields.&#x20;

Extended Data fields can store tag specific data, such as 'Colour' or 'Size' which can be used to identify Tag Codes throughout the platform in stats and the Console. They can also be included in Redirect URLs, API Responses and Direct Response templates.

The Extended Data ***fields*** are created at the Folder level. ***Data*** for those fields can then be entered at the Tag Group, Batch or the Tag level.&#x20;

If no data is entered at the Tag level, then the Tag will automatically inherit data for that Extended Data field from the Batch level. If the Batch level is empty, then it will inherit from the Tag Group level.&#x20;

## Creating Extended Data Fields

Extended Data fields are created at the Active Folder level and are available to all Tag Groups, Batches and Tag Codes within that Folder.&#x20;

Navigate to an Active Folder, then *<mark style="color:orange;">Folder Function Panel > Data Tab</mark>*.&#x20;

<div data-full-width="false" data-with-frame="true"><img src="/files/3c9yc1pMzKzac79TkWgT" alt="Extended Data Fields" width="375"></div>

The first item is the 'Tag Name' which is a [Core Data](/features/meta-data/core-data) field not an Extended Data field. This cannot be removed.&#x20;

To add the first Extended Data field, enter the name of the field (which can be edited later), select either a Text or Date data type and click 'Add'.&#x20;

## Removing an Extended Data field

To remove an Extended Data field, navigate to the Active Folder level and then *<mark style="color:orange;">Folder Function Panel > Data Tab.</mark>* Then click the 'x' button next to the Data field to be deleted.&#x20;

{% hint style="danger" %}
Deleting an Extended Data field will permanently delete all associated data at the Tag Group, Batch and Tag levels.&#x20;
{% endhint %}

## Changing Extended Data Values

Once the Extended Data field has been created, data can be associated with that field at both the Tag Group and Tag Code levels.&#x20;

Any data entered for an Extended Data field at the Tag Group level will automatically be inherited by any Tag Codes under that Tag Group. However, entering data for that Extended Data field at a Tag Code level will break the inherited link.&#x20;

### Setting the value at Tag Group level

Navigate to a Tag Group within the Active Folder where you have just set up your Extended Data fields. Then *<mark style="color:orange;">Tag Group Data Panel > Extended Tab</mark>*.&#x20;

This will list all the Extended Data fields that you have created at the Active Folder level.&#x20;

Enter a value into the appropriate Extended Data field and click Update.&#x20;

### Setting the value at the Tag Code level&#x20;

Navigate to a Tag Code within the Active Folder where you have just set up your Extended Data fields. Then *<mark style="color:orange;">Tag Data Panel > Extended Tab</mark>*.&#x20;

If you have set data for this Extended Data field at the Tag Group level, you will see 'inherited' next to the field name. To change the data for this Tag Code only, you can enter new data and click 'Update'.&#x20;

If you want to revert back to the Tag Group 'default' data, then simply delete all data and click 'Update'.&#x20;

## Moving Tag Codes

One of the core functions of using Extended Data is that Tag Codes inherit any data for that field set at the Tag Group level. The data isn't set, it's just inherited (unless you set it specifically for a Tag Code).&#x20;

This means that if you move a Tag Code to another Tag Group - in the Console or via Locus - then it will automatically inherit the Extended Data from the new Tag Group.&#x20;

For example, you may have created an Extended Data field called 'Location'. Assume one Tag Group has default data for this field as 'Warehouse A' and another Tag Group in the same Active Folder has data for this for field as 'Warehouse B'. Moving a Tag Code from the first Tag Group to the second will change the Extended Data field for this Tag Code from Warehouse A to Warehouse B.&#x20;

## Viewing the Extended Data

Extended Data can be viewed at any time through the Console.&#x20;

However, the real benefit is being able to add the Extended Data fields directly into the Responses using Dynamic Response.&#x20;

In the example above, we moved a Tag Code from 'Warehouse A' to 'Warehouse B'. This information can then be dynamically included in URL link on the Response Mode, on a response page on Direct Response or even in the API with the API Response Mode.&#x20;

The Tag Codes therefore have changing responses based on their location with your configuration. Moving a Tag Code automatically changes the Response.&#x20;

[^1]: Extended Image Module required


# System Data

## Overview

System Data is additional information associated with a Tag Code which either isn't directly related to the Tag Code or is other data not user editable.&#x20;

Typically this data can be included with the response using Dynamic Response [Subtags](/features/subtags).&#x20;

* Batch Name
* Tag Group Name
* Chip Count (if enabled)
* Scan Count
* Date Created


# Action Data

## Overview

Action Data is data related directly to Tag Data scans from an NFC tag or QR Code related to the specification or location of the scan device.&#x20;

* OS - Android/iOS
* Browser
* Country
* Local Time Zone
* Local Currency&#x20;
* Local Time (based on IP, not device)

This Data can be included in the Redirect responses using [Subtags](/features/subtags). Action Data is not available for API Responses.

{% hint style="warning" %}
To protect user privacy, the ixkio platform does not set cookies on NFC tag or QR Code scans. No IP data is stored for each scan and no geographic data is available below country level. &#x20;

Additionally, the accuracy of the geographic data at country level is around 98%. We cannot increase accuracy without asking for user permission which will result in pop-ups and GDPR data requests.&#x20;

Speak with our team for more information if geo data is critical for your project.&#x20;
{% endhint %}


# Stats

Statistics can be downloaded at the Active Folder, Tag Group, Batch and the individual Tag level. Navigate to your chosen level e.g. <mark style="color:orange;">Folder Data / Tag Group Data / Batch Data / Tag Data Panel > Stats Tab.</mark>

From here, select a date or a range of dates you're wanting to download. Then select Download Stats. This download will be in a CSV file.

### CSV Download

Statistics include:

| Column          | Explanation                                                      |
| --------------- | ---------------------------------------------------------------- |
| Date & Time     | The date and time an action occurred                             |
| Tag Code (XUID) | Which Tag Code was scanned                                       |
| Tag Name        | Your Tag Name                                                    |
| Location        | Which Active Folder, Tag Group and Batch the Tag code belongs to |
| Response Type   | Redirect, Direct Response or API                                 |
| Method          | NFC Tag or QR Code                                               |
| User            | User name if scan made by registered user                        |


# Associate Data

Once a Tag Code has been created within the ixkio platform, it's possible to upload data via a CSV  file to set the [Core Data](/features/meta-data/core-data) and/or the Default URL Response rather than entering  manually.&#x20;

## Preparing the Data File

### Get the XUID list

Associate Data uploads are managed on a Batch by Batch basis so you can only associate Core Data to an XUID that is within that Batch.&#x20;

The easiest way to get the list of Tag Codes (XUIDs) from a Batch is to download the encoding data. From a Batch screen, navigate to the Encoding tab of the Batch Function panel. Click on Download Data to get the list of XUID for that Batch.&#x20;

{% hint style="info" %}
You don't have to upload all the XUID for a Batch. You can choose which XUID you want to add/change Core Data on and only add those to your upload file.&#x20;
{% endhint %}

The file needs to be in CSV format which is a comma delimited file. The file can be named .txt or .csv. You can save and create in a text file if you prefer or work in Excel (or similar) and save as CSV. You can't upload as an Excel file.&#x20;

The first line of your Associate Data file must contain 'XUID' and then at least one of the following items - UID, CUID, TAGNAME, RESPONSE, STATUS, ASSIGNED.&#x20;

{% hint style="danger" %}
Response only works for Redirect mode. You cannot use Response at the moment to set a specific Tag level Template.&#x20;
{% endhint %}

For example :

```
XUID,UID,CUID,TAGNAME,RESPONSE,STATUS
```

Then each subsequent line should contain the XUID Tag Code and the corresponding Data fields.&#x20;

If you don't want to set any data for a particular field, then you can leave it blank but you need to include all commas for the fields you have specified. For example :&#x20;

```
XUID,UID,CUID,TAGNAME
gts5ch6k,04AABBCC112233,12345,
h7dvbz6k,,,My Tag
mff59hek,,12345,
```

For the 'gts5ch6k' example, this would set the UID and CUID but not the Tag Name

For the 'h7dvbz6k' example, this would set only the Tag Name

For the 'mff59hek' example, this would set only the CUID

As another example, if you just want to add a set of unique URLs to a batch of Tag Codes, you can prepare your file as :&#x20;

```
XUID,RESPONSE
h7dvbz6k,https://seritag.com
```

### Changing/Updating Data

Any data uploaded for an XUID will overwrite any existing data in ixkio. You will not be prompted for the overwrite. If there is existing data that you want to keep, then you need to set the same data again.&#x20;

{% hint style="danger" %}
A blank/empty field will remove any current ixkio data for that Tag Code's field. To keep any current data, re-upload the data for that XUID
{% endhint %}

### Data formats

Core Data needs to be in a specific format for the association to work correctly.&#x20;

#### UID

The UID should only be the UID of the NFC chip. This will be either 7 or 8 bytes in Hex - a total of 14 or 16 characters long. The UID should be in Uppercase and without spaces or other delimiters. For example, 04AABBCC112233 would be allowed. 04:aa:bb:cc:11:22:33 would fail.&#x20;

Be careful if you prepare your data in excel as the leading '0' can be removed if by chance your UID is all numbers. In this case, you can add a ' before the data in excel to fix the 0 in place. Or, work only in a text file.&#x20;

#### CUID

The CUID field can be any alphanumeric sequence along with underscores and dashes. It cannot contain spaces or other special characters. Maximum length of the CUID is 32 characters.&#x20;

CUID are case sensitive.

#### Tag Name

The Tag Name can be any alphanumeric sequence including spaces, underscore and dashes. Maximum length of the Tag Name is 32 characters.&#x20;

### Duplicate data

The UID and CUID are designed to be identifiers within the ixkio platform for your tags. Therefore, to work correctly, these Core Data fields need to be unique across your entire account (not just your Batch).&#x20;

You cannot upload a UID or CUID that has been used on another Tag Code anywhere in your account. Ixkio will throw an error message if it detects a duplicate.&#x20;

As CUID are case sensitive, it is possible to upload a CUID with a different case. For example, ABC123 is different than ABc123 and would be allowed.&#x20;

### URL Response

{% hint style="danger" %}
Response only works for Redirect mode. You cannot use Response at the moment to set a specific Tag level Template.&#x20;
{% endhint %}

Uploading a URL Response - `RESPONSE` - in the Associate Data file will only change the Default Response on each tag. Important notes :&#x20;

* If the Tag Code currently inherits it's Default Response from the Tag Group, then a Tag Level Rule will be created and it will no longer get it's Default Response from the Tag Group.&#x20;
* If no data is entered on the URL field on the CSV upload, the Tag Code Tag Level Rule will be removed and the Tag Group Ruleset will take it's place.&#x20;
* If there are Rule Groups already in place for a Tag Code, then *only* the Default Response for that Tag Code will be overwritten with any data in the CSV upload. If the CSV upload has blank data for a Response, then the Tag Code will be updated to revert to the Tag Group Ruleset.

{% hint style="warning" %}
If you're changing the Response for all the XUID in a batch, then it's better to set the Response at the Tag Group Level rather than changing the Response for each individual Tag Code
{% endhint %}

### Status&#x20;

Adding a Status column will allow you to change the Status of a Tag Code. Suitable values are 'Active' and 'Inactive'. You cannot delete a Tag Code using an Associate Data file upload.&#x20;

Leaving this blank for a Tag Code line will not make any changes.&#x20;

## Assigned

Adding an ASSIGNED column will allow you to change the Assignment Status of the Tag Code. Suitable values are 'Assigned' and 'Unassigned'. If you Assign a Tag Code that has already been Assigned via an Associate Data file upload, the Assignment Date will not change.

Leaving this blank for a Tag Code line will not make any changes.&#x20;

## Uploading the data file

Navigate to the Batch screen, then the 'Associate' tab of the Batch Function panel. Select the file from your local computer and click associate tags.&#x20;

Ixkio undertakes a large number of checks on the data so for a large file upload, it can take a number of seconds to complete.&#x20;


# Assignment

## Overview

Assignment is the process of 'activating' or 'deploying' an NFC tag either by scanning the tag or encoding the tag. In the majority of cases, Assignment would take place after the tags have been installed into your products, packaging or locations.&#x20;

Assignment is typically one of three things :&#x20;

1. Simply changing a Tag Code's Assignment Status so that you know that the Tag Code is in use. NFC Tags will be pre-encoded and the Assignment Status changed by a scan.&#x20;
2. Encoding a blank NFC Tag directly from the ixkio platform.
3. Changing a Tag Code's location (ie, moving it from on Batch to another) by scanning a pre-encoded NFC tag using Scan Assignment.

All NFC tags on the ixkio platform have an Assignment status (assigned or unassigned) and an Assignment date.&#x20;

### Scan Assignment

This is where you will scan your **already encoded** NFC tags, typically after they have been installed into your products, to Assign or 'activate' them.&#x20;

For example, you might have a large pool of tags (Tag Codes) which are in a Batch in your ixkio platform. Let's call this 'Holding Batch'. You might use these tags in any product at any time.&#x20;

You then create a Batch for a particular product line. For example 'New 2023 T-Shirt'.&#x20;

You can use any of the NFC tags from your large pool of 'Holding Batch' tags and place them inside your new t-shirts. But now you need to make sure you know which tags you have used.&#x20;

This is Scan Assignment. You activate Scan Assignment within your 'New 2023 T-Shirt' Batch, scan the tags directly from the t-shirts, and ixkio will automatically move the tags from the 'Holding Batch' to the 'New 2023 T-Shirt' Batch.&#x20;

Moved tags will automatically inherit any new Rules (eg, destination URL), Extended Data and other features from their new location.&#x20;

{% content-ref url="/pages/6SPEWNR7KpfribsG7KRO" %}
[Scan Assignment](/features/assignment/scan-assignment)
{% endcontent-ref %}

### Encoding Assignment

{% hint style="warning" %}
Ixkio recommend using generic pools of pre-encoded tags and using 'Scan Assignment' in production environments rather than encoding in situ.
{% endhint %}

Encoding Assignment allows you to deploy NFC tags by encoding them directly using the ixkio mobile app. &#x20;

In this instance, you would not have a pool of tags (as per the Scan Assignment). You would add non-encoded tags to your products first.&#x20;

You would then create your Batch - for example 'New 2023 T-Shirt' - create a set of Tag Codes and  from that Batch, activate 'Encoding Assignment'.&#x20;

You would then scan each tag to encode.&#x20;

### Manual Assignment

For smaller configurations, it's also possible to simply change a Tag Code's Assignment Status one by one directly from the Console or in bulk via Associate Data.

{% content-ref url="/pages/yKOiB6YaEg3xgQ3au1lN" %}
[Manual Assignment](/features/assignment/manual-assignment)
{% endcontent-ref %}


# Scan Assignment

## Overview

Scan Assignment is used for moving and/or 'assigning' (changing the Assignment Status of a Tag Code to Assigned) Tag Codes. Your NFC tags will need to have been pre-encoded.&#x20;

Scan Assignment works with our ixkio mobile phone app.

### Typical Process

1. Set up a Batch to contain a generic 'pool' of Tag Codes
2. Encode the NFC tags with the URLs from this Batch
3. Place the NFC tags into any product or item
4. Set up a Batch for your product
5. Activate Scan Assignment on that Batch
6. Scan the NFC tags to Assign them from the pool to the product Batch

{% hint style="info" %}
We recommend setting up a specific **Controlled User (Multiuser Module)** for login with the mobile phone app.
{% endhint %}

{% hint style="danger" %}
You can move a tag with assignment across Folders of the same Response Mode (Redirect, API or Direct Response). You cannot move tags across different Response Mode Folder types.&#x20;

**Important** : If you move a tag across Folders, the tag will **lose** any [Extended Data](/features/meta-data/extended-data) associated with it. It **will** keep any [Core Data](/features/meta-data/core-data) (tag name, UID, CUID). &#x20;
{% endhint %}


# Scan Assignment with Ixkio Mobile App

Scan Assignment with the ixkio mobile app is quick and straightforward.&#x20;

## Create a Controlled User

If you are on the Flex plan, you will log in to the mobile app with your master login. On the Flex Pro and Flex Alpha plans, you can still do this - but we recommend setting up a Controlled User instead.&#x20;

## Create a generic Batch 'pool'

The point of assignment is to move tags from a generic pool of tags to a specific product. In this example, let's assume we've added pre-encoded NFC tags from the 'pool' to a new Blue T-Shirt.&#x20;

We now want to scan those NFC tags to 'assign' them from the pool to a Batch on your system called 'Blue T-Shirt'.&#x20;

For this demo - let's assume we already have these two Batches on ixkio and you have encoded the NFC tags from the 'Pool' Batch. (If you want to test this with unencoded tags, then follow the 'Encode Assignment' example).&#x20;

{% embed url="<https://www.loom.com/share/29a28ac8c8ff4103912aae72823b03e5?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}
Example Assignement Config
{% endembed %}

Note that we have five Tag Codes in our Generic Pool and these are currently marked as 'unassigned'.&#x20;

This is important - ***you can only assign unassigned tags***. Once tags are assigned, you can only re-assign them by removing the assignment status (in the console). This is to prevent accidental tag movements.&#x20;

## Activate Scan Assignment on your Product Batch

*<mark style="color:orange;">Batch Screen > Batch Function Panel > Assignment Tab</mark>*

What we are doing is telling ixkio where we want the Tags to ***move to*** when we assign them. Where the tags are before assignment isn't important.&#x20;

In this example below, we are navigating to our Blue T-Shirt (where we want to move the tags to) and activating assignment to our 'Test User'.&#x20;

{% embed url="<https://www.loom.com/share/08110da7cfda4abba386977a2701ace2?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}
Activating Assignment
{% endembed %}


# Assignment Manager

## Overview

*<mark style="color:orange;">Main Menu > Control > Assignment</mark>*

The Assignment Manager can be accessed via the main menu or, if a Scan Assignment is currently activated on a Batch, via the Assign Mode Activated tab on the top right of the Console.&#x20;

The Assignment Manager provides a near realtime update of last assignments made throughout the Console. Additionally, you can view currently active Assignment Batches.&#x20;

This screen can be particularly useful in multi-device environments where multiple devices can be used to simultaneously assign across different Batches. &#x20;


# Manual Assignment

## Overview

For smaller configurations or where you don't want to use USB readers/writers, it's also possible to manually change a Tag Codes Assignment Status.&#x20;

This can be either done on an individual Tag Code basis via the Console or in bulk via [Associate Data](/features/associate-data).

## Manual Console Assignment

*<mark style="color:orange;">Tag Code Screen > Tag Detail Panel > Settings Tab</mark>*

Select your Tag Assignment Status from the dropdown and click on Update.&#x20;

Tags that have been previously Assigned can be set back to Unassigned and then re-Assigned using the Standard (USB Device) Assignment process. &#x20;


# Adding Modules

Many of ixkio's customisable elements can be found as Modules within your Trial or Full account.&#x20;

All available modules are found under ***Admin > Plan Details***

<figure><img src="/files/mw49nKrXXOKy39HoBXrd" alt=""><figcaption><p>Where to find Modules (Trial Account)</p></figcaption></figure>

{% hint style="danger" %}
Removing a Module after use will disable it within your account. Any aspects of your account relying on this module will be affected.
{% endhint %}

## Adding new modules

Select the modules you wish to add using the tick boxes next to each module. As you make your decision you will see your new pricing update at the bottom of the screen.&#x20;

Once you have made your decision, select Update Modules to complete the process and access your new features.&#x20;

<figure><img src="/files/oXvliQomwtvYgG6riXkU" alt=""><figcaption><p>Selecting and updating Trial Modules</p></figcaption></figure>

### Trial Account

You are free to access additional modules during your trial period and to explore whether they are right for your full account. &#x20;

## Removing existing modules

Modules can be removed by deselecting and then updating your plan details.&#x20;


# TapAI

TapAI lets your users scan NFC tags and interact with them using AI through text or speech - making it possible for them to have intelligent conversations with your products.

TapAI is an additional Module that is currently available exclusively on Direct Response. It is still in beta, but is available to use now.

{% hint style="warning" %}
TapAI can be used on standard NFC tags and even QR codes. However, we strongly recommend using TapAI only with authentication (NTAG424) NFC tags. [This is why](/modules/tapai/tapai-with-authentication).&#x20;
{% endhint %}

## Using TapAI

TapAI is integrated into all the standard ixkio features including subtags, inherited data structures, advanced data and more :&#x20;

{% stepper %}
{% step %}

### Create your Reference Material

Enter information about your product or Tag at the Folder, Tag Group and/or Batch level.&#x20;

<div data-with-frame="true"><figure><img src="/files/RZfm9k5h6O25yWCohhQE" alt="" width="222"><figcaption></figcaption></figure></div>

Learn more about [adding TapAI AI Reference Material](/modules/tapai/adding-tapai-reference-material).&#x20;
{% endstep %}

{% step %}

### Add Extended Data&#x20;

Choose whether you want to add any of your Extended or Core data fields into the AI Reference Data set.&#x20;

<div data-with-frame="true"><figure><img src="/files/2ZnloZp3YPJNTPggJg2U" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Check the TapAI Settings

Choose the AI Grade, whether you want conversational mode or simple Q\&A and logging settings.

<div data-with-frame="true"><figure><img src="/files/KNMMkDTJvTCXwFhVKAjR" alt="" width="338"><figcaption></figcaption></figure></div>

Learn more about [TapAI settings](/modules/tapai/tapai-settings).
{% endstep %}

{% step %}

### Add TapAI to your Direct Response Template

Insert a TapAI element into your Direct Response Template. You can select text, voice or both. Make sure your Direct Response template is in the Response for the Tags in your Folder.&#x20;

<div data-with-frame="true"><figure><img src="/files/dT0l2GRoxSs5qodrTzSA" alt="" width="563"><figcaption></figcaption></figure></div>

Learn more about [add TapAI to your Direct Response Template](/modules/tapai/adding-tapai-to-direct-response)
{% endstep %}

{% step %}

### Tap and Test !

That's it. Now just tap a Tag within your phone and ask a question.&#x20;

{% endstep %}
{% endstepper %}


# Adding TapAI Reference Material

TapAI allows you to add freeform text information at the Active Folder, Tag Group and Batch levels. However, the system is designed so that the majority of information entered should be at the Active Folder level. &#x20;

| Level         | Allowed Text            |
| ------------- | ----------------------- |
| Active Folder | Up to 25,000 characters |
| Tag Group     | Up to 500 characters    |
| Batch         | Up to 500 characters    |

## Character Allowance

You can add up to 500 characters at the Tag Group and Batch level without any additional Credit charges.&#x20;

At the Active Folder level, you can include up to 2,500 characters to classify in the 'Small' Credit Usage band, up to 10,000 characters for the 'Medium' band and 25,000 characters in the 'Large' Credit band.&#x20;

As you increase the character count, the notification bar will indicate your usage.&#x20;

<div data-with-frame="true"><figure><img src="/files/nJh1UwPOFO0zIzMW46Vn" alt="" width="219"><figcaption></figcaption></figure></div>

The character allowance is based on the Active Folder only. The Tag Group and Batch characters do not count. Extended Data information also does not count.&#x20;

## Formatting your TapAI Text

Getting your TapAI text correct is vital for a good TapAI experience. AI systems generally recognise context better than pure facts but we recommend using both. For example :&#x20;

<div data-with-frame="true"><figure><img src="/files/tMhIj6fHXWgFh0KkkE6d" alt="" width="215"><figcaption></figcaption></figure></div>

Information here is written in both note form and in a written description. The combination of the two strengthens the data set.&#x20;

TapAI can only ever use information provided to give answers. It should not use wider internet information. However, it can connect information. For example :&#x20;

<div data-with-frame="true"><figure><img src="/files/GXuwlVbkY80Yv0cfjWao" alt="" width="218"><figcaption></figcaption></figure></div>

In this instance, if TapAI is asked by the user when the gurantee will ***expire,*** then it can use the two parts of information provided and respond 12th August 2027.&#x20;

## Folder, Tag Group and Batch Information

Ixkio is designed as a hierarchy system so that Tags inherit data from the tree they are in. In the same way, we would recommend entering information at each level so that it would match. For example, let's assume an electronics company selling a bluetooth speaker :&#x20;

| Level         | Example Information                                                                                                                                                                          |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Active Folder | Useful customer information such as support email, phone numbers or opening hours. Possibly company info such as when it was founded, how many staff or similar.                             |
| Tag Group     | Information about the products in general - how to connect the product with bluetooth, how to charge it or what batteries it needs. Whether it's waterproof or compatible with Android, etc. |
| Batch         | This might be more specific to a particular product batch. So information about model number or specific battery life.                                                                       |

## Extended Data

In addition to the freeform text fields, you can also select to include Extended Data. For example, you might have an Extended Data field (or Tag Name) to store product serial numbers, product colours, materials or similar.&#x20;

At the Active Folder level, you can select with Extended Data fields you want to include in your TapAI Information set.&#x20;

<figure><img src="/files/GNGw0ydOfa6tEpNDmFL9" alt="" width="375"><figcaption></figcaption></figure>

These will then dynamically be included and be available in TapAI. A user might therefore ask, 'What is the Serial Number' and get the specific Tag information in response.&#x20;

## Subtags

Users that are familier with using [Subtags](/features/subtags) can also include these in the freeform text fields. For example, you might include :&#x20;

<div data-with-frame="true"><figure><img src="/files/AquL16vkH98o3GUvJmms" alt="" width="563"><figcaption></figcaption></figure></div>

This will dynamically substitute information from Extended Data into the information set.&#x20;

In this example, the {dtcreated} subtag will dynamically add the date the Tag was created. A user asking which batch this Tag is part of, will see a response including the name of the Batch that that Tag is in within your ixkio project.&#x20;


# Adding TapAI to Direct Response

TapAI is only available with Direct Response. You cannot use TapAI with Redirect or via the API Response Mode.

## TapAI Text and TapAI Voice

TapAI is available in two different formats - TapAI Text and TapAI Voice. You can add one or both to your Direct Response pages.&#x20;

<div data-with-frame="true"><figure><img src="/files/bm5ZsQEuAI8ymKcETUHx" alt="" width="218"><figcaption></figcaption></figure></div>

## Using TapAI Text

TapAI text is the most common method and integrates seamlessly into most pages like this :&#x20;

<div data-with-frame="true"><figure><img src="/files/9g8bmAAMpKTDpjw2smSt" alt="" width="176"><figcaption></figcaption></figure></div>

Drag the TapAI Text Element onto your Direct Response Template to use. When users scan your tags, they will see the question box but not the response box. After typing a question, the response box will appear and provide the answer.&#x20;

<div data-with-frame="true"><figure><img src="/files/Mk5DpR4y2jZTXiMyOrP8" alt="" width="375"><figcaption></figcaption></figure></div>

You can modify the design as you require including changing the colour of the submit button and font styles of both the question and answer boxes.&#x20;

#### Question Box Text vs. Question Box Follow-Up Text

The 'Question Box Text' is what the user will see on first scan. If you have [Conversation Mode](/modules/tapai/tapai-settings) disabled, then after the first question, this input box will be disabled.&#x20;

If you have Conversation Mode enabled, then you can change the message in the text box to prompt the user for a follow up question.&#x20;

## Using TapAI Voice

If you drag the TapAI Voice Element to your Direct Response Template, you can add the Voice feature.&#x20;

<div data-with-frame="true"><figure><img src="/files/8treHO2Wkkw7u549QGFc" alt="" width="178"><figcaption></figcaption></figure></div>

If your user taps the 'Ask a question' button, they will be prompted to use the microphone to ask a question. Note that in both iOS and Android, the user does need to give permission - there's no way around this.&#x20;

TapAI will then do it's best to understand the question, find the answer within your Reference Material and respond.&#x20;

It's possible style the TapAI Voice button by changing the colour, the font and button style. We will be adding more style options and designs in updates to TapAI coming soon.&#x20;

<div data-with-frame="true"><figure><img src="/files/iN8E2SDkolJ2SV5uuqN6" alt="" width="375"><figcaption></figcaption></figure></div>

#### Button Text vs. Button Text Follow-Up

The 'Button Text' is what the user will see in the button on first scan. If you have [Conversation Mode](/modules/tapai/tapai-settings) disabled, then after the first question, this button will be disabled.&#x20;

If you have Conversation Mode enabled, then you can change the wording in the button to prompt the user for a follow up question.&#x20;

#### Changing the TapAI Voice Output

In the TapAI Voice Element settings, you can change the output after the user has asked the question. You can choose voice only, text or voice and text :&#x20;

**Voice Only**\
The answer to the question will be spoken to the user.&#x20;

{% hint style="info" %}
It's currently only possible to use the standard voice (a well spoken British-English Male). We will be providing options to change the voice in updates to the TapAI Module coming later in 2026.&#x20;
{% endhint %}

**Text Only**\
With this setting, the user can ask a question using voice, but the answer will be written out into the answer box. You must also include the TapAI Text Element for this option.&#x20;

**Text and Voice**\
In this case, TapAI will speak the answer as well as writing it out into the box. The answers will be identical. You must also include the TapAI Text Element for this option.&#x20;


# TapAI Credits

To use TapAI, you need to purchase TapAI Credits. Trial accounts come with 100 free credits for testing.&#x20;

The amount of TapAI Credits used for a question will depend on your settings and the length of data at the Active Folder level as follows :&#x20;

<table><thead><tr><th width="416.333251953125">TapAI Active Folder Reference Size</th><th>AI Grade</th><th>Credits Used</th></tr></thead><tbody><tr><td>&#x3C; 2,500 Characters</td><td>Core</td><td>1</td></tr><tr><td>2,501 - 10,000 Characters</td><td>Core</td><td>2</td></tr><tr><td>10,001 - 25,000 Characters</td><td>Core</td><td>4</td></tr><tr><td>&#x3C; 2,500 Characters</td><td>Enhanced</td><td>2</td></tr><tr><td>2,501 - 10,000 Characters</td><td>Enhanced</td><td>4</td></tr><tr><td>10,001 - 25,000 Characters</td><td>Enhanced</td><td>8</td></tr></tbody></table>

In addition, additional credits are used for the following settings :&#x20;

| TapAI Setting   | Credits Used |
| --------------- | ------------ |
| Logging Enabled | 1            |
| Voice Enabled   | 2            |

For example, if your TapAI Reference Material has 2,000 characters, you are using Core AI grade and have both logging and voice enabled, you would use 1 credit for the AI search + 1 credit for logging and 2 credits for voice = 4 credits.&#x20;

{% hint style="info" %}
Voice credits cover both 'listening' to the user and 'talking' the reply. In other words, if your user asks a voice question and TapAI responds by talking, that 'pair' will only be 2 credits, not 4.&#x20;
{% endhint %}

If you using Conversation Mode where the user can ask follow up questions, then each interaction is regarded as it's own Credit Usage. For example, if you have a 2,000 character Reference Material and using Core AI, it would be 1 Credit for a typed question and answer. If the user then followed up with a second question, it would be another Credit.&#x20;

Bear in mind that if you are using Logging, Voice, Enhanced and a Large Reference Material set, then enabling conversation mode can use a lot of Credits.&#x20;

## Monitoring TapAI Usage

A summary of each month's TapAI Credit usage can be found under ***Admin > Billing.*** You can view a breakdown of AI/Text Credits, Voice Credits and Logging Credits used.&#x20;

You can also view a detailed breakdown of every TapAI query with the Activity Panel at the Tag and Batch level. If you have enabled logging, you can also view the question asked and the answer given.&#x20;


# TapAI Settings

In addition to the setting you can configure when setting up your Direct Response Template, there are a number of other controls.&#x20;

These can be found at the ***Active Folder > Folder Function Panel > TapAI Tab***.&#x20;

<div data-with-frame="true"><figure><img src="/files/mpOJayJ9PRpfX2dtWCJW" alt="" width="340"><figcaption></figcaption></figure></div>

## Logging

By default, Ixkio logs every use of the TapAI system so you can keep an eye on Credits used. Your available Credits can be quickly viewed at ***Main Menu > Admin > Current Usage***. A breakdown of each month's Credit usage is also available at ***Main Menu > Admin > Billing.***&#x20;

Additionally, you can view each TapAI query within the Activity Panel on the Tag and Batch level screens. The default will store the tag's XUID, the date/time and the number of Credits used.&#x20;

If you enable logging, you can also view the questions and answers given at the Batch and Tag levels. Logging uses additional credits as detail on the [TapAI Credits](/modules/tapai/tapai-credits) page.&#x20;

In normal use, most of our ixkio users will enable logging for testing and development but then disable when the project goes live to reduce Credit use.&#x20;

{% hint style="info" %}
If you are using logging to register questions and answers and can relate this information in any way to a specific user from other information you collect or know, we advise you to include a small data protection clause at the bottom of your Direct Response page or a link to such information on your website.&#x20;
{% endhint %}

## Chat

TapAI can be configured so that the user can ask a single question on each Tag tap or is allowed to ask follow up or multiple questions from the same tap.&#x20;

If you select Conversation Enabled, then the text box and/or microphone button will remain enabled after each answer. If you disable Conversation, then after the first question and answer, the user input is disabled and they cannot ask again without tapping the tag again.&#x20;

## AI Grade

TapAI has been tested and currently offers two grades of AI 'intelligence'. In theory, the Enhanced grade is better at making connections within your Reference Material and should be faster.&#x20;

TapAI is still in beta and in our experience, the Core grade, in most use cases is fast and reliable. Enhanced tends to give shorter and more precise answers. With larger 20k+ character Reference sets, it can be marginally quicker.&#x20;

We recommend loading your Reference Material first and then asking a few common questions to see which you prefer.&#x20;

We also recommend that if you aren't getting the answers you want in Core grade, it can often be better to tweak the Reference Material than to change grade. For example, instead of using '1 year gurantee', use 'this product has a one year guarantee and warranty against manufacturing defects.&#x20;


# TapAI Languages

TapAI understands questions asked in non-English language and will normally respond in the same language. This is the case even if your Reference Material is only in English.&#x20;

The normal TapAI process is that TapAI responds with 'Please wait' after the question has been asked. At the moment, this is only in English. However, the final answer to the question is usually int the same language as the question.&#x20;

We generally recommend using only a single language in your Reference Material and let TapAI understand best the question and answer.&#x20;

In most cases, if you are using TapAI Voice, the accent will be good enough for the language chosen.&#x20;

{% hint style="info" %}
It's not currently possible to change the voice/default accent of the TapAI response. We are working on an update for later in 2026 where you can choose your response.&#x20;
{% endhint %}


# TapAI with Authentication

{% hint style="warning" %}
Ixkio recommend using TapAI with authentication NFC tags only to protect usage.&#x20;
{% endhint %}

TapAI can be used with standard NFC tags and even QR Codes. However, ixkio strongly recommend using TapAI with authentication (NTAG424) NFC tags only.&#x20;

The TapAI feature uses credits which you pay for. The cost of this is very low and we are working on driving the pricing cheaper - but it still costs you money.&#x20;

When you use authentication NFC tags, you can configure your ixkio project so that the user must have scanned the NFC tag to access TapAI.&#x20;

If you use standard NFC tags or QR codes, then the static link could be shared anywhere on social media. Anyone with the link can then use TapAI. You could have thousands of people asking questions on your product - without access to it.&#x20;


# Locus

Locus is one of the most powerful ixkio features. Locus allows you to modify a wide range of tag properties and associated data using the ixkio mobile app. For example :&#x20;

* Adding photos to tags
* Moving tags between locations
* Updating tag data with OCR (optical character recognition)&#x20;
* Adding barcode or QR code data to tags

{% hint style="info" %}
Locus works after you have scanned a tag. Scan tag -> update data -> save.&#x20;
{% endhint %}

## Using Locus

You need to install the ixkio mobile app and be either an Admin user or a Controlled User with Locus permissions in the user Group.&#x20;

If enabled, tags can be scanned within the ixkio app using the Locus function to present editable data fields.&#x20;

{% hint style="warning" %}
Locus data is not automatically updated. Any changes made to data on the Locus page need to be confirmed by the user tapping the 'Submit' button.&#x20;
{% endhint %}

## Enabling Locus

*<mark style="color:orange;">Active Folder Screen > Folder Function Panel > Locus Tab</mark>*

Locus is a module, so you first need to [activate the Locus module](/modules/adding-modules).&#x20;

Locus is enabled at an Active Folder level to work on all tags in that folder tree. In the Active Folder screen, navigate to the Folder Function panel and select the Locus tab.&#x20;

Then enable Locus.&#x20;

## Locus Options

Locus allows you to display a range of Core and Extended Data associated with the Tag.&#x20;

Each data element can be set to either just display or optionally allow edit. If you select Edit, you will also gain the additional Function Option :&#x20;

<figure><img src="/files/rCiTEeixyOMIGtPNXo7V" alt="" width="375"><figcaption></figcaption></figure>

#### Locus Functions

**None**\
None will show a simple form field box to allow manual entry via the phone keyboard.&#x20;

**QR/Barcode**\
Underneath the form field box, there will also be a button to scan a QR Code or Barcode to populate the field. Tapping the button will launch the phone camera allowing a barcode scan. The form field will still be available for manual entry if required/preferred.&#x20;

{% hint style="info" %}
Within the mobile app settings, you can select whether to confirm on a QR/Barcode scan. If you select confirm, the phone will prompt you to use a scanned barcode. If you disable this, then the phone will automatically populate the field with the barcode contents without further confirmation - for a faster interaction.&#x20;
{% endhint %}

**OCR**\
OCR will enable the optical character recognition mode. This will provide a button under the field on Locus allowing the phone camera to read text. This can be ideal to copy printed serial numbers from products to be associated with a tag.&#x20;

## Other Locus Settings

**Message**\
Message allows you to provide a simple additional instruction message to the Locus user.&#x20;

**Submit Test**\
Modify the message on the Submit Button on the Locus page.&#x20;

## Extended Image Option

This feature also requires the Extended Images module to be enabled.&#x20;

If you have an [Extended Data](/features/meta-data/extended-data) image field, it's possible to enable this within Locus so that you can use the phone camera to take a photo and then have the photo automatically associated with a Tag.&#x20;

To enable this, you just need to set 'Display and Edit' on your Extended Data Image field :&#x20;

<figure><img src="/files/wrHQ1bMFn9CQi1v9PgYC" alt="" width="375"><figcaption></figcaption></figure>

Note that 'Tag Level Image' in the example here will be the name of your Extended Data field. There's no additional Function. Selecting Display and Edit will allow the Locus user to take a photo and replace/upload an image for that Tag.&#x20;

*(Coming July 2026)*

At the moment, the image resolution and quality is designed to allow fast upload but provide a reasonable quality of view on mobile screens.&#x20;

From July 2026, we are also enabling user to set the quality of photos to allow for low network speeds or the requirement for higher quality images that may be viewed on desktops.&#x20;

## Post Submit Actions

When the user taps the 'Submit' button on a Locus screen, you can additionally create a post-submit action :&#x20;

**Move**\
A tag can be automatically moved to another Batch. This allows two further options :&#x20;

<figure><img src="/files/sNWG4ICiOa44getkAudS" alt="" width="270"><figcaption></figcaption></figure>

* **Move on Batch Code** : This will move the tag to the Batch Code as specified by the user in the Batch Code field on the Locus page. You need to have made this field editable. \
  \
  As an example, if you set the Batch Codes *<mark style="color:orange;">(Batch Screen > Batch Data Panel > Core Tab)</mark>* throughout your project, the user could scan a QR Code on a box of products to populate the Batch Code field in Locus. On submit, this would then automatically move the tag to that Batch within your project.&#x20;
* **Move to Batch Code** : This gives you another field where you can enter a specific fixed Batch Code to move the submitted tag to.&#x20;

**Assignment**\
You can optionally also set the Assigned flag on submit. Useful if you are also moving the Tag to another Batch, you may also want to mark it as being Assigned.&#x20;

## Locus Only Users

*(From July 2026)*&#x20;

You may want to some users to use the ixkio mobile app but only have access to the Locus screen. This is possible by changing the settings for a Controlled User Group.&#x20;

When the user logs into the ixkio mobile app, they will not see the Assign/Encode/Check options and will go immediately to the Locus screen.&#x20;

## Locus Deep Linking

*(From July 2026)*

It's possible to encode your NFC tags so that they will launch the ixkio mobile app directly into the Locus screen. This allows users to access Locus quicker rather than having to open the app first. Note :&#x20;

* Tags must be specifically encoded for this action. Any existing tags or tags encoded with the standard ixkio structure will not 'deep link' into the app.&#x20;
* Deep linking only works on the ixkio domain. If you have a custom domain, you cannot deep link into Locus.&#x20;


# SmartAccess

The SmartAccess system is a powerful way to allow different users to see different content when scanning the same NFC tag.&#x20;

For example, authorised users might be presented with a page containing product information, service history or similar. Regular users might see your marketing page from your website.&#x20;

SmartAccess is a registration free system and is designed for store, warehouse or supply chain users who need to access product information on NFC tags that shouldn't be available via non-authorised scans.&#x20;

SmartAccess uses the Rules system to control what Response is provided.&#x20;

SmartAccess is an option Module that can be activated via *<mark style="color:orange;">Main Menu > Admin > Plan Details</mark>*.&#x20;

## Setting up SmartAccess

{% stepper %}
{% step %}

### Create a SmartAccess Group

*<mark style="color:orange;">Main Menu > Management > SmartAccess > Groups</mark>*

SmartAccess Cards are organised into Groups. You need at least one Group.&#x20;
{% endstep %}

{% step %}

### Create a SmartAccess Card

*<mark style="color:orange;">Main Menu > Management > SmartAccess > Cards</mark>*

Create a SmartAccess Card within your Group.&#x20;
{% endstep %}

{% step %}

### Encode your SmartAccess Card

SmartAccess uses NTAG424 authentication grade NFC tags to ensure a high level of protection and security. Your NFC tag doesn't need to be a 'card' but can be any type of NFC tag. We refer to it as a 'card' for the purposes of illustration.&#x20;

You can encode your SmartAccess Card using the ixkio mobile app.&#x20;
{% endstep %}

{% step %}

### Setup Rules

At the Tag Group level or the Tag Code level, you [create a Rule](/features/rules/creating-a-rule) so that users that have scanned the SmartAccess Card can view different content - either by Redirect or Direct Response.&#x20;
{% endstep %}

{% step %}

### User Scans SmartAccess Card

User can then scan the SmartAccess Card to 'authorise' that smartphone. (The length of time of authorisation can be set by you).&#x20;
{% endstep %}

{% step %}

### Use Scans NFC Tag

Now when the User scans an NFC Tag within that Tag Group, the Rules system can Redirect or show an alternative Direct Response template.&#x20;
{% endstep %}
{% endstepper %}


# Multiuser

Ixkio can support multiple user logins. As with all ixkio features, it's a flexible system to allow for a range of use cases.&#x20;

Multiuser features are available as a Module which can be purchased from within your account or trialled before you purchase a full account. [Modules are found under *Admin > Plan Details.*](/modules/adding-modules)

Users can be found under **Management > Users**

{% hint style="info" %}
To quickly get started with a second account user navigate to [**Creating Admin Users**](#creating-admin-users)
{% endhint %}

## Basic Multiuser Concepts

### Users

#### Account Master

Every account has an Account Master which is the primary user account and one which is created when the account is set up. This User cannot be removed.

<figure><img src="/files/WE8VeayP3x6yHbDlMY9X" alt=""><figcaption><p>Account Master</p></figcaption></figure>

{% hint style="info" %}
The following information relates to the Multiuser Module which can be viewed under *Admin > Plan Details*&#x20;
{% endhint %}

#### Account Administrators

Account Admin users have the same full permissions over tag management as the Account Master. Each Account can have up to 5 Admin Users.&#x20;

<figure><img src="/files/3kSQ50Wo9sjIDL2BLL6h" alt=""><figcaption><p>An Admin User from the perspective of the Account Master</p></figcaption></figure>

#### Controlled Users

Each Account can have up to 25 Controlled Users. Controlled Users must be members of a User Group. Depending on permissions, Controlled Users can access ixkio with a user/password login on the Console, with a user/password login on Locus or with an Authentication Card.&#x20;

<figure><img src="/files/03vce5WwgEwvNiU8huZS" alt=""><figcaption><p>Two Controlled Users within a User Group called Q Branch Staff </p></figcaption></figure>

### User Groups

Each Account can have to 5 User Groups. Each User Group has :&#x20;

* **Permission Settings** \
  Controls permission to either view, edit, edit & create or edit, create & delete (full control).&#x20;
* **Access Settings**\
  Controls access to the system by either Console & Locus or Locus only.&#x20;

<figure><img src="/files/zBHC14XGngm3v8MW01uK" alt=""><figcaption><p>User Group called Q Branch Staff</p></figcaption></figure>

#### **Access Cards (Beta)**

Users can access either Locus or the Console by first scanning an Access Card instead of, or as well as, using a username and password. Access Cards are authentication grade (usually NTAG424) keyfobs or cards that can be provided associated with a Controlled User. &#x20;

## Setting Up Multiusers

### Overview

The ixkio multiuser system allows access via both user sign-on and Access Cards. Because of this multi-access facility, management of users is slightly different.

One important aspect is that the **only** User that can set or change all passwords is the **Account Master**. **Account Admin** users can only change **Controlled User** passwords - they cannot change their own password or other **Account Admin** passwords.&#x20;

If a **Controlled User** loses or wishes to change their password, then they must do so via the **Account Master** or an **Account Admin**. If an **Account Admin User** wishes to change their password, then they must do so via the **Account Master** only. &#x20;

### Account Admin Users

Admin Users have the same complete level of access and control over Tag Management as the Account Master. However, Admin Users have different rights over Users : &#x20;

Admin Users **cannot**&#x20;

* Create or delete other Admin User accounts
* Change the Account Master or other Admin Users login/passwords
* Change the status of other Account Admin Users

Admin Users **can**

* Create new User Groups
* Edit User Groups
* Add, remove or modify Controlled Users
* Change login/passwords on any Controlled Users
* Change the status of Controlled Users

{% hint style="danger" %}
Because Admin Users have complete control over the platform and over all Controlled Users, be very careful when creating and distributing Admin User Accounts.
{% endhint %}

## Creating Admin Users

To create an Admin User, navigate to Account Management on the main menu, then Users. Click 'Add User' to access the 'Add User' screen. The settings :&#x20;

<figure><img src="/files/Ew7ninMCg54zXpnt9GKy" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ptFd4UQ3ZSMtZBYpyhNK" alt=""><figcaption></figcaption></figure>

*<mark style="color:blue;">User's Name</mark>*\
For your internal use only. This will allow you to manage users but is also the name that will appear on Event logs so that you can monitor which users have made changes.&#x20;

*<mark style="color:blue;">User's Type</mark>*\
Admin or Controlled  > Set to Admin

*<mark style="color:blue;">Logout Period</mark>*\
You can change the amount of time a user will be logged in before having to re-enter login details. If you do not see this option, the login timeframe is 12 hours. This setting applies to both manual login and Access Card login. [Additional notes on logout period](/modules/multiuser#logout-period).&#x20;

*<mark style="color:blue;">Login Name / Email</mark>*\
Users cannot reset their own passwords so there's no requirement to use an email address - but it can be if you feel it easier to manage.&#x20;

*<mark style="color:blue;">Password</mark>*\
As always, ensure you use the most secure password you can. &#x20;

{% hint style="info" %}
Administrative Users cannot change their password. Only the Account Master can change Admin User passwords. Admin Users can change passwords for Controlled Users.
{% endhint %}

## Managing Admin Users

<figure><img src="/files/UDZPQl5qerWnHqfznAdK" alt=""><figcaption></figcaption></figure>

*<mark style="color:blue;">Logout Period</mark>*\
You can change the amount of time a user will be logged in before having to re-enter login details. If you do not see this option, the login timeframe is 12 hours. This setting applies to both manual login and Access Card login. [Additional notes on logout period](/modules/multiuser#logout-period).&#x20;

*<mark style="color:blue;">Status</mark>*\
You can Deactivate or Delete an account from the status dropdown.

## Creating Controlled Users (User Groups)

### Controlled Users

Controlled Users have an adjustable amount of access and control over the Account.&#x20;

Each Controlled User must be a member of a User Group, therefore you need to create a User Group first and then create a Controlled User.&#x20;

<figure><img src="/files/tpsbZnh6N4YgGjEq9i2c" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/MO30QnmFQIQ30pI8V8Ls" alt=""><figcaption></figcaption></figure>

#### Create a User Group

Navigate to Account Management on the main menu, then 'User Groups'. Click 'Add User Group' to launch the Add User screen. You can edit your User Group at any time.&#x20;

*<mark style="color:blue;">User Group Name</mark>*\
For your internal use only. This will allow you to manage users but is also the name that will appear on Event logs so that you can monitor which users have made changes.&#x20;

*<mark style="color:blue;">Access</mark>*\
This controls whether the user has access to both the Console and App, or just App.&#x20;

*<mark style="color:yellow;">Check Function</mark>*\
This controls whether the user has access to the Check Function in the ixkio mobile app.&#x20;

*<mark style="color:yellow;">Locus</mark>*\
This controls whether the user has access to the Locus tool suite in the ixkio mobile app.&#x20;

*<mark style="color:blue;">Console Permissions</mark>*\
Controls the amount of access the user will have. Full permission includes the ability to delete elements. Edit Data only allows the user to change element data such as a Tag Name, CUID or Extended Data data. Edit All allows the user to change the names of the elements themselves as well as settings such as Rules.&#x20;

*<mark style="color:blue;">Console Permission Level</mark>*\
This changes the level to which the user has permission. For example, users with Tag Group level permission can make changes (as authorised by their Group Permissions) at the Tag Group, Batch and Tag Code levels. Whereas, a user with Tag Code level permissions can only make changes at the Tag Code level.&#x20;

{% hint style="info" %}
Group Permission only applies to edits, moves and deletes. All Controlled Users can view all data at all levels.&#x20;
{% endhint %}

*<mark style="color:blue;">Status</mark>*\
You can Deactivate or Delete an account from the status dropdown.

## Creating Controlled Users

Once you have created a User Group, you can create a Controlled User. Navigate to Account Management on the main menu, then Users. Click 'Add User' to access the 'Add User' screen. The settings :&#x20;

<figure><img src="/files/yDJfFxK6B9F8hOInPpfn" alt=""><figcaption></figcaption></figure>

*<mark style="color:blue;">User's Name</mark>*\
For your internal use only.

*<mark style="color:blue;">User's Type</mark>*\
Admin or Controlled > Set to Controlled

*<mark style="color:blue;">User Group</mark>*\
The User Group to which this User should belong. You can edit a User at any time and transfer them to another User Group.&#x20;

*<mark style="color:blue;">Login Name / Email</mark>*\
Users cannot reset their own passwords so there's no requirement to use an email address - but it can be if you feel it easier to manage.&#x20;

*<mark style="color:blue;">Password</mark>*\
As always, ensure you use the most secure password you can. Account Masters or Account Admins will need to provide passwords to Controlled Users. The ixkio platform will not email or provide it to them automatically.&#x20;

## Managing Controlled Users

<figure><img src="/files/O4Oe9NAuPfpIQDrOanfC" alt=""><figcaption></figcaption></figure>

*<mark style="color:blue;">Logout Period</mark>*\
You can change the amount of time a user will be logged in before having to re-enter login details. If you do not see this option, the default login timeframe is 12 hours. This setting applies to both manual login and Access Card login. [Additional notes on logout period](/modules/multiuser#logout-period).&#x20;

*<mark style="color:blue;">Status</mark>*\
You can Deactivate or Delete an account from the status dropdown.

## Managing Users

Once a user has been created, Account Masters can change all users passwords, user groups and status. Account Admins can change all Controlled Users passwords, user groups and status.&#x20;

#### Changing Status

It's possible to change the Status of any single user or a User Group. The 'inactive' status will prevent any user login. If you change a User or User Group status to inactive while the User is logged in, they will instantly be restricted from any further actions.&#x20;

#### Deleting Users

You can delete a User by changing their status to 'Delete' from their User Details screen (navigate to Account Management on the main menu, then 'Users', then click on the User's Name). You will be prompted to confirm and then you can delete.&#x20;

#### Deleting User Groups

To delete a User Group, you must first delete all Users within that Group. Then change the status to 'Delete' and confirm.&#x20;

## Additional Notes

### Logout Period

The logout period is set in hours. However, the actual hours for 1 day is 22 hours and the actual hours for 5 days is 110 hours.&#x20;

This is so that a user effectively being asked to log in each day wouldn't accidently pick up the last minutes of the previous day if the log in time was slightly different.&#x20;

The 5 day period assumes a Monday morning log in which would last until late on Friday. Therefore, the hours are less than a full 5 x 24 hour period.&#x20;


# Management API

These Management API documents details how to use the ixkio API to change Tag Code Status, Assignment, NFT Data and Default Response.&#x20;

{% hint style="warning" %}
The **Management API** is different than the standard **Response API**.&#x20;

If you are using ixkio in API Response Mode to authenticate tags, then instructions and information can be found on the [API Response Mode pages](/flex-api/flex-api-getting-started). \
\
The Response API simply allows the check of Tag Code data and is typically used for authentication of an NFC Tag. The Response API is available with Flex API.\
\
The Management API allows remote changes to the Tag Code data and is only available through the ***Management API Module found within your account***.&#x20;
{% endhint %}

## Using Management API

The Management API system can currently be used to remotely modify a Tag Code's status and/or a Tag Code's Default Response. The Tag Code must have already been created in the Console.&#x20;

Tag Code Status for any of the Response Modes (Redirect, API or Direct Response) can be changed to either Active or Inactive. Default Response can be modified for either the Redirect or API Response Modes.&#x20;

{% hint style="warning" %}
To use the Management API, you need to set an API Token at *<mark style="color:orange;">Main Menu > Management > Advanced Settings > Management API Settings Panel</mark>*.&#x20;

The Token needs to be sent in the PATCH header as X-API-Key, X-Api-Key or Ixkio-R
{% endhint %}

### Accessing the Management API

The ixkio API Management endpoint is located at :

> PATCH <https://api.ixkio.com/v1>

{% hint style="warning" %}
All requests must be over HTTPS
{% endhint %}

You can access the Tag Code by using either the XUID or your [AID ](/account-management/account-information#account-id)along with a CUID or UID of the Tag Code with a PATCH request as follows :&#x20;

#### XUID&#x20;

> Example : PATCH <https://api.ixkio.com/v1/x/{xuid}>

#### CUID or UID&#x20;

> Example : PATCH <https://api.ixkio.com/v1/a/{aid}>

along with your CUID or UID in the PATCH request HEADERS, for example :&#x20;

> ix\_c: {cuid}
>
> or
>
> ix\_u: {uid}

{% hint style="info" %}
The CUID parameter is case sensitive search - ABC123 is not the same CUID as abc123. The UID parameter must always be uppercase.&#x20;
{% endhint %}

## Parameters

The management API accepts the following parameters :&#x20;

### ix\_dr

Options : URL (redirect mode), Response (API mode) or empty.&#x20;

Action : Updates the Default Response for a Tag Code. If Tag Code is inheriting Response from the Tag Group, it will break the link and set the Response. If the parameter is empty, it will remove the Response and Revert the Ruleset to the Tag Group level.&#x20;

Example 1 :&#x20;

```
'ix_dr' => ''
```

This will remove any Tag Code response and Revert the Ruleset to the Tag Group level.&#x20;

Example 2 :&#x20;

```
'ix_dr' => 'https://seritag.com'
```

This will set the Response for the Tag Code to <https://seritag.com>

### ix\_status

Options : Active, Inactive

Action : Will change the Status of the Tag Code to either Active or Inactive.&#x20;

### ix\_assigned

Options : Assigned, Unassigned

Action : Will change the Status of the Tag Code to Assigned or Unassigned. If set to Assigned, the Assigned Date field will be updated.&#x20;

### ix\_cuid

Options: Unique CUID appropriate data

Action: Will update the CUID of the Tag Code to the sent value.&#x20;

{% hint style="warning" %}

* The CUID should be alphanumeric only with no spaces.&#x20;
* Maximum length of 24 characters.&#x20;
* The CUID must be unique throughout your Account.
  {% endhint %}

## API Response

The API will respond 200 OK with either the following JSON :&#x20;

```json
{
    "xuid":"<<yourxuid>>",
    "status":"success"
}
```

or an error message in the format :&#x20;

```json
{
    "xuid":"<<yourxuid>>",
    "status":"error",
    "error":
    {
        "type":"MgmtAPIError",
        "message":"Invalid Status",
        "code":"e44328",
        "detail":""
    }
}
```


# CodeLink

## Overview

CodeLink is a powerful system designed to :&#x20;

1. Allow the dynamic passing of NFC Tag data from ixkio to your website.&#x20;
2. Prevent direct page hits on your website authentication landing pages when using authentication NFC tags.&#x20;

### 1. Data Link

Using CodeLink allows you to pass data stored in ixkio to your landing page to be dynamically displayed.&#x20;

For example, if you store a serial number for your product on a Tag Code as your [CUID in Core Data](/features/meta-data/core-data), then this data can be dynamically passed via CodeLink and then displayed on your page. &#x20;

Ultimately, this allows you to create a single 'authenticated' or similar landing page on your website and then dynamically show information related to the product scanned.&#x20;

### 2. Landing Page Protection

#### The problem

When using ixkio in Redirect Mode with authentication NFC tags, the user will scan the tag, arrive at ixkio - where we will do the authentication check and apply any Rules - and then immediately redirect the user to your website.&#x20;

However, as the user is ultimately linked through to an authentication page on your website, it could be possible to copy that URL - the one on your site - directly onto a tag. In doing so, they would bypass the ixkio authentication and land directly on your 'authenticated' page. Anyone scanning the tag may not be aware of this.&#x20;

#### The solution

With CodeLink, we provide you with a line of javascript code to add to your authentication landing page(s).&#x20;

This code checks that the access to that page came from an immediate ixkio redirect. If it passes, then your authentication page will display. If it fails, then you can choose whether to display a message or redirect the user to a failed authentication page.  &#x20;

{% hint style="danger" %}
You can still use CodeLink with standard non-authentication NFC tags or QR codes to help ensure that any hits on your page via an ixkio redirect came from ixkio.&#x20;

However, unless you are using authentication NFC tags, remember that the original link from the NFC tag or QR Code itself could have been copied and therefore it's not a secure way of protecting access to your page.&#x20;
{% endhint %}

## Using CodeLink

CodeLink is now available on all Flex plans for both standard and authentication tags.&#x20;

It's a flexible system which is designed to allow easy plug and play, but can be modified easily to suit your design requirements as you prefer.&#x20;

{% content-ref url="/pages/O7Sl8xEvtqhg3GQvvsz7" %}
[Using CodeLink](/advanced-features/codelink/using-codelink)
{% endcontent-ref %}


# Using CodeLink

## Setting up CodeLink

CodeLink is a flexible system. We will outline here the basics to getting started but if you want to modify the user experience or make further changes, then review the [CodeLink Integration](/advanced-features/codelink/codelink-integration) options.&#x20;

There's three stages to setting up CodeLink :&#x20;

* Create a CodeLink Code
* Enable CodeLink on your Tag Group
* Embed the CodeLink javascript in your page(s)

### Create a CodeLink Code

CodeLink Codes manage the settings for the javascript that you will add to your landing page. You can set up multiple CodeLink Codes with different settings, but you need at least one.&#x20;

Go to 'Control' on the main menu and select 'CodeLink'. On the bottom right, select 'Add CodeLink Code'.&#x20;

The Add CodeLink Code screen will present you with options as follows :&#x20;

#### CodeLink Settings

*<mark style="color:blue;">CodeLink Fail URL</mark>*\
This is the URL page on *your* website that any failed CodeLink check will be sent to. If, for example, the user hasn't come from an ixkio redirect link - or the link is now too old - they will be redirected to this link. If you leave this blank, then notification of the fail will be displayed directly to the user on the landing page.&#x20;

*<mark style="color:blue;">Default Display HTML</mark>*\
The CodeLink system allows you to modify the user experience during the CodeLink process, but we can also serve some HTML directly to the page via the javascript. This will display a white screen while the CodeLink check is being made. In most cases, the check is so fast that this will never show, but if there is a delay (or you don't use a CodeLink Fail URL), then this is what the user will see.&#x20;

If you don't use the Default Display HTML, then you should add your own HTML code.&#x20;

*<mark style="color:blue;">Verification Text</mark>*\
This is the text that the user will see while the CodeLink check is being made. Typically, this would be 'Authentication Check In Progress' or similar. However, you can include whatever text you prefer. HTML \<br> line break syntax is allowed.&#x20;

*<mark style="color:blue;">Verification Text Pause</mark>*\
Allows you to add a small pause on the CodeLink check screen while displaying the first 'Verification Text' message. This can prevent a quick flash of the authentication checking screen.&#x20;

*<mark style="color:blue;">Error Codes</mark>*\
If enabled, this will add the [reason for a CodeLink fail](/advanced-features/codelink/codelink-integration#traceback-fail-pass-codes) onto the CodeLink Fail URL as query string.

*<mark style="color:blue;">Escape Word & Tag Code Override (Only available on Edit after CodeLink Code created)</mark>*\
This will prevent the CodeLink system from giving an error state if it detects the Escape Word in the URL (not in the query string). This is designed to allow pages to be used in a development environment but not trigger the CodeLink code. For example, you could add the word 'admin' to prevent CodeLink from working in Shopify's admin pages.&#x20;

Tag Code Override can be used with the Escape Word to force ixkio to use the data from a specific Tag Code. This will ignore any key used (or lack of key). This is useful for testing NFT integration via CodeLink in a development environment. Needs to be a valid XUID.&#x20;

{% hint style="danger" %}
We very strongly recommend that the Escape Word is removed once the site is live. The Escape Word could prevent the CodeLink system from working in a live environment if left active.&#x20;
{% endhint %}

*<mark style="color:blue;">Status</mark>*\
Enables or disables (or deletes) this CodeLink Code. Even if the CodeLink code is inactive, the CodeLink code that you add to your website will still make a call to our servers. In some cases, if you have included the default display HTML, it will also still display the temporary blank screen and then immediately hide it. To completely disable the CodeLink code, you need to remove it from your website.&#x20;

#### Create the Code

Click on Add to create your code. You can modify all these settings later as required.&#x20;

### Enable CodeLink

*<mark style="color:orange;">Tag Group > Tag Group Function Panel > CodeLink Tab</mark>*

CodeLink is enabled at the Tag Group level (and by [enabling your CodeLink Code](/advanced-features/codelink/using-codelink#codelink-settings)).&#x20;

Select Status as either Enabled or Disabled.&#x20;

{% hint style="warning" %}
If your CodeLink Code is enabled (*<mark style="color:orange;">Side Menu > Control > CodeLink</mark>*) and on your landing page, then CodeLink will still be active even if you disable CodeLink at the Tag Group level. To completely disable CodeLink on your landing page you need to disabled the CodeLink Code itself.&#x20;
{% endhint %}

If CodeLink is On, then an additional unique key will be automatically added to your redirect URL. The parameter for this is `ixr`. For example, if your standard redirect URL was :&#x20;

```
https://yourdomain.com/authsuccess
```

Then it will become (for example) :&#x20;

```
https://yourdomain.com/authsuccess?ixr=e97f8xrvzbsw4by7
```

If you have other query string elements either as part of your link or dynamically added via [Dynamic Response](broken://pages/sLR5FeGK6xEYv2LsgOIl), then the CodeLink key will be added to the end of the query string.&#x20;

### Add the Javascript to your page

You need to add the following code to your authentication landing page :&#x20;

<pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript"><strong>&#x3C;script defer src="https://t.ixkio.com/s/traceback.js?code=&#x3C;yourcode>">&#x3C;/script>
</strong></code></pre>

Where \<yourcode> will be replaced by the CodeLink Code you created in step 1. For example, if your CodeLink Code was `dRzABK`, then your javascript woudl be :&#x20;

```
<script defer src="https://t.ixkio.com/s/traceback.js?code=dRzABK"></script>
```

You can add the code anywhere you choose, for example in the `<head>` section or before the end of the `<body>` section. &#x20;

## CodeLink Flow

### The Process

CodeLink has the following flow :&#x20;

1. User scans the NFC tag which directs them to ixkio
2. Ixkio handles the authentication check and redirects to your auth page. Ixkio will add a unique CodeLink Key into the URL.
3. Your page will load the CodeLink Javascript which will either :&#x20;
   1. Display our Default Display HTML Overlay or
   2. Display your HTML
4. The CodeLink Javascript will then make a call to our server to verify the CodeLink Key. This will response either as :&#x20;
   1. A pass, in which case :&#x20;
      1. The CodeLink Javascript will simply close our Default Display Overlay or
      2. The script will hide your HTML and/or
      3. The script will trigger your javascript function&#x20;
   2. A fail, in which case :&#x20;
      1. The Trackback Javascript will display a fail message via our Default HTML Overlay or
      2. The script will redirect instantly to your CodeLink Fail URL or
      3. The script will trigger your javascript function

#### Why CodeLink might fail

1. If a user attempts to access your auth page directly without any CodeLink Key in which case it will trigger a 'No Key' error.&#x20;
2. If a user attempts to re-use a link to your auth page with a CodeLink Key, in which case either :&#x20;
   1. If the attempt is made quickly (but slower than a normal page hit), then it will trigger an 'Expired Key' error.&#x20;
   2. If the attempt is made a substantial time later, then it will trigger an 'Key Not Found' error
3. If the user attempts to access the page with an incorrect CodeLink Key, then either:&#x20;
   1. It will trigger a 'Key Not Found' error, if it looks like it might be a real key or
   2. It will trigger a 'Key Error' error.&#x20;

### The Display

If the Default Display HTML is selected, then ixkio will serve a few lines of HTML code along with the javascript.&#x20;

This HTML code will attempt to display a full page white overlay onto your page and display the 'Authentication Text' (typically, Authentication Check In Progress). Under normal use - providing it's a valid attempt to view your page from a redirect - then this will only show for the briefest of moments and the overlay will be removed.&#x20;

If the CodeLink check does not pass, then :&#x20;

* If a CodeLink Fail URL has been entered in your settings, then the user will be redirected to this page
* If a CodeLink Fail URL has not been entered in your settings, then a message will be presented to the user (on the white overlay) of either :&#x20;
  * No CodeLink Key (when no Key has been provided)
  * CodeLink Key Error (if the key is of the wrong format)
  * CodeLink Key Expired (if the key is too old to be used)
  * CodeLink Key Not Found (this can mean that the key is the right format but not correct or it can mean that the key was very old and has been removed from the ixkio platform)


# CodeLink Integration

The CodeLink system has been designed to allow flexibility in the integration with regards to how the process displays to your users. You can keep the default settings or you can modify in part or in full as follows :&#x20;

### 1. The Default Display HTML

If you choose to include the Default Display HTML, then the CodeLink javascript code will attempt to display a solid white overlay with black text. You can change :&#x20;

*<mark style="color:blue;">Verification Text</mark>*\
In your CodeLink Code settings, you can modify the text that is displayed on the white overlay while the check is taking place. This field allows the `<br>` HTML line break for a little additional formatting.&#x20;

*<mark style="color:blue;">Verification Text Pause</mark>*\
This allows you to lengthen the time the Verification Text message is displayed.&#x20;

### 2. Modifying the Default Display HTML

You can make changes to the Default Display HTML by adding your own CSS styles. The Default Display HTML consists of two DIV elements. An outer element that is displayed as the overlay with an ID of `#ixtb-overlay` and an inner DIV which displays the text with an ID of `#ixtb-txt`.&#x20;

You may need to add `!important` to any CSS to ensure that it overwrites the Default Display HTML.&#x20;

### 3. Replacing the Default Display HTML

You can replace the Default Display HTML completely. Change the settings for your CodeLink Code so that 'Default Display HTML' is not included.&#x20;

You can now add your own code to provide the user experience that you prefer. In many cases you can provide the same overlay DIV but by coding this HTML yourself you can set it immediately to overlay your page - preventing any slight flicker as the page loads.&#x20;

The CodeLink javascript will set the #ixtb-overlay to hidden when the check is complete and will also update the #ixtb-text with the relevant text.&#x20;

If you have set the CodeLink Fail URL, then the CodeLink javascript will still redirect.&#x20;

### 4. Full Replacement

The CodeLink javascript will also call a function during the process - on error and on pass. You can create your own javascript function to handle the display and user experience.&#x20;

The function call is made to :&#x20;

```
codelinkConf({data});
```

Where `{data}` is a javascript object containing the status. For most implementations not using NFT+, this will be similar to :&#x20;

```
{
status:"key_pass"
}
```

&#x20;Note that no function call is made during the script load, only on the responses.&#x20;

## CodeLink Fail/Pass Codes

Depending on your configuration, CodeLink will send Fail/Pass codes either&#x20;

* As a message directly to the user (Default HTML with no Fail URL) or
* Included in the Fail URL redirect (if you have selected 'Add Error Codes' in your settings) or
* As a parameter in the function call (if you are handling the display yourself).&#x20;

These codes are :&#x20;

| Display Message                           | URL Code / Function | Function                                                                                             |
| ----------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------- |
| No CodeLink Key                           | no\_key             | When no key is in the URL                                                                            |
| CodeLink Key Fail                         | key\_error          | When the key is in the incorrect format                                                              |
| CodeLink Key Expired, Please Scan Again   | expired\_key        | When a key is re-used within a short period after issue.                                             |
| CodeLink Key Not Found, Please Scan Again | key\_not\_found     | When a valid format key is passed but it's either never been valid or so old that it's been removed. |
| -                                         | key\_pass           | When the key has been passed as valid.                                                               |

## Errors with Javascript Integration

If you have an error with your CodeLink javascript integration then we will display messages as alerts - ie, pop-ups onto your screen. These errors can be caused by :&#x20;

* Not incuding your Tracebook Code in the javascript URL src
* Not using a valid Code in the javascript URL src
* Using a deleted Code&#x20;

These alerts will only happen if there is a error with the CodeLink javascript line added to your page. Once set, your users would never see an alert. &#x20;

## Advanced Settings

It is also possible to set the Authentication Text directly into the javascript embed. We don't recommend doing this under normal use as it's easier to manage via the Console. However, if you need to display different messages, then this is an option.&#x20;

Use `data-text` in the script source code.&#x20;

For example :&#x20;

<pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript"><strong>&#x3C;script defer data-text="Your Auth in Progress&#x3C;br>Message" src="https://t.ixkio.com/s/traceback.js?code=&#x3C;yourcode>">
</strong></code></pre>

This will overrule any settings made in your CodeLink Code console configuration.&#x20;


# Testing CodeLink

During the configuration of the CodeLink system you may wish to check the different scenarios and how they present themselves. We recommend the following procedure :&#x20;

### Testing an Invalid Key

The CodeLink Keys are passed in the redirect from ixkio to your website using the query string parameter `ixr`, for example :&#x20;

```
https://yourdomain.com/authsuccess?ixr=e97f8xrvzbsw4by7
```

You can test for an invalid key scanning the tag so it lands on your auth page on your website. Now edit the URL so that you remove a character from the key, for example :&#x20;

```
https://yourdomain.com/authsuccess?ixr=e97f8xrvzbsw4by
```

This will then register as an Invalid Key and you can test the response.&#x20;

### Testing for no Key

Once you have implemented the CodeLink setup, try to access your landing page without any key in the URL. So remove the ixr= and just enter the URL.&#x20;

This will simulate someone trying to access your page directly.&#x20;

### Testing for a Re-used Key

Scan as you would normally to get the key pass response on your landing page. Now refresh the page directly in the browser.&#x20;

If you refresh the page very quickly - within seconds - it should allow the key to pass. This is an  important allowance as potential delays on the redirect between ixkio and your website caused by slow internet connections can create problems.&#x20;

If you refresh the page after a number of seconds, you should get an expired code response.&#x20;

If you wait a longer time (until the next day for example) and then refresh, you will see a no code found response.&#x20;


# Integration Guides

CodeLink works with most of the major website development platforms and can also be added to your custom design pages.&#x20;

Follow these guides for your website platform:&#x20;

{% content-ref url="/pages/rPx7eB9rCMPXLExyakN2" %}
[Using CodeLink with Shopify](/advanced-features/codelink/integration-guides/using-codelink-with-shopify)
{% endcontent-ref %}


# Using CodeLink with Shopify

{% content-ref url="/pages/9FNe1742v2Rw5FD2akdG" %}
[Shopify with Standard NFC Tags](/advanced-features/codelink/integration-guides/using-codelink-with-shopify/shopify-with-standard-nfc-tags)
{% endcontent-ref %}

{% content-ref url="/pages/2FRi8vItMFI19TdFiYvB" %}
[Shopify with Standard Tags (Video)](/advanced-features/codelink/integration-guides/using-codelink-with-shopify/shopify-with-standard-tags-video)
{% endcontent-ref %}


# Shopify with Standard NFC Tags

If you are using Shopify with standard NFC tags (such as NTAG213 or iCODE SLIX) then the process is similar to authentication NFC tags. You can still :&#x20;

* Dynamically pass and display data from ixkio to Shopify
* Protect the page so that it can only be viewed from ixkio

#### A note on Page Protection

CodeLink can help protect the page from views that haven't come from ixkio. This can be useful to prevent a view of the landing page if someone hasn't scanned your NFC tag. However, the page protection wouldn't stop someone sharing the link from the NFC tag itself. If you need full tag > page protection then you need to use authentication NFC tags.&#x20;

## Setting up CodeLink

First step is to set up CodeLink on Shopify and ixkio.&#x20;

### Install the Shopify CodeLink App

Search on shopify for the ixkio codelink App and install. Make sure you enable the theme extension on your page headers (follow the link in the blue setup box on the app).&#x20;

### Create a CodeLink code within ixkio

Navigate to *<mark style="color:orange;">Main Menu > Control > CodeLink.</mark>*

Click 'Create New CodeLink Code'. For this example, we will just use CodeLink to transfer data from ixkio to Shopify. So, give the CodeLink a name (just used internally for your reference), change 'Default Display HTML' to 'Do Not Include' and leave everything else. Then click Add.&#x20;

Now copy the new CodeLink Code (six alphanumeric digits) and paste this into the ixkio App on Shopify :&#x20;

<figure><img src="/files/w8JUxkqRvYtM61ZBbenT" alt=""><figcaption><p>Shopify ixkio App CodeLink Code</p></figcaption></figure>

## Adding CodeLink to Shopify Pages

### Create the landing page

The next step is to add CodeLink to your Shopify Page. For this example, let's create a product landing page called 'product-page'. To start with, just add some simple text, perhaps like this :&#x20;

<figure><img src="/files/WCGKZbt9tRDRmIXnRfYW" alt="" width="375"><figcaption><p>Demo Shopify Product Page</p></figcaption></figure>

### Add CodeLink to the page

Now navigate to to the CodeLink app on Shopify and add this page. This will then add the CodeLink code specifically to that page. Note that CodeLink is only added to the pages you specify. Don't add CodeLink to your whole website - just the landing page from the tag scan.&#x20;

<figure><img src="/files/o8qZrtsEeerDLnFL0jTK" alt=""><figcaption><p>Add CodeLink to landing page</p></figcaption></figure>

## Add the Redirect Link to your Tag Codes

Now we need to redirect our tags through to this page. In our example, our landing page is '<https://demo-ixkio-codelink.myshopify.com/pages/product-page'.&#x20>;

Within ixkio, we have created a Shopify Folder, a Shopify Tag Group, Batch and a Tag Code. Navigate to the Tag Group level and add the destination URL into the Rule Set Default URL and Save Changes :&#x20;

<figure><img src="/files/fv0DR8xglfy9JdumBymQ" alt=""><figcaption><p>Adding the Destination URL</p></figcaption></figure>

This will redirect all scans on all tags within this Tag Group to this page.&#x20;

## Enable CodeLink for this Tag Group

CodeLink can be enabled and disabled for each Tag Group. In this same Tag Group, we want to enable CodeLink so navigate to *<mark style="color:orange;">Tag Group Function Panel > CodeLink Tab</mark>*

<figure><img src="/files/SkSqrfYrm0Ww45HL2MVN" alt="" width="375"><figcaption><p>CodeLink Settings</p></figcaption></figure>

Change Status to Enabled, Data Link to Core & Extended and leave NFT Data as off (if you are on Alpha plan).&#x20;

The Data Link part is allowing Tag Code Core data (Tag Name, UID, CUID) and Extended Data (that you create) to be dynamically passed through to your Shopify landing page.&#x20;

## Test the Link

At this stage, we recommend testing the link. Dynamic data will not yet be displayed on your Shopify page but it's worth testing the link now. Navigate down to your Tag Code level (or create a Batch and Tag Code now under this Tag Group if you haven't already).&#x20;

You can copy the link from the NFC Encoding URL and paste this directly into a Browser. This should automatically redirect through to your Shopify Product Page.&#x20;

In the example below, we've got a Tag Code URL of '<https://t.ixkio.com/kerf5dda>'.

<figure><img src="/files/PbH1uSSEGRfV1N9eE4Ur" alt=""><figcaption><p>Tag Code Test</p></figcaption></figure>

{% hint style="warning" %}
Testing links in this way only works for Standard NFC tags not Authentication NFC tags. Auth tags generated a unique link on each scan and while you can test the link, you won't be testing authentication.&#x20;

To test auth tags, you can use the 'virtual tag' generator to create the unique links for testing in this way.
{% endhint %}

## Adding Dynamic Data to your Landing Page

Now we need to add dynamic data to your landing page. This will enable data stored in ixkio to be dynamically displayed on your Shopify Product Page.&#x20;

### Add Data to ixkio

In this simple example, we will use a 'CUID' (Customer Unique ID). Add an ID into your Tag Code for testing. We've used 'ID123457' :&#x20;

<figure><img src="/files/DHC06GDAgw8CkFjIMf0B" alt="" width="224"><figcaption><p>CUID Data</p></figcaption></figure>

### Add Field onto your Shopify Page

Within Shopify, open your product page for editing. Add some additional text to indicate the Product ID, perhaps something like :&#x20;

<figure><img src="/files/FZGuOqA8jNgYS6V4Buns" alt="" width="375"><figcaption><p>Product ID reference</p></figcaption></figure>

Now we need to edit the HTML code for this page to allow the dynamic entry of the data. Click on the <> button on the Content menu and add the code :&#x20;

```
<span id="ixkdd-cuid">&nbsp;</span>
```

So the result looks like this :&#x20;

<figure><img src="/files/CQWc3gThiBpyD01HJGSU" alt="" width="375"><figcaption><p>Dynamic CodeLink Data HTML Code</p></figcaption></figure>

And save.&#x20;

What you are doing here is telling Shopify to add the 'CUID' from ixkio between the 'span'. This can be formatted however you like and you can also dynamically add links, images and more. For the moment, we'll just do simple text.&#x20;

### Test Link again

Now copy the Tag Code URL again into a browser and check that the data is being passed through correctly. If it's all working, then you should see : &#x20;

<figure><img src="/files/r0co7mhKwsTOU75oBevi" alt="" width="375"><figcaption><p>Product Landing Page</p></figcaption></figure>

Where the 'ID123457' is now being dynamically taken from the Tag Code and placed into the page.&#x20;

And you are done !

## Advanced Features

CodeLink is a powerful system and all Tag Code related data can be dynamically transferred via Core and Extended data fields (including Digital Product Passport Data, Scan Counts, Assignment Dates, System Data, Action Data, etc, etc).&#x20;


# Shopify with Standard Tags (Video)

{% embed url="<https://www.loom.com/share/49319be2dd6f4d128bda679d7e5139fd?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}
Using Shopify CodeLink App (Standard Tags)
{% endembed %}


# Using CodeLink with Wix

It's recommended that you have Wix open on your Desktop as you follow this guide

If you are using Wix with standard NFC tags (such as NTAG213 or iCODE SLIX) then the process is similar to authentication NFC tags. You can still :&#x20;

* Dynamically pass and display data from ixkio to Wix
* Protect the page so that it can only be viewed from ixkio

#### A note on Page Protection

CodeLink can help protect the page from views that haven't come from ixkio. This can be useful to prevent a view of the landing page if someone hasn't scanned your NFC tag. However, the page protection wouldn't stop someone sharing the link from the NFC tag itself. If you need full tag > page protection then you need to use authentication NFC tags.&#x20;

## Setting up CodeLink

First step is to set up CodeLink on Wix and ixkio.&#x20;

### Create a CodeLink code within ixkio

Navigate to *<mark style="color:orange;">Main Menu > Control > CodeLink.</mark>*

Click 'Create New CodeLink Code'.&#x20;

<figure><img src="/files/z8RM29qUG6XrIYr85xtm" alt=""><figcaption></figcaption></figure>

For this example, we will just use CodeLink to transfer data from ixkio to Wix. So, give the CodeLink a name (just used internally for your reference), change 'Default Display HTML' to 'Do Not Include' and leave everything else. Then click Add.&#x20;

## Adding CodeLink to Wix Pages

### Create the landing page

The next step is to add CodeLink to your Wix Page. For this example, let's create a product landing page called 'product-page'. To start with, just add some simple text, perhaps like this:&#x20;

<figure><img src="/files/CYeIM0WaydUCWUyQmFwq" alt=""><figcaption></figcaption></figure>

### Add CodeLink to the page

<figure><img src="/files/XnZeN7Nmd89vRkhXRNpk" alt=""><figcaption></figcaption></figure>

Now navigate to the Setting page on your Wix dashboard and scroll down to custom code, in the advanced section.&#x20;

<figure><img src="/files/cyqh6ygw3gWMvc308soT" alt=""><figcaption></figcaption></figure>

From here click the 'Add Custom Code' button, and paste your JavaScript code from codelink into the space at the top. Choose a name e.g. Codelink, select the option marked 'Choose Specific Pages' and chose the page(s) you want to enable Codelink on. This will then add the CodeLink code specifically to that page. Note that CodeLink is only added to the pages you specify. Don't add CodeLink to your whole website - just the landing page from the tag scan. Select 'Head' as the codes location and keep Code Type as 'Essential'.

<figure><img src="/files/vXUjtSoGwlzP49wZYM95" alt=""><figcaption></figcaption></figure>

## Add the Redirect Link to your Tag Codes

Now we need to redirect our tags through to this page. In our example, our landing page is '<https://demo-ixkio-codelink.wix.com/pages/product-page'.&#x20>;

Within ixkio, we have created a Wix Folder, a Wix Tag Group, Batch and a Tag Code. Navigate to the Tag Group level and add the destination URL into the Rule Set Default URL and Save Changes:&#x20;

<figure><img src="/files/0iETYPqv3x0rJY3EwznH" alt=""><figcaption></figcaption></figure>

This will redirect all scans on all tags within this Tag Group to this page.&#x20;

## Enable CodeLink for this Tag Group

CodeLink can be enabled and disabled for each Tag Group. In this same Tag Group, we want to enable CodeLink so navigate to *<mark style="color:orange;">Tag Group Function Panel > CodeLink Tab</mark>*

<figure><img src="/files/SkSqrfYrm0Ww45HL2MVN" alt="" width="375"><figcaption><p>CodeLink Settings</p></figcaption></figure>

Change Status to Enabled, Data Link to Core & Extended and leave NFT Data as off (if you are on Alpha plan).&#x20;

The Data Link part is allowing Tag Code Core data (Tag Name, UID, CUID) and Extended Data (that you create) to be dynamically passed through to your Wix landing page.&#x20;

## Test the Link

At this stage, we recommend testing the link. Dynamic data will not yet be displayed on your Wix page but it's worth testing the link now. Navigate down to your Tag Code level (or create a Batch and Tag Code now under this Tag Group if you haven't already).&#x20;

You can copy the link from the NFC Encoding URL and paste this directly into a Browser. This should automatically redirect through to your Wix Product Page.&#x20;

In the example below, we've got a Tag Code URL of '<https://t.ixkio.com/kerf5dda>'.

<figure><img src="/files/ZEFmBQ4VijPsFBTaXAeg" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Testing links in this way only works for Standard NFC tags not Authentication NFC tags. Auth tags generated a unique link on each scan and while you can test the link, you won't be testing authentication.&#x20;

To test auth tags, you can use the 'virtual tag' generator to create the unique links for testing in this way.
{% endhint %}

## Adding Dynamic Data to your Landing Page

Now we need to add dynamic data to your landing page. This will enable data stored in ixkio to be dynamically displayed on your Wix Product Page.&#x20;

### Add Data to ixkio

In this simple example, we will use a 'CUID' (Customer Unique ID). Add an ID into your Tag Code for testing. We've used 'ID123457' :&#x20;

<figure><img src="/files/DHC06GDAgw8CkFjIMf0B" alt="" width="224"><figcaption><p>CUID Data</p></figcaption></figure>

### Add Field onto your WixPage

Within Wix, open your product page for editing. Add some additional text to indicate the Product ID, perhaps something like :&#x20;

Now we need to edit the HTML code for this page to allow the dynamic entry of the data. Click on the <> button on the Content menu and add the code :&#x20;

```
<span id="ixkdd-cuid">&nbsp;</span>
```

So the result looks like this :&#x20;

And save.&#x20;

What you are doing here is telling Wix to add the 'CUID' from ixkio between the 'span'. This can be formatted however you like and you can also dynamically add links, images and more. For the moment, we'll just do simple text.&#x20;

### Test Link again

Now copy the Tag Code URL again into a browser and check that the data is being passed through correctly. If it's all working, then you should see : &#x20;

Where the 'ID123457' is now being dynamically taken from the Tag Code and placed into the page.&#x20;

And you are done !

## Advanced Features

CodeLink is a powerful system and all Tag Code related data can be dynamically transferred via Core and Extended data fields (including Digital Product Passport Data, Scan Counts, Assignment Dates, System Data, Action Data, etc, etc).&#x20;


# Clusters

Clusters are used to classify and filter Batches in larger configurations. Clusters are created at the Tag Group level and can then be applied to Batches either when the Batch is created or later.&#x20;

## Creating Clusters

Navigate to your chosen Tag Group and then *<mark style="color:orange;">Tag Group Function Panel > Clusters Tab</mark>*. Enter the name for your Cluster and click on Add. Each Tag Group can have up to 25 Clusters. Clusters are not shared between other Tag Groups.&#x20;

## Applying Clusters

### When creating Batches

Once a Cluster has been created, it will be available as an option when created a Batch via the *<mark style="color:orange;">Tag Group Function Panel > Add Batch Tab</mark>*. You don't need to select a Cluster and you can change or remove the Cluster after the Batch has been created.&#x20;

### Within a Batch

You can set or remove a Cluster from within a Batch by navigating to *<mark style="color:orange;">Batch Data Panel > Cluster Tab</mark>*.&#x20;

## Filtering by Cluster

On the Tag Group screen, once a Cluster has been created, an additional column will be visible on the Batches table within the *<mark style="color:orange;">Batch Panel</mark>*. Additionally, a drop down allows you to filter by Cluster

<div data-with-frame="true"><figure><img src="/files/FPFc5VXeco79FHlE1XDJ" alt="Filtering by Clusters" width="440"><figcaption><p>Clusters Filtering</p></figcaption></figure></div>

## Cluster Subtags

The Cluster associated with a Tag Code (via the Batch) can be displayed dynamically within a Redirect, via the API Response or via [CodeLink ](/advanced-features/codelink)using the subtag - {cluster}. [More information on creating dynamic links using subtags.](/features/subtags)

## Using Clusters

The purpose of using Clusters is to help organise structures with larger numbers of Batches. You can use Clusters however you choose. \
\
However, if you are using Clusters to help track the release of multiple Batches of tags, there's two approaches for this :&#x20;

### Using Clusters as Product definitions

Consider a scenario for a Product hierarchy where you have, say 'Jeans' as an Active Folder, 'Style A' as your Tag Group and then multiple colours of Style A.&#x20;

You might choose to create a separate Batch for each colour of Style A so that you can organise the Tags. You can then use Clusters to define each colour and the Batch Name to define the Batch release (assuming that you might create more than one release of tags).&#x20;

In this way, you can dynamically include the colour on the API/Redirect/CodeLink.&#x20;

### Using Clusters as Release definitions

Alternatively, using the same scenarion as described above, you may choose to define the Batch Name as the colour and then use Clusters as - for example - the Release. So if you issue two sets of tags for a particular colour then you can use Cluster to define Release 1 and Release 2 so you can track which tags were sent out when.&#x20;

### Which works best ?

In the experience we have had with customers to date, we would recommend using the Cluster as the Release definition.&#x20;

## Cluster Groups

We are currently Beta testing with a limited number of clients Cluster Groups. Cluster Groups allows you to define up to 5 different sets of Clusters (rather than current one). In this way, you can define Batches in more granular detail such as 'size', 'leg length', etc.&#x20;

Cluster Groups will to go to full release in May 2025.&#x20;


# Ixkio Mobile App

The ixkio mobile app is available for Android and iPhone.&#x20;

This full featured app provides four core features :&#x20;

## Encode

You can encode NFC tags with Tag Codes created within the ixkio console. The encoding system is designed for large scale deployment and can handle multiple users encoding Tag Codes from different Batches at the same time.&#x20;

* Encode standard NTAG213/ICODE tags and NTAG424 authentication tags
* Encode with your custom domain&#x20;
* Lock tags and/or manage authentication keys

## Assignment

The ixkio app allows for fast [assignment](/features/assignment) of NFC tags.&#x20;

* Assign quickly with just a tap of the phone
* Continous fast mode on Android
* Switch assignment batch with QR code or barcode scanning
* Supports multiple users for large scale management

## Check

The check feature allows app users to check the status of the NFC tag including it's current Batch, Tag Group, Tag Name and - if using authentication tags - an authentication check.&#x20;

## Locus

If Locus is enabled, manage tags directly from the app including :&#x20;

* Set data via QR code / barcode scanning
* Set data via OCR (optical character recognition)&#x20;
* Take photos and upload to associate with a specific tag code
* Move tags between batches dynamically

&#x20;


# Mobile App Functions

<table data-card-size="large" data-view="cards" data-full-width="true"><thead><tr><th></th><th></th><th data-hidden></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>The Encode Function</strong></td><td>For encoding your NFC tags to the ixkio platform. </td><td></td><td><a href="/files/t7mIAm8kw1Knu72XzTe0">/files/t7mIAm8kw1Knu72XzTe0</a></td><td></td></tr><tr><td><strong>The Check Function</strong></td><td>For checking and displaying data associated with your NFC tags. </td><td></td><td><a href="/files/8bN2RswOSC7jUayPyjcw">/files/8bN2RswOSC7jUayPyjcw</a></td><td><a href="/pages/DVxePl9sa7AghM6bsQB9">/pages/DVxePl9sa7AghM6bsQB9</a></td></tr><tr><td><strong>The Assign Function</strong></td><td>To mark tags as Assigned and moving Tags between batches.</td><td></td><td><a href="/files/WDG71ikZ47PuxwwoU93q">/files/WDG71ikZ47PuxwwoU93q</a></td><td></td></tr><tr><td><strong>Locus</strong></td><td>Advanced app based Tag data and Tag location management</td><td></td><td><a href="/files/BuspQeUxrkbJDznbXJzy">/files/BuspQeUxrkbJDznbXJzy</a></td><td></td></tr></tbody></table>


# Check

The check feature allows app users to check the status of the NFC tag including it's current Batch, Tag Group, Tag Name and - if using authentication tags - an authentication check.&#x20;

{% embed url="<https://www.loom.com/share/30f3f0df3443414d9b6eb56722eca576?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}


# Encode

{% embed url="<https://www.loom.com/share/2c4e6b2625f746b78c8fb0332fcb74ad?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}

You can encode NFC tags with Tag Codes created within the ixkio console. The encoding system is designed for large scale deployment and can handle multiple users encoding Tag Codes from different Batches at the same time.&#x20;

The ixkio mobile app can encode both standard tags such as NTAG213 or iCODE SLIX, and also the NTAG424 authentication NFC tags.&#x20;

Additionally, the app can encode using [Custom Domains](/getting-started/custom-domain) in Redirect Mode or customer based URL in API response mode.&#x20;

The Android version allows for 'continuous encode' for even faster encoding and tag deployment. &#x20;


# API Response Mode Encoding

If you are using the ixkio Flex API for authentication, it's still possible to use the ixkio mobile app to encode your NTAG424 tags.&#x20;

In this case, the tags will be encoded with your domain name to go to your server first. However, the keys will still be loaded into the ixkio platform against each tag.&#x20;

{% hint style="warning" %}
API Response Encoding is designed for NTAG424 authentication tags only. If you are using the API Response Mode for regular NFC tags, then do not use this function (use the Seritag Encoder NFC app instead)
{% endhint %}

## Setting the Encode Domain

*<mark style="color:orange;">Main Menu > Management > Advanced Settings > API Encoding Settings Panel</mark>*

This field uses the subtags system to dynamically substitute tag data during encoding as follow :&#x20;

| Subtag  | Data Substituted  |
| ------- | ----------------- |
| {xuid}  | Tag XUID          |
| {cuid}  | Tag CUID\*        |
| {count} | Tag Scan Count    |
| {code}  | NTAG424 CMAC Code |
| {uid}   | Tag UID           |

{% hint style="info" %}
At the moment, API encoding doesn't support PICCData (Encrypted UID and Counter mirror). We will be releasing this encoding option later in 2026.
{% endhint %}

#### CUID&#x20;

The CUID Core Data field must be set on your console for each tag *before* you encode your tags. Encoding with the {cuid} subtag will take your Tag CUID and encode it permanently onto each tag. It's important to understand that if you then change the CUID in the console, the Tag encoding CUID will not dynamically chang&#x65;*.*&#x20;

## Encoding your Tags

You can now encode your Tags in the usual way with the App. Simply, create 'unencoded' Tag Codes within a Batch, enabled encoding from the 'Encode' Tab of the Batch Function panel. Tap the Encode Function on the App and encode.&#x20;

Your NTAG424 Tag will be encoded with your URL, the encryption key will be automatically generated and stored against your Tag Code.&#x20;

{% hint style="danger" %}
Encoding your Tags will lock them to the key. At the moment, the ixkio App cannot change the data encoded onto your NFC tags. We ***very strongly*** recommend encoding a couple of test tags before you encode any production tags.&#x20;
{% endhint %}

#### Example

Assume that your landing page URL is :&#x20;

```
https://authnfc.com/auth?tagid=abcd1234&count=000001&code=abcd1234abcd1234
```

Where you are taking the parameters of the tagid (in this case the xuid from ixkio), the count and the code to pass to our authentication API. You would enter into the console :&#x20;

```
https://authnfc.com/auth?tagid={xuid}&count={count}&code={code}
```


# Allowances & Usage

## Current Plan Details

*<mark style="color:orange;">Main Menu > Admin > Plan Details</mark>*&#x20;

Screen will display your current plan and subscription (annual or monthly) along with the next renewal date of your subscription.&#x20;

The Plan Allowances displays the number of Tag Codes included with your plan and the number of monthly allowed Tag Events (scans + API calls). &#x20;

### Changing Plans

You can usually upgrade from Flex or Flex Pro to Flex Pro or Flex Alpha. Contact us with your account details and we will check the settings on your account to confirm.&#x20;

In some cases it is also possible to downgrade from Alpha or Pro. However, some Tag Code settings may need to be modified. Contact us for confirmation. &#x20;

## Current Usage

*<mark style="color:orange;">Main Menu > Admin > Current Usage</mark>*&#x20;

Screen displays your current Tag Code usage and current Monthly Tag Events (scans + API calls).&#x20;

To increase your Tag Event allowance, we can offer High Volume and Enterprise upgrades. Please contact us for more information.&#x20;


# Billing & Invoices

## Overview

Ixkio uses a third party payment processor called [Paddle ](https://www.paddle.com/)for subscription billing to save us from the complexity of international tax. Paddle should provide the invoices/receipts for your payment directly.&#x20;

If you have any problems with payment or receipts, please contact us first and we can solve your problems. Contacting Paddle can result in delays as they will contact us.&#x20;

## FAQ

### Can I pay by bank transfer?

Yes. However, do not open an account via ixkio.com. Contact us and we will open and process the account for you.&#x20;

If you are based in the UK, we can invoice you directly and you can pay by bank transfer direct to us.&#x20;

If you are based outside the UK, we will invoice you through our payment processor - Paddle. You can still pay by bank transfer in either GBP, USD or EURO but payments will be made to Paddle rather than to us.&#x20;

### How do I access my invoices?

For customers on regular subscription, you can access your invoices through [Paddle](https://www.paddle.com/).

If you paid through Seritag and are in the UK, then we will have sent you an invoice on payment. If you need a copy, just contact us.&#x20;

### How can I upgrade my subscription?

To upgrade your subscription, give us a call or email us and we can talk you through your options. Contact us [here](https://ixkio.com/contact).

### How do I cancel my subscription?

Just drop us an email or give us a call. We will usually quickly verify your request but don't worry - we aren't going to mess you about and hassle you to stay.

We have many clients who use the platform for short periods for events, trade shows, festivals, etc. Your subscription can be cancelled at any time so it's no problem if you use the account for a short period and need to close it. Clearly, we always hope to see you back again !


# Account Information

## Timezone

*<mark style="color:orange;">Main Menu > Management > General Settings > Account Settings Panel</mark>*

By default, the timezone will be set on UTC (Coordinated Universal Time), which is the same as GMT. However, you can change the timezone to your region here.&#x20;

Any change to the time zone on this setting will apply to all previous dates stored (tags scans, created dates, etc) as well as all future dates and times.&#x20;

## Account ID

*<mark style="color:orange;">Main Menu > Management > General Settings > Account Information Panel</mark>*

The Account ID (AID) can be used in requests alongside a Tag Code UID or your CUID. &#x20;

Navigate to the Main Menu, Click the Account Management drop down then click Account Settings. Your Account ID will be in the Account Information panel.


# User Settings

{% hint style="info" %}
To manage Users within a Multiuser configuration, read the [Multiuser documents](/modules/multiuser).&#x20;
{% endhint %}

## Changing User Settings

*<mark style="color:orange;">Main Menu > Admin > Your Settings</mark>*

Edit you User Name or login email and click 'Update'.&#x20;

The User Name is only used internally on your account and setting this can be useful if you decide to go to a multiuser config in the future as it will appear in the event logs.&#x20;

{% hint style="danger" %}
Changing your email address will also immediately change your login email.
{% endhint %}

## Changing Password

*<mark style="color:orange;">Main Menu > Admin > Password</mark>*

Enter your current password and enter your new password twice to change. As with all passwords, we strongly recommend using a long, mixed letter/number combination for maximum security.&#x20;

If you have lost your password, then visit [https://m.ixkio.com](https://m.ixkio.com/) and click the lost password link.&#x20;

{% hint style="info" %}
If you are not the Account Master in a multiuser configuration, then you cannot change your own password. You need to contact either your Account Master or an Admin User.&#x20;
{% endhint %}


# Cookies and Privacy

## User Privacy

### Account Holder Privacy

Ixkio will set a cookie for the purposes of managing account access when you log in. It is only used for this purpose and you can safely delete this cookie when not using the console or Locus.&#x20;

We only store user information related to the Account holder for the purposes of account management such as billing and account maintenance. We will not contact you for marketing, promotion or similar reasons and your email will not be transferred outside our company (unless we are legally required to do so).&#x20;

Any information entered regarding other users in a multiuser configuration is treated the same way.&#x20;

### Third Party Tag Scan Users

Ixkio do not set cookies or store any personally identifiable information for non-account users scanning any tags, QR codes or links directly linked to the ixkio platform.&#x20;

Where we provide information such as geo data, we do so only at a generic level (such as a country) and the IP address or other information on which we base this data is not stored anywhere on our systems in association with either the Tag Code or the Account.&#x20;

We may store IP data across the whole system in general but only for the purposes of system/server/network security. Any storage is completely anonymous and not related in any way to any specific event, account, tag, QR code or user.&#x20;


# Chip Count vs Scan Count

There are two different counting methods within the ixkio platform : Chip Count and Scan Count. By default, only the Scan Count is displayed on the interface.&#x20;

### Scan Count

This is the count of the number of times that the ixkio software has responded to a request. So, simply, the number of times the software has provided a response via Direct Response or Redirect. &#x20;

### Chip Count

This is the count of the number of scans ***as recorded on the NFC chip itself**.*&#x20;

Many NFC chips, such as the NTAG213, have the ability to store the number of times the chip/tag has been scanned. This count can be dynamically added to the URL on the chip as the tag is scanned. This is a special feature that needs to be enabled when the tags are encoded and cannot be added later.&#x20;

For ixkio to be able to record this count, this feature must be enabled ***on the chip during encoding*** and then passed to the ixkio software using the query parameter 'n', for example :&#x20;

```
https://t.ixkio.com/98sddgaz?n=000001
```

The view of this count can then be enabled in the interface using [Enable Chip Count](/getting-started/organisation-structure/tag-groups/tag-group-settings#chip-count-enabled) within the Tag Group settings.&#x20;

If you are using Authentication Tags then the Chip Count will be enabled by default.

{% hint style="warning" %}
Ixkio cannot record or display the chip count if this feature has not been enabled on the NFC chip itself during encoding.&#x20;
{% endhint %}

### Why the Counts can be different

The Counts aren't always the same - this is normal.&#x20;

#### Chip Count is greater than the Scan Count

Every time the chip/tag is scanned, the chip counter will increase. In some cases, such as an iPhone scan, a notification will pop up on the screen after scan. If the user doesn't tap this notification and cancels - or perhaps doesn't have internet connection - then the scan won't reach our servers.&#x20;

Our servers will not update at this stage as they won't know about the scan. However, on the next successful tag scan, our servers will record the Chip Count (which will now be, for example, 2) but will only have made a single response. Therefore, the Chip Count will be 2 and the Scan Count only 1.&#x20;

#### Scan Count is greater than the Chip Count

This can often happen if a user revisits a URL scanned from a tag - without actually scanning the tag. It can also happen in cases where QR Codes are being used on the same Tag Codes as NFC tags.&#x20;

### Why Chip Count is hidden

In the substantial majority of standard tag (not authentication tag) use cases, the Chip Count is not enabled and not used. To keep the interface as clear as possible, the Chip Count is hidden unless it is required.


# Use Cases

Examples of how ixkio features and functions can be combined to optimise tag management.


# Dynamic Responses

This use case combines: Responses, Subtags and Associate Data to create Dynamic Responses

*I work for a games company which runs interactive puzzle rooms. We have a new experience where players have to scan various objects with a sci-fi device (a modified android phone) to view security and interview footage. Each object will have a discrete NFC tag on it and We have the footage as unlisted videos on YouTube. Each tag needs to point to a different YouTube video and ideally, we should be able to manage it all without having to scan each tag.*

> **We needed all our tags to go to the same Website, but each tag then needed to go to a unique page.**

With all our videos on YouTube, we looked at the URL's for a few videos and noticed that **each one was similar** but had **a different code at the end**. We decided that the best way to do this in ixkio would be using **Subtags.**&#x20;

We put all our **Footage Tags** into a **Tag Group** and put them into two **Batches:**&#x20;

* Interview
* Security

In the **Tag Group** we then set the **Rule Set Default URL** to the generic part of the YouTube URL (<mark style="background-color:green;"><https://www.youtube.com/watch?v=></mark>).

We then went into both **Batches** and downloaded the **Tag Encoding Data.** This would let us use **Associate Data** to make sure that every tag contained a code for a different YouTube video. We decided to use the **Customer Unique ID (CUID)** to store our unique YouTube code.&#x20;

And so, in the Tag Group, at the end of our YouTube URL we put a **Subtag** so that the **CUID code** would automatically be added to the URL (<mark style="background-color:green;"><https://www.youtube.com/watch?v=></mark><mark style="background-color:orange;">{cuid}</mark>). Now we just needed to make sure each tag had YouTube video code as it's **CUID**.

Next we opened the first **Tag Encoding Data** we'd downloaded into Excel and we found the **CUID Column.** We kept the **XUID** and **CUID** columns, so the data could be matched up to the tags, but we deleted the other columns that we didn't want to change along with the **Batch Name** at the top.&#x20;

Using the **Tag Encoding Data** we'd downloaded, we found the **CUID** column and pasted each YouTube code against an **XUID**.&#x20;

We also put the video title against the **Tag Name** so we could keep track of them in ixkio.

Once we'd put all the codes into our trimmed back **Tag Encoding Data** spreadsheet, we saved it under a new name (e.g. InterviewUIDs) and opened up ixkio again.&#x20;

We found the **Batch** we download the **Tag Encoding Data** from, went to **Associate** and clicked on **Choose File.** We selected our **UID** data file (InterviewUIDs) and then, on ixkio, clicked the **Associate Tags** button.

Each Tag now had a **CUID** which was also a YouTube video code.&#x20;

To check, we opened up a random tag and clicked the dropdown arrow next to the **XUID**, found in the **Tag Detail** box. We copied the URL, pasted it into our browser, and it linked through to one of our videos with the same title as the **Tag Name** we'd put in for it.

{% content-ref url="/pages/sLR5FeGK6xEYv2LsgOIl" %}
[Broken mention](broken://pages/sLR5FeGK6xEYv2LsgOIl)
{% endcontent-ref %}

{% content-ref url="/pages/JO3Q28IXpITKUTAd4e8G" %}
[Subtags](/features/subtags)
{% endcontent-ref %}

{% content-ref url="/pages/5zI3iFfSh0PWk2SYKdzx" %}
[Creating a Rule](/features/rules/creating-a-rule)
{% endcontent-ref %}

{% content-ref url="/pages/Ea5GmQw4cIVwYsbP0WUr" %}
[Associate Data](/features/associate-data)
{% endcontent-ref %}


# NFC Tools - Encoding Guide

{% embed url="<https://www.loom.com/share/ec9d88d76b4d454882d2213cd0afc575?hideEmbedTopBar=true&hide_owner=true&hide_share=true&hide_title=true>" %}


# Software Updates

{% updates format="full" %}
{% update date="2026-06-08" %}

## TapAI Stats

TapAI query stats are now available directly on the Tag and Batch level pages. Navigate to the TapAI Tab in the Activity panel.&#x20;

You get a full breakdown of each query including the Credits used. If you have enabled logging, you can view the question and answer as well.&#x20;
{% endupdate %}
{% endupdates %}


# Coming Soon


# Flex API Getting Started

Ixkio's Flex API plan is designed for for verification of NTAG424 authentication tags via API. Trusted by some of the world's largest brands, the Ixkio Flex API authentication platform provides an easy to use, fast, reliable and scaleable platform for auth tag projects.&#x20;

Ixkio also supports the encoding of NTAG424 tags via the ixkio mobile app for use with the Flex API plan.&#x20;

Use of the API system requires a strong understanding of technical knowledge and the ability to access and develop your webserver at an in-depth level. Ixkio cannot give advice on setting up or the configuration of your server beyond advising how our server would respond to an API call. If you aren't technically minded or don't have access to technical developers, we'd recommend using our Flex Pro plan with Redirect or Direct Response.&#x20;

{% hint style="info" %}
These pages details how to use the **Flex API** to verify your authentication tag scans.&#x20;

If you are looking to use the **Management API** to modify Tag Codes, then read about [Management API](/modules/management-api).&#x20;
{% endhint %}

### Typical Use Case

In all cases, the authentication NFC tag will link directly to your webserver or application, rather than linking directly to the ixkio platform. In other words, you can't use ixkio as a redirect and API platform for the same tag.&#x20;

Where the tags are linked to a website, your webserver would extract the query string parameters from the URL and then make a GET request with those parameters to our server. The ixkio server will check the parameters and respond with a pass or fail message.

Your server can then respond directly to the user with the appropriate message.

### API Overview

The ixkio Response API system is designed to be easy to use and access. &#x20;

* Flex API can only be used to extract tag information, not set, create or change it
* Rules can be used to set and control the API response
* API responses can also include additional information
* All API requests must be on `https` not `http`
* Access to API can be open or controlled with an API Key
* Flex API supports a range of NTAG424 encoding options, including :&#x20;
  * CMAC only encoding
  * CMAC and PICCData (Meta) encoding with multiple keys
  * CMAC and PICCData (Meta) encoding with diversified keys
* NTAG424 tags can be encoded directly to the ixkio platform - using your destination domain - using our ixkio app if required.&#x20;


# Using the Flex API

Flex API is designed for advanced users. You will need advanced server skills to be able to use the  Ixkio Flex API. Please be aware that Ixkio cannot provide code or advice on how your server or app would access the API, only how to configure our platform and responses.&#x20;

The NFC tags will link to your third party server first. Your server will extract parameters from the URL and make an API request to the ixkio platform. Ixkio will then respond to your server verifying the tag details.&#x20;

![API](/files/rYU59CDmSHZQnijQxblc)

These pages discuss accessing the API for the purposes of using the API Response Mode.&#x20;

## Accessing the API

The ixkio API is accessed at the following endpoint via :&#x20;

```
GET https://api.ixkio.com/v1/t
```

{% hint style="warning" %}
All requests must be over HTTPS
{% endhint %}

You can access the API either by using :&#x20;

* the ixkio system's tag XUID
* the tag's CUID (a UID that you set per tag) and your [AID](/account-management/account-information#account-id) (account ID)
* or the tag's UID and your AID.&#x20;

Parameters should be passed in the query string as follows :&#x20;

#### XUID

> x={XUID}
>
> Example : GET <https://api.ixkio.com/v1/t?x=abcd1234>

The Tag Code (XUID) needs to be added to all API GET requests unless you wish to access the tag using your CUID or UID.&#x20;

As the XUID is unique across the entire ixkio platform, there is no need to include any additional identifier or your AID with this request type.&#x20;

If you are not using authentication tags, then this can be the only parameter you need to include to generate a response from the API.&#x20;

#### CUID or UID

> c={CUID}
>
> Example : GET <https://api.ixkio.com/v1/t?c=yourcode\\&a=abc123>

or &#x20;

> u={UID}
>
> Example : GET <https://api.ixkio.com/v1/t?u=04AABBCC112233\\&a=abc123>

If you access the API using the [CUID](/features/meta-data/core-data#custom-uid-cuid) or [UID](/features/meta-data/core-data#uid), then you do not need to include the XUID in the API request. However, you must also include your [AID ](/account-management/account-information#account-id)(Account ID). The UID or CUID data must have been uploaded into the ixkio platform prior to the API request.&#x20;

{% hint style="info" %}
The CUID parameter is case sensitive search - ABC123 is not the same CUID as abc123. The UID parameter must always be uppercase.&#x20;
{% endhint %}

## API Response

The API Response will follow the Rules configured for that Tag Code (or inherited by that Tag Code from the Tag Group).&#x20;

For this example, we will assume that a simple configuration has been created with an Active Folder > Tag Group (standard type) > Batch > Tag Code. We will also assume that a 'Default API Response' has been set at the Tag Group level. In this example, we will simply use a Default API Response of 'Found'. We will be testing a tag XUID of 'q8w3sbcz'.

The API request is made to :&#x20;

```
GET https://api.ixkio.com/v1/t?x=q8w3sbcz
```

The API will return a JSON response in the format : &#x20;

```json
{
	"xuid": "q8w3sbcz",
	"response": "Found"
}
```

Error responses will be provided as :&#x20;

```json
{
	"xuid": "q8w3sbcz",
	"error": "batch_inactive"
}
```

### Response to CUID or UID requests

If your request is via the CUID or UID method, then a successful response will return only the CUID and the associated XUID. For example, a request for :&#x20;

```
GET https://api.ixkio.com/v1/t?a=youraid&c=yourcuid
```

will generate a successful response of : &#x20;

```json
{
	"xuid": "q8w3sbcz",
	"cuid": "yourcuid",
	"response": "Found"
}
```

(where 'Found' is the API Response entered into your Tag Group or Tag Code Rule)

However, a failed response for an incorrect AID will return an error :&#x20;

```json
{
	"xuid": "",
	"cuid": "yourcuid",
	"error": "aid_not_found"
}
```

where a not found CUID will return :&#x20;

```json
{
	"xuid": "",
	"cuid": "yourcuid",
	"error": "cuid_not_found"
}
```

For API information for authentication NFC tags, read the [API Mode for Authentication](/flex-api/flex-api-getting-started/flex-api-ntag424-authentication).

{% hint style="info" %}
The HTTP response status code for **all** responses is 200 OK.
{% endhint %}

## API settings

API settings are controlled at the Folder level and affect all Tag Groups, Batches and Tags under that Folder. It's possible to set different API settings on different Folders to allow different access options.&#x20;

Navigate to the API Folder Level, then the API Settings panel to make changes to the settings.&#x20;

### API Tokens

By default, access to your API does not require any token. However, you can set token access in the API settings to restrict access.&#x20;

An alphanumeric token up to 32 characters in length can be added into the API Token field.&#x20;

The API Token can then be passed in either GET query string using the parameter 'r', for example :&#x20;

> r={API\_TOKEN}
>
> Example : GET <https://api.ixkio.com/v1/t?x=abcd1234\\&r=yourapitoken>

Alternatively, you can pass the token in the GET Header request using any one of the keys X-API-Key, X-Api-Key or Ixkio-R.&#x20;

### CORS

[CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) (Cross-Origin Resource Sharing) is a security mechanism designed to control which domains a browser can access resources from. For most use cases, you can leave this field blank but for some use cases, you can modify the `Access-Control-Allow-Origin` response.&#x20;

#### No setting (default)

If you leave the CORS setting blank, then the API response will be returned without an Access-Control-Allow-Origin header.&#x20;

#### \*

Entering a \* into the CORS field will allow access from any domain.&#x20;

#### Domain

Entering a specific domain, such as <https://seritag.com> (no trailing slash), will activate the Access-Control-Allow-Origin header response with the value of the domain entered. The CORS field will accept a single domain value up to 100 characters in length.

## Rate Limits

Access to the API is rate limited and monitored to maintain overall service levels. However, under all normal NFC use cases, users would not hit any limits.&#x20;

We will contact you if our systems flag any unusual or high volume access.&#x20;

## Using Authentication NFC Tags

{% hint style="warning" %}
We strongly advise creating a new Batch for each set of authentication tags, even if it's simply a repeat order.&#x20;
{% endhint %}

### Seritag Encoding

If you are purchasing your NTAG424 tags from Seritag, you can ask for them to be encoded before shipping. In this instance, Seritag will encode the tags and store the encryption keys against each tag.&#x20;

### Ixkio App Encoding

You can use the ixkio mobile app to encode authentication tags for Flex API.&#x20;

Note that the Ixkio App currently only supports CMAC authentication encoding not PICCData/Meta encoding. If you are intending to use PICCData/Meta as well, then tags need to be encoded by Seritag (or you can encode yourself)

Read the guide here on how to configure the console for encoding Tags to your auth landing page.&#x20;

{% content-ref url="/pages/OmqiZcE5oAPZwUxIxKjv" %}
[API Response Mode Encoding](/mobile-app/mobile-app-functions/encode/api-response-mode-encoding)
{% endcontent-ref %}

### Encoding Tags Yourself

If you can encode the NTAG424 tags yourself, you can upload the keys into the ixkio platform.&#x20;

* Create the Tag Codes in a new Batch in your Console
* Download the XUID (*<mark style="color:orange;">Batch Function Panel > Download</mark>*)
* If required, use the XUID list to add your own CUID using [Associate Data](/features/associate-data)
* Generate your own keys and create an Associate Data file with the header XUID,KEY
* Upload your Keys into the ixkio platform at *<mark style="color:orange;">Batch Function Panel > Keys</mark>*


# Flex API NTAG424 Authentication

For the authentication API system to work :&#x20;

* You must be using authentication NFC Tags (NTAG424 for example)
* The tag keys must have been loaded into the ixkio platform ([how to check](/getting-started/organisation-structure/tags/tag-code-settings#authentication-tag-code-settings))&#x20;

As the authentication system will only work using a unique code generated by the authentication NFC tag, we recommend testing and developing with a set of working NFC tags.

{% content-ref url="/pages/zXslUqu8zNiSauUhBjPW" %}
[Using Authentication (NTAG424) NFC Tags](/getting-started/organisation-structure/tags/using-authentication-ntag424-nfc-tags)
{% endcontent-ref %}

## API Response

The API Response will follow the Rules configured for that Tag Code (or inherited by that Tag Code from the Tag Group).&#x20;

For the authentication system to work correctly, we need to create a Rule Group that will activate on a successful authentication and provide a Response and then, on a fail, will fall back to the Default Response.&#x20;

### Example Configuration

For this example, we will assume that a simple configuration has been created with an Active Folder > Tag Group (authentication type) > Batch > Tag Code. You will also need a sample authentication NFC tag associated with this Tag Code. (It's possible that if we have provided some sample tags, we will already have configured the Rules as detailed for you. You can, of course, change them.)

For this example, we are going to set a Rule at the Tag Group level. It is possible to set the rule for each individual Tag Code as well.&#x20;

At the Tag Group level, you need to create the Authentication Rule Group. On the Tag Group screen, under *<mark style="color:orange;">Tag Group Function Panel > Ruleset Tab</mark>*, click on 'Add Rule Group'. Click the small burger menu on the right, then 'Add New Rule'. Select 'Tag Authentication', then 'Authentication Pass'.&#x20;

You will now have two empty 'Response' fields.&#x20;

The first is for the 'Rule Group API Response' - which is the response given on a successful authentication. Enter 'Pass' into this field.&#x20;

The second is the Default API Response. This is the response if the authentication is not successful (ie, a fail). Enter 'Fail' into this field.&#x20;

Then click 'Save Changes'.

### CMAC Only Authentication

In this example, we will be testing a tag XUID of 'q8w3sbcz' (your XUID will be different of course). The sample NFC tag will have been configured to hit your server first. So you will need to extract the correct parameters from the URL query string.&#x20;

There are a few ways that this can be configured - see notes below - but we will explain the standard method.&#x20;

#### Step 1 : The Tag Scan

On scanning the NFC tag, the URL will be presented as follows :&#x20;

```
https://yourdomain.com/auth?x=q8w3sbcz&n=000001&e=abcde12345abcde1234
```

(Where, in this example, *yourdomain.com* is your website and *auth* is your page handling the tag scans)

#### Step 2 : Your Server Request

Your server needs to extract the x, n and e parameters and make an API call to our server as follows :&#x20;

```
GET https://api.ixkio.com/v1/t?x=q8w3sbcz&n=000001&e=abcde12345abcde1234
```

Remember that both the n and e parameters will change on every scan. You should only test directly from each tag scan and don't change the parameters in any way until you are comfortable with the platform.&#x20;

#### Step 3 : The Response

The ixkio platform will now respond to your API request after checking the authentication. Based on the Rules we have created, a successful authentication would return :&#x20;

```json
{
	"xuid": "q8w3sbcz",
	"response": "Pass"
}
```

If the authentication fails, the response would be :&#x20;

```json
{
	"xuid": "q8w3sbcz",
	"response": "Fail"
}
```

An error in the request would be, for example :&#x20;

```json
{
	"xuid": "q8w3sbcz",
	"error": "batch_inactive"
}
```

### Response to CUID or UID requests

If your request is via the CUID or UID method, then a successful response will return only the CUID and the associated XUID. For example, a request for :&#x20;

```
GET https://api.ixkio.com/v1/t?a=youraid&c=yourcuid&n=000001&e=abcde12345abcde1234
```

will generate a successful response of : &#x20;

```json
{
	"xuid": "q8w3sbcz",
	"cuid": "yourcuid",
	"response": "Pass"
}
```

## The 'n' Parameter

The 'n' parameter passes the ixkio platform the scan count from the NFC chip itself (in hexadecimal). This is not the same as the ixkio scan count as explained in our [Chip Count vs. Scan Count](/explainers/chip-count-vs-scan-count) page.&#x20;

The ixkio platform uses the chip count along with the unique tag 'auth' code (the 'e' parameter) to authenticate. Each 'n' chip count will have a matching 'e' auth code. If they are out of sync, then the response will be a fail.&#x20;

Some important points :&#x20;

#### Ixkio will believe you

Ixkio will believe whatever 'n' chip count parameter you send it providing that authentication has passed.

#### The chip count can only move forward

The chip count can never go backwards on the ixkio platform. If you accidently set the chip count to 1,000, then only a genuine tag scan from 1,001 onwards will now work. You cannot 'reset' the chip count on the ixkio platform.&#x20;

#### Single use

Once a chip count has been used, it is instantly no longer valid. If you 'refresh' the API request, you will get a failed authentication.


# PICCData / Meta Authentication

Ixkio supports the authentication of PICCData (Meta) codes as well as CMAC codes. The main reasons for using encrypted PICCData is either to hide the scan count or the chip UID, or both.&#x20;

Typically, this configuration is one of three methods :&#x20;

### Double Key Hybrid

This method avoids the use of key diversification. In this instance, tags are encoded with two keys as follows :&#x20;

**Key A**\
The Key A is unique per tag. This means that every tag has it's own key and this is stored alongside the tag identifier (our XUID, the chip UID or your CUID). Key A is used for Key Zero on the chip - to protect access - and to verify the CMAC.&#x20;

**Key B**\
Key B is not unique per tag. Key B is system wide and is used to decrypt the PICCData to access the tag scan count and UID. Currently, ixkio only allows one Key B per Flex API account. If you require multiple Key B, then discuss your requirements with us.&#x20;

### Triple Key Hybrid

This method avoids the use of key diversification In this instance, tags are encoded with three keys as follows :&#x20;

**Key A**\
The Key A is a global key. Key A is used for Key Zero on the chip - to protect access.&#x20;

**Key B**\
Key B is a global key. Key B is system wide and is used to decrypt the PICCData to access the tag scan count and UID. Currently, ixkio only allows one Key B per Flex API account. If you require multiple Key B, then discuss your requirements with us.&#x20;

**Key C**\
Key C is unique per tag. This means that every tag has it's own key and this is stored alongside the tag identifier (our XUID, the chip UID or your CUID). Key C is used to verify the CMAC.&#x20;

### Triple Key Diversified

This method uses key diversification (using NXP's recommended algorithm). Diversification means that a master key is used across all tags and is diversified based on the UID of the tag. This results in a unique key for the Key Zero (protection) and CMAC (typically Key Two).&#x20;

However, to know the diversified key, the system needs to know the UID. So the PICCData uses a key that is not diversified. The PICCData is then decrypted and the UID and count are then used to diversify the Key C to then authenticate the CMAC.&#x20;

**Key A**\
The Key A is a global system wide key. Key A is used for Key Zero on the chip and is diversified from the UID of the chip.&#x20;

**Key B**\
Key B is a global key. Key B is system wide and is used to decrypt the PICCData to access the tag scan count and UID. Currently, ixkio only allows one Key B per Flex API account. If you require multiple Key B, then discuss your requirements with us. Key B is *not* diversified and is used as-is to decrypt the PICCData.&#x20;

**Key C**\
Key C is a global system key. This is diversified using the tag UID to create a unique key which is then used to authenticate the CMAC code.&#x20;

## Using PICCData / Meta Authentication

The configuration and set-up of this method is straightforward and we have extensive experience at all levels. Contact us for more information and to get started.&#x20;


# Subtags in API Extended Data

This document explains how to include subtag data within Extended Data fields on an API request. This can be useful if you want to access data using subtags but do not want to include that data within the Ruleset Response.&#x20;

{% hint style="info" %}
All [Action Data](/features/meta-data/action-data) subtags are not available on the API as ixkio will not know the browser/IP/device of the user actually scanning the tag.&#x20;
{% endhint %}

### Step 1 : Create your Extended Data field

*<mark style="color:orange;">Active Folder > Folder Function Panel > Data Tab</mark>*

Create a new Extended Data field by entering a name for your field, selecting 'text' or 'JSON' and clicking 'Add'

<mark style="color:red;">NOTE :</mark> The JSON data type is currently in Beta and should only be used for the NFT metadata Subtag.

### Step 2 : Add the Extended Data field to the API response

*<mark style="color:orange;">Active Folder > Folder Function Panel > Response Tab</mark>*

Change the 'Response' option for your Data Name (as created in Step 1) to 'Add to Response'.&#x20;

### Step 3 :  Add the Subtag to the Extended Data response

*<mark style="color:orange;">Tag Group > Tag Group Data Panel > Extended Tab</mark>*

Under the Extended Data name you just created, enter your Subtag. For example, if you created a Data field called 'scancount', you can add {scount} to dynamically display the Tag Code Scan Count.&#x20;

The resulting API response would be :&#x20;

```json
{
	"xuid": "q8w3sbcz",
	"response": "Pass",
	"scancount": "123"
}
```

{% hint style="info" %}
It's not currently possible to add JSON to an Extended Data field to create more complex responses.&#x20;

We will be added JSON support in Extended Data later in 2026.&#x20;
{% endhint %}


