# Overview

## Introduction

**My Product Cares/Registration** enables customers to register products purchased from online store or in a physical shops, unlocking a host of benefits. By registering, customers can secure warranty coverage, gain access to dedicated support, and stay updated on exclusive offers and product announcements.

This streamlined process not only enhances the customer experience but also provides businesses with valuable insights into customer preferences and behavior, fostering stronger customer relationships and driving informed decision-making.

### Why Customers Should Register Their Products

* **Warranty Protection** - Enjoy peace of mind knowing your products are covered. If an issue arises, we’re here to make it right.
* **Dedicated Support** - Gain access to a wealth of resources and responsive email support to maximize your product experience.
* **Exclusive Offers & Updates** - Stay informed about special promotions, new product launches, and exciting feature announcements.

## Overview

The app is divided into two main components: a **customer-facing frontend** and an **admin-facing backend**.

![Overview](/files/-M4QrtzwAS27yPc3C-A1)

### [Frontend Page](/frontend-page)

The **frontend page** serves as the primary interface for customers, enabling them to register their products effortlessly while providing essential details. Key features include:

* **Effortless Product Registration/Claim**: A user-friendly process designed for quick and hassle-free product registration/claim.
* **Secure Serial Number Validation**: Ensures authenticity by validating product details such as name, serial number, and purchase date.
* **Warranty and Care Plans**: Offers customers additional protection and peace of mind through extended warranty options.
* **Third-Party Integrations**: Seamlessly integrates with services like Klaviyo, Mailchimp, Stripe, and Gorgias to enhance functionality and customer engagement.
* **Responsive Support**: Provides customers with timely and effective assistance to maximize their product experience.
* **Registrations/Claims management**: Customer will able to see their registered products and claims in one place.

### [Admin Panel](/admin)

### Admin Panel

The **admin panel** empowers administrators with robust tools to efficiently manage product registrations/claims and tailor the app to their needs. Key features include:

* **Automated Customer Communication**: Send personalized emails to customers after successful registration or filed claim, enhancing engagement and trust.
* **Product Serial Number Management**: Maintain a secure and organized database of product serial numbers for easy tracking and validation.
* **Customizable Registration/Claim Forms**: Create, edit, and manage multiple registration forms to suit diverse customer and product requirements.
* **Warranty plans**: Allow create different warranty plans that cover different products according to your needs.
* **Advanced Configuration Options**: Adjust app settings to align with business workflows and ensure a seamless user experience.

### Workflow

The app operates through a simple and efficient workflow:

1. **Customer File Registration/Claim**: Customers complete the registration/claim form on the shop's frontend page, providing product details, serial numbers, and other information.
2. **Data Processing**: The submitted information is securely transmitted to the app server, where it is processed.
   * A personalized thank-you email is sent to the customer, confirming their registration.
   * The shop admin receives a notification about the new registration, ensuring timely follow-up.
3. **Admin Management**: The admin panel allows the shop to manage registrations, monitor product data, and configure settings for a seamless experience.
4. **Customer Management**: The user will able to see their registered registrations or claims filed in the past, and check the status of the registrations/claims

This workflow ensures a smooth and user-friendly process for both customers and administrators.

### Additional Features

Beyond product registration, the app provides advanced capabilities to enhance both customer and business experiences:

* **Customizable Registration Forms**: Design multiple forms tailored to various purchase scenarios, ensuring flexibility and relevance.
* **Extended Warranty Plans**: Offer customers peace of mind with options for extended product protection.
* **Authenticity Verification**: Enable product authenticity checks using unique serial numbers, safeguarding against counterfeit products.
* **Comprehensive Documentation**: Access detailed guides and resources to maximize the app's potential and streamline its integration.
* **Analytics and Insights**: Gain valuable data on customer behavior and product trends to inform business strategies.


# Frontend Page

Default product registration form

This is the page customers see when they visit the Frontend page. The page is automatically created after the app is installed and is typically located at **/apps/product-registration**. Note: If the app proxy is manually changed, the address may differ (you can ignore this if it doesn't apply).

For example, if the shop URL is **mymart.shopify.com**, the registration page will be: **mymart.shopify.com/apps/product-registration**.

By default, this page displays the Product Registration Form. If additional forms are created, they will use the same path but with different query strings (you can find the frontend link for each form in the backend under **Form > View on Frontend**).

The form is divided into several sections, and all fields are fully customizable in the Form's admin settings.

## Introduction Text

This section contains an introduction text that highlights the benefits of product registration or any other information you'd like customers to see. By default, the app generates a generic text, but it can be customized in **App Admin > Forms > Form's Settings**.

![](/files/qrDAbyICmNXjXp6C3LEO)

## Customizable Fields

The fields in this section are fully customizable in the Form's Admin. However, the following fields are included by default to collect product information:

* **Product Name**: Includes an autocomplete feature, allowing customers to type keywords to search for products in the shop. Matching products are presented as selectable options. If a product is not available in the Shopify shop, the app will accept the product name provided by the customer.
* **Serial Number**
* **Purchase Date**

## Register Multiple Products

By default, the form allows customers to register multiple products in one submission. It lists all the products entered by the customer, providing clear visibility of what will be registered. Depending on the form settings, if it's a one-step form, only one product can be registered at a time.

![](/files/-M4QruPZ5nU2YGU9RPFJ)

## Customer Form

This section collects additional customer information, such as names, addresses, and phone numbers.


# Prefill form fields

Simplify customer interactions by pre-filling form fields.

Prefilling form fields enhances the customer experience by reducing manual input. You can achieve this by appending specific parameters to a URL and sharing it with the customer. When the customer accesses the URL, the form fields will automatically populate with the specified values.

## Using Query Strings to Prefill Fields

Query strings are added to the URL in the format of key-value pairs, separated by `&`. For example:

```
https://apple.myshopify.com/apps/product-registration?sn=123&purchaseDate=2023-08-08
```

In this URL, everything after the `?` is the query string. Each key-value pair represents a field and its value:

* **sn=123**: Prefills the serial number field.
* **purchaseDate=2023-08-08**: Prefills the purchase date field.

You can include multiple query strings by separating them with `&`.

### Example

The following URL prefills both the serial number and purchase date fields:

```
https://apple.myshopify.com/apps/product-registration?sn=123&purchaseDate=2023-08-08
```

## Prefilling the Product Field

The product field requires a product ID to match the product in Shopify. Use the following format:

```
product=product_id_12323
```

For example:

```
https://bigapple.myshopify.com/apps/product-registration?product=product_id_12323
```

To find the product ID:

1. Navigate to **Products** in the Shopify admin.
2. Open the product details.
3. Locate the product ID in the URL's last segment.

## Prefilling Other Fields

You can prefill any form field by identifying its name. To find the field name:

1. Go to **Forms** in the App admin.
2. Select the form.
3. Navigate to **Design**.
4. Click on the field.
5. Check the field name in the options panel on the right.

![](/files/zZtPZ1M4mDKTHP1c6EUG)

Once you have the field name, use the same query string pattern:

```
fieldName=value
```

### Example

To prefill the purchase date field:

```
https://apple.myshopify.com/apps/product-registration?purchaseDate=2023-08-08
```

## Formatting Guidelines

Ensure values are in the correct format. For example:

* Dates should follow the `YYYY-MM-DD` format.

Incorrect formats may prevent fields from being prefilled.

### Example

Correct: `purchaseDate=2023-08-08`\
Incorrect: `purchaseDate=08-08-2023`

## Testing the Prefill URL

Before sharing the URL with customers, test it to ensure it works as expected:

1. Copy the URL.
2. Open a new browser window or tab.
3. Paste the URL into the address bar and press Enter.
4. Verify that the form fields are correctly prefilled.

Testing ensures all query strings are properly formatted and functional.


# Registered entries

Display registered entries such as product registrations or claims.

When a customer logs in, the app displays registered entries, such as product registrations or claims, provided the customer has previously submitted product registration or claim forms.

If the customer is not logged in or has no registrations or claims, the registered entries will not be visible.

<img src="/files/d5GImKzrdgVR48TibRBe" alt="Registered Entries Screenshot" data-size="original">

The columns displayed in the registered entries correspond to the fields defined in the form.

### Customizing Registered Entry Columns

You can customize the columns to display only specific ones.

To do this:

1. Navigate to **App admin > Forms**.
2. Select the desired form.
3. Go to **Settings > General > Customize registered entry columns**.
4. Enable the feature and select the columns you want to display.

<img src="/files/1ar3N8bhjuE2HKUdeImZ" alt="Customize Columns Screenshot" data-size="original">

### Actions Column

The actions column allows customers to perform specific actions on a registered entry.

By default, if a form is configured for claims, a "Make a Claim" button will appear. This button opens the claim form with product information prefilled from the current entry.

To change the form linked to the "Make a Claim" button:

1. Go to **App admin > Forms**.
2. Select the desired form.
3. Navigate to **Settings > General > Frontend - registered listing**.
4. Configure the "Make a Claim" action to link to the desired form.

<img src="/files/P06BZUZRkcszlwJW2rVN" alt="Actions Column Screenshot" data-size="original">

It's also possible to have a Print action, that will print out the entry/registration in a pdf, but this function need to enable in the admin, see print entry for more detail.

#### Adding Extra Actions

You can add custom actions to the actions column, such as links to external URLs (e.g., lifetime warranty claims or other actions).

To add custom actions:

1. Go to **App admin > Forms**.
2. Select the desired form.
3. Navigate to **Settings > General > Custom actions**.
4. Add new actions as needed.

<img src="/files/tL53y7QvatPHPGCDx0qT" alt="Custom Actions Screenshot" data-size="original">

Once added, the extra actions will appear in the frontend registered entries.

<img src="/files/SCc5C4CFJb6TMfXN8r5Q" alt="Extra Actions Screenshot" data-size="original">

If you encounter any issues with this feature, please let us know.


# Fill product with serial number

Users can input a serial number on the frontend, and the system will automatically populate the product field with the corresponding product linked to that serial number.

## Setup

To make it work, follow these two steps:

1. **Upload/Add Serial Numbers**: Navigate to the App admin > Serial Numbers. For each serial number, enter the associated **SKU** of the product. Ensure that the product exists on Shopify with the specific SKU linked to the serial number.
2. **Enable Product Display on Serial Number Validation**: In the App admin, go to Forms > Select the form > Settings > General. Enable the option "Show product when validating a serial number".

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

Once the above setup is complete, you can test it on the frontend form. Navigate to the form and enter a serial number that has an associated SKU. The product information will be displayed, and the product field will be automatically prefilled.

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


# Claim Warranty

It is possible to provide a Claim Warranty page for customers. **Note:** This form is not enabled by default and must be created in the app admin.

Once the form is created, the URL for the Claim Warranty page will be:\
`/apps/product-registration?formSlug=claim-warranty`

The fields in the form are fully customizable. Refer to the [admin documentation](/admin/forms/claim-form) for instructions on setting up, listing, and managing warranty claims.

![Claim Warranty Form Example](/files/-M4QruBVPu19tqLjRuss)

**Example:**\
If the shop URL is `mymart.shopify.com`, the Claim Warranty page will be:\
`mymart.shopify.com/apps/product-registration?formSlug=claim-warranty`


# App Admin

The **App Admin** allows shop admins to manage registration forms or any additional **forms**, view all **registered products**, and access **customer information** for each registration. They can also view and change **settings** for the app.

The functionalities are divided into three parts: Forms, Serial Numbers, and Setttings.

## [Forms](/admin/forms)

The **Forms** page displays a list or table of all product registrations within the application.

## [Serial Numbers](/admin/serial-numbers)

The **Serial Numbers** page lists all serial numbers available in the system. You can view details of current numbers, add new numbers individually or via a CSV file, and delete numbers that are no longer needed.

## [Settings](/admin/settings)

The **Settings** page provides access to all general settings for the app, including plan and billing information. Admin users can manage user permissions and view shop data such as customer accounts, payments, and checkout information.


# Forms

The **Forms** page allows you to manage and edit existing forms, as well as create and customize new ones.

![](/files/51YXfJlnIab9ZcJu9n0f)

## Add new form

New forms can be created using either a **Custom Form** or a **Claim Form**.

* **Custom Form** - A flexible form that can be tailored to meet specific user requirements.
* **Claim Form** - A pre-configured form designed for claims, with fields that can be modified as needed.

To add a new form, follow these steps:

1. Navigate to the "Forms" section in the admin panel.
2. Click on the **New** button.
3. Select the type of form you want to create (New Form or New Claim Form).
4. Fill in the required details and customize the form as needed.
5. Save the form to make it available for use.

![](/files/W7UQuMGP0pvr7VgyGphT)


# Listing

## Overview

A **Product Registration** can contain multiple product entries. To view, select the **Form** to open the list of entries.

An example of form submission entries is displayed below.\
You can filter the entries by **product name, customer email, status, date range** by using the filter menu at the top of the page.

![](/files/aICosWwsfMPiY4AQNNVV)

### Form Actions

#### View Details

You can view the **Details** page for a specific registration. This page includes additional fields associated with the product and detailed customer information.

#### Change Status

You can change the status of a specific registration. When a customer completes registration, the status defaults to "Request." However, you can change it to other statuses such as "Confirmed" or "Processed" for internal bookkeeping.

![](/files/RBVdxWbhb2jBsax36Qf2)

#### Delete Registration

You can delete a specific registration entry from the list. This action is irreversible, so please ensure you want to delete the entry before proceeding.

#### Export as a CSV File

You can export the current registration table as a CSV file. The exported file will include additional fields associated with the product. You can also filter specific entries using the filter options in the table before exporting. To export, go to **Forms > Select the form > Settings > Migrate/Import/Export > Export**.


# Registration detail

Here are additional details for registration, related registrations, and customer information.

## Registration data

Registration data is associated with the registration and can be updated as needed.

### Statuses

The registration can have various statuses to indicate its current state. Here are the possible statuses:

* **Requested**: The registration has been submitted but has not yet been reviewed.
* **Processing**: The registration is currently under review.
* **Confirmed**: The registration process has been successfully completed.
* **Unqualified**: The registration has been cancelled by either the user or the admin.

Each status helps in tracking the progress and current state of the registration process.

## Customer data

### View and Update Customer Data

You can view and update the customer data associated with the registration. This includes linking the registration to a Shopify customer ID or modifying the existing association as needed.

#### Shopify Customer ID

If the customer is logged in to Shopify on the frontend and submits the form, the app will automatically associate the registration with that customer. This allows the admin to view the customer's entries in the app under **Customer admin > More actions**.

<figure><img src="/files/0yWF7mxqqr3cTQI6nWi2" alt=""><figcaption></figcaption></figure>

Clicking the above will display all the entries for that customer in the app.\
Here, you can enter a Shopify customer ID to associate it with the registration or change the association as needed by the admin.

#### How to Find the Shopify Customer ID

You can find the Shopify customer ID by navigating to the customer's profile in the Shopify admin panel. Once there, the customer ID will be displayed in the URL of the profile page. For example, if the URL is `https://yourstore.myshopify.com/admin/customers/1234567890`, the customer ID is `1234567890`.

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

> **Note:** It is not possible to have a popup box to search and select customers directly because Shopify does not provide this feature. Additionally, it would require handling more customer privacy information. Therefore, manually obtaining the customer ID is necessary.

## Related registrations/entries

There are different types of related registrations/entries. These can be found under the **Related Registrations** section by selecting **Show related registrations**.

![](/files/kXYgdt3aGBP3xKbgzNhW)

### Same serial number

The relationship is based on the serial number. For example, if two entries from different forms share the same serial number, those entries are considered related.

![](/files/uQFz9m7APtjUcgMdqurc)

### Submitted from the same form

For forms that allow the registration of multiple products (each registered product counts as one registration), entries are considered related if they are submitted from the same instance.

![](/files/nX8I8xWGHw6Ch9lYI778)

### Linked claim by user

Another way to relate two entries is through user action. On the frontend, when a customer is logged in, their registered entries will be displayed. If the customer clicks on "Make a claim" for a specific registration, it will open the claim form and mark the new claim with the specific registration.

![](/files/bvw0pWRZ34F84ulsvn8A)


# Print Entry/Registration

The Print Entry/Registration feature allows your customers to print registration documents directly from their account. This guide shows you how to enable and configure this feature for your forms.

## Requirements

**Both of these must be enabled for the print functionality to work:**

1. ✅ **"Show Print Entry on Registered Entries"** setting must be enabled in Form Settings → General section
2. ✅ **Print Layout must be created and saved** using the Puck editor

> ⚠️ **Important**: Customers will only see the Print button when BOTH requirements above are completed. The setting enables the button, but the layout must be saved first for the print functionality to work.

## Step 1: Enable Print Entry for Your Form

1. **Navigate to Form Settings**
   * Go to your admin dashboard
   * Select **Forms** from the main menu
   * Choose the form you want to enable printing for
   * Click on the **Settings** tab for that form
2. **Enable the Print Setting**
   * Find the **General** section in the form settings
   * Look for **"Show Print Entry on Registered Entries"**
   * Toggle this setting to **Enabled**
   * Save your form settings

## Step 2: Create Your Print Layout

1. **Access a Sample Registration**
   * Go to **Forms** from the main menu
   * Select your form from the list
   * Click on any existing entry/registration for that form
   * This will open the registration detail page
2. **Open Print Layout Editor**
   * On the registration detail page, look for the **Print** button in the top right corner
   * Click the **Print** button to open the Puck print layout editor
   * The editor will show a default layout with available customer data
3. **Customize Your Print Layout**
   * **Add Elements**: Drag and drop components like customer information, product details, serial numbers, custom fields, and company branding
   * **Arrange Layout**: Position elements where you want them to appear on the printed page
   * **Style Elements**: Adjust fonts, sizes, and spacing for optimal printing
   * **Preview**: Use the preview feature to see how the layout will look when printed

## Step 3: Save Your Print Layout

1. **Test Your Layout**
   * Use the preview function to see how your layout looks
   * Print a test page to verify formatting and spacing
   * Check that all important information is clearly visible
2. **Save the Configuration**
   * Once satisfied with your layout, click **Save Layout**
   * The system will store this layout as the default for all future print requests
   * You can return to edit this layout anytime by repeating Step 2

## Step 4: Verify Customer Experience

1. **Test the Frontend**
   * Visit your frontend registered entries page as a customer would
   * Locate the **Print** button in the actions column next to each entry
   * Click to ensure it opens correctly with your custom layout
2. **Inform Your Customers**
   * Let your customers know they can now print their registration details
   * Direct them to look for the Print button on their registered entries page


# Form Design

The **Warranty Claim** form can be easily customized to your needs using the **Add Fields** feature.

![](/files/ZykIMY9SumJFQkUm0ubg)

### Add Fields

The **Add Fields** section displays all available fields that can be added to the form. To add a field:

1. Browse through the list of available fields.
2. Drag and drop the desired field into the form design area.
3. Arrange the field in the desired position.
4. Configure the field settings as needed.
5. **Save** the form design to apply the changes.

### Customize Field Options

Each field in the form can have different options that can be customized to fit your specific needs. To customize a field's options:

1. Select the field you want to customize from the form design area.
2. Access the field's settings by clicking on the settings icon.
3. Modify the available options according to your requirements. This may include setting default values, adding placeholder text, or configuring validation rules.
4. Preview the form to ensure the options are correctly applied.
5. **Save** the form design to apply the changes.

By customizing the field options, you can ensure that the form collects the necessary information in the desired format.

### Email Field

Ensure there is an **Email field** in the form. This is necessary to send a confirmation email to the customer.

1. Drag and drop the **Email** field from the available fields list.
2. Place it in the desired position within the form.
3. Configure the field to ensure it is marked as required.
4. **Save** the form design.

![](/files/obPl20odtvY71pV4fEBF)

### Category Field

The **Category** field allows users to select a category or collection, enabling them to choose a product from the selected category or collection.

1. Add the **Category** field to the form design area.
2. Configure the field to specify which collections users can select from.
3. Place the field in the desired position within the form.
4. Preview the form to ensure the field is functioning correctly.
5. Test the form to verify the selection process.
6. **Save** the form design to apply the changes.

By using the **Category** field, you can streamline the product selection process for users, ensuring they can easily find and select products from the appropriate categories or collections.

![](/files/obPl20odtvY71pV4fEBF)

**Note**: Collections must be created in the Shopify admin. For more information, refer to the [Shopify documentation on creating collections](https://help.shopify.com/en/manual/products/collections).


# Form Settings

The following is a list of available form settings.To locate the settings, go to **App admin > Forms > Select the form > Settings**.

### General Settings

General settings associated with the specific form include:

* **Serial Number Validation**: Ensure the serial number entered is valid.
* **Default Status**: Set the default status for new submissions.
* **Product Search**: Enable or disable product search functionality.

### Introduction Text

This is the introduction text for the form as seen on the [frontend page](/frontend-page).

### Emails Templates

By default, when a user submits a form, two emails are sent:

* **Confirmation Email**: Sent to the user to confirm their submission.
* **Notification Email**: Sent to the store admin to notify them of the new submission.

This feature can be disabled in the **customer email** section of the settings.

The content of the emails is fully customizable. For more information on how to customize email templates, see [Email Templates](#emails-templates).

### Klaviyo Integration

To enable Klaviyo integration, ensure it is enabled in the app settings and enter the API key.

The Klaviyo integration allows you to select which list in Klaviyo the new submissions will be sent to.

### Export as CSV File

You can export the current registration table as a CSV file. The exported file will include additional fields associated with the product. It is also possible to filter specific entries using the filter options available in the table. To export, go to **Forms > Select the form > Settings > Migrate/Import/Export > Export**.

### Import Entries/Registrations

See [Import/Migrate Registrations](#import-entriesregistrations) for more details on how to import or migrate registration entries.


# Limit product search to specific products

In some cases, you may prefer to limit customers to certain products when they are filling out the form. This can be enabled by completing the following steps.

### Step #1 - Identify and create a product collection for the allowed products

First, determine which products customers are allowed to register, then create a **Product Collection** in the Shopify admin that contains those products.\
Go to **Shopify admin** > **Products** > **Collections** > **Create collection**. You can either manually add the products to this collection or use a smart collection to automatically select the products.\
(Note the **collection name**, you will need that in a later step.)

### Step #2 - Ensure the form's design includes a **Product field**

Go to the **App admin** > **Forms** > Select the form > **Design**. Ensure there is a Product field in the design. If it is missing,select Product in the **Add Fields** section and input the product into the text field.

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

### Step #3 - Enable the limit product search function in the form settings

Once the above steps are done, go to **App admin** > **Forms** > **Settings** > **General** > **Limit product search > Enable**.

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

### Step #4 - **Save the Collection**

After selecting the collection, click **Add** to confirm it. Then, save the settings to ensure the changes take effect. This will restrict the product search to the specified collection.

Optionally, you can enable **Use dropdown on product search**. This will convert the product field into a dropdown menu, allowing customers to easily select a product from the collection.

Finally, test the form on the frontend to ensure it functions as expected.


# Auto registration on new order

Automatically register the products purchased by customers after they complete the checkout process, eliminating the need for manual product registration.

## Overview

When a customer completes the checkout (e.g., pays for the products), Shopify will send the order content to the **My Product Cares** app. The app can then review the ordered products and automatically register them if the form's settings have auto registration enabled.

### Enable auto registration

The auto registration is form-specific, so you will have to set it for each form. Enable it in the **My Product Cares** app by going to **Forms > Open a form -> Settings > General > Automatically register products after order completed > Enable > Save**.

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

### Limit auto registration

By default, when auto registration is enabled, it will register all the products that the customer bought. However, it is possible to limit the registration to specific products.

You can limit the registration by SKU or product tags. For example, you can add a "product registration" tag to the products you want to allow for registration.

From the same **Settings** page (as mentioned in the previous step), enter the New entry and select **Add**. Complete this step for each product and remember to **Save** when complete.

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

### Test

Please test the auto registration feature after enabling it to ensure everything is working correctly. For example, you can create a new order in the admin or go through the checkout process as a customer.


# Claim Warranty Form

The claim form allows customers to claim warranty for their products. This form ensures that all necessary information is collected to process the warranty claim smoothly.

## How to enable it

Go to **Forms > New > Form type > Claim > Add New Form**. Once the form is created, it will function like a standard form but with default settings and fields.

![](/files/W7UQuMGP0pvr7VgyGphT)

## Frontend claims form

The below image is what the customer sees on the Claims admin page, or it can be accessed using the following URL: **/apps/product-registration?form=claim-warranty**. Here is what it looks like without any configuration. Refer to the Claims admin documentation for instructions on how to customize the form.

![](/files/-M4QruBVPu19tqLjRuss)


# Export and Import form

Use these steps to move a form’s configuration between shops or back up/restore a form.

#### Export a form

* Go to App admin > Forms → click a form → Settings.
* Click the secondary action “Export the form”.
* A file like your-form-slug-form-export-YYYY-MM-DD.json will download.

#### Import a form

* Go to Forms.
* Click New → Import form.
* Select the exported .json file and click Import.
* On success, you’ll see a confirmation and the Forms list will refresh. Errors will be shown in the modal.

#### Notes and limitations

* Import will validate the file and either create/update the form or show an error.
* If the target shop doesn’t have matching integrations (e.g., missing Klaviyo/Mailchimp setup), import may succeed with warnings or fail; set up integrations first and retry.
* Export files are JSON text and generally small; keep them safe if they contain business-sensitive configuration.

#### Troubleshooting

* “Authorization” errors: refresh and try again (your session may have expired).
* “Invalid file” errors: ensure you selected a .json file generated by this app’s Export feature.
* Integration errors: configure required integrations in App Settings and retry.
* If issues persist, contact support with the exact error message.


# Serial Numbers

Serial numbers are unique identifiers for specific products purchased by customers. For example, every customer who buys a 2017 Mercedes C200 sport car will receive a unique number that identifies their specific vehicle. It is crucial to handle and validate these serial numbers to ensure they are from genuine customers.

![](/files/-M4Qrx_m44iAxURMx2xT)

## Serial number overview

### Serial number

The serial number is a unique identifier for the product - for example, QWERTY-123456.

### SKU (optional)

The SKU is the generic identifier for the product - e.g., an iPhone 8 might have the SKU APPIPHONE8-2.

### Customer Tags (optional)

The tags apply to the customer who registers with a specific serial number. For example, a customer who bought an iPhone 8 with the serial number QWERTY-123456 can be tagged as 'new, vip'. This is for convenience in customer management and requires enabling the setting for it to work.

### Actions

There are actions available for each serial number entry. It is possible to update the serial number, SKU, and customer tags, as well as delete the entry.

## How to add new serial numbers

New serial numbers can be added using a CSV file for bulk import. If there are only a handful of entries, it is easier and faster to enter them directly in the app admin, as shown at the bottom of the screenshot above.

### How to upload serial numbers by CSV file

If there are multiple serial numbers to upload, it is recommended to use the **Upload CSV** feature. The process is simple and requires a CSV file with the following format:

\| **serialNumber** | sku | customerTags |

\| SN12345678 | MERC | new,vip |

\| SN12345678 | VOLVO | new |

**The heading have to be the exact wording, only serialNumber is required -**

**serialNumber**: Number or string - required

**sku**: Number or string - \[optional]

**customerTags**: Number or string, multiple tags are separated by comma - \[optional]

### [Sample CSV](https://s3-eu-west-1.amazonaws.com/product-registration/Product+registration+serial+number+csv+-+MPR.csv)

### Validation

Once the serial numbers are imported into the app, you can validate the serial numbers entered by customers against the imported data. This feature is optional and requires enabling the setting in the admin panel.

![Serial Number Validation](/files/-M4Qrx_ouMopdLfE-fF-)

To enable serial number validation, navigate to the Settings in the admin panel and turn on the serial number validation option. This ensures that customers can only register with valid serial numbers.

Additionally, you can enable customer tags in the settings. This feature allows tagging customers with specific tags based on the serial number they enter.


# Serial number with file download

In some cases, it may be helpful to tie a serial number with a file download. For example, you may want customers who register with specific serial numbers to have access to their product's instruction manual PDF after registration. This can enhance the customer experience by providing immediate access to important documents.

## Setup

First, you will need to prepare the serial number CSV but with an extra column called **data**.

{% embed url="<https://doc.product-reg.varify.xyz/admin/serial-numbers#upload-serial-numbers-in-csv>" %}

The new CSV will have the following format.

|**serialNumber** | sku | customerTags | data\_download\_Manual |

\| SN12345678 | MERC | new,vip | <https://example.com/merc\\_manual.pdf> |

\| SN12345678 | VOLVO | new | <https://example.com/volvo\\_manual.pdf> |

The `data_download_Manual` column should contain the URL link to the PDF file itself. The text **Manual** will be displayed as the link name on the frontend.

{% file src="/files/-MhIAypoXSTpC9DABIZF" %}
Sample Serial Number CSV with file download link
{% endfile %}

Once the serial number CSV is uploaded to the app, you will need to enable the display of serial number data on the frontend. To do this, navigate to **App admin > App Settings > General** and enable the option **Show registered serial numbers data for registered products**. Finally, click **Save Settings** at the bottom.

![](/files/-MhIBXTKzdivCX7_32RB)

When customers register with a specific serial number, they will see the download link in their registered products. By default, registered products are displayed on the registration page if the customer is logged in and has registered products. Alternatively, registered products can be shown on the account page. For more details, please refer to the [Registration in Account](/admin/registration-in-account) documentation.


# Warranty / Care Plans

Manage extended warranty and care plans that customers can purchase for additional protection and coverage beyond the standard warranty.

## Overview

**Warranty or Care Plans** are additional protection plans that can be offered to your customers during the **Cart** or **Product** page. These plans are similar to Apple Care+ offered by Apple. When purchased, they extend the warranty for the customer's product.

Customers need to pay extra for the warranty plan created here. This is different from the free or mandatory warranty provided by the government (e.g., in the European Union, all electric appliances are required to have a 2-year warranty). **For setting up free or mandatory warranties, please check our documentation at** [**warranty.md**](/admin/warranty). If there is a free or mandatory warranty set up for a product and the customer also purchases the warranty plan, the product will receive an extended warranty.

### Goal

After setting up the warranty plan, the following will be achieved:

* When a customer buys Product A along with a warranty/care plan, Product A will be automatically registered and receive the configured warranty period.
* If a customer purchases a warranty/care plan, it will automatically and retrospectively apply the warranty to their existing registrations based on the specified criteria and grace period.
* If a customer buys a warranty/care plan and registers a product a few days later, the product will receive the extended warranty from the warranty/care plan.

### Requirements

To ensure the warranty plan works correctly, complete the following steps:

1. [Create a warranty/care product](/admin/warranty-care-plans/create-a-warrant-plan-product) - This involves setting up a regular product, allowing you to control the price, product name, descriptions, etc.
2. [Set up auto registration for products](/admin/forms/form-settings/auto-registration-on-new-order) - Setting up auto registration enables the app to automatically register products when a new order is placed.

**Note: make sure these requirements are set up before creating a new warranty plan.**

### How to create a new warranty plan

To create a new warranty plan, follow these steps:

1. Navigate to **App admin**.
2. Go to **Warranty / Care Plans**.
3. Click on **Create warranty plan**.

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

4. The warranty plan form will display. This is the warranty plan product that will be sold to the customer.
5. Select the products that this warranty plan will cover. Then select **Continue**.

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

6. Set the **Configure Warranty Plan** settings to the desired duration, usage, status, and grace period.
   * **Warranty Duration** - The number of months the warranty plan is good for.
   * **Usage limit per customer** - The maximum number of times a customer can use the warranty for eligible products.
   * **Status** - Set to **Active** or **Inactive**
   * **Grace period** - The number of days to retroactively apply the warranty plan to previously registered products. Set to 0 to disable.

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

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

7. Once all fields are completed, select **Create Warranty Plan** to finish.

### Warranty / Care plans listing

Once the warranty plan is created, you will be able to see it listed under **Warranty / Care Plans**.

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

### Warranty plan detail

After the warranty plan is created, you can view all customers who purchased the warranty plan along with their order information. Additionally, you can see the registrations to which the warranty plan has been applied.

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


# Create a warrant plan product

The warranty product plan is a standard product offered to customers, enabling them to purchase a warranty or care plan for added protection and peace of mind.

The warranty product plan is a regular product that will be sold to customers. Setting this up allows customers to pay for a warranty or care plan.

## How to create a new warranty plan

To create a new warranty plan,

1. Go to **Shopify admin > Products > Add Product**.

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

2. Fill in the name, description, images, etc.,
3. Set the price and availability.
4. For more complex scenarios, it is possible to set up options for different durations, e.g., a warranty for 2, 3, or 5 years.

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

5. Make sure the product status is **Active** and the sales channel is set to **Online Store** or any other channel where customers can make purchases.


# Cross-selling warranty / care plan

Once the warranty or care plan product is created, it must be made visible to customers so they can easily purchase it. This enables you to cross-sell it just like any other regular product.

## Overview

Once the warranty or care plan product is created, it needs to be visible to customers so they can easily purchase it. This allows you to cross-sell it just like any regular product.

### How to add the warranty/care product plan to the cart page

One of the most common places to cross-sell a warranty or care plan is on the **cart page**. When customers are on the cart page, they have the opportunity to add a warranty or care plan product that provides extra warranty or benefits for the products in their cart.

To add the product to the cart page:

1. Go to **Shopify online store > Customize the current theme**.
2. Select **Cart** from the dropdown.
3. Click on **Add section** and choose **Featured product**.
4. Select the Care/Warranty product.
5. Adjust the settings as desired, then select **Save** to publish it.

#### Using app block

The app provide a native app block that allow you to have warranty plan selection for applicable products for that plan right in the cart

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

To get the above cart, you will need to go to Shopify admin > Online Store > Select the theme > Customize > Go to cart page > Add a new section > App block > Cart with Warranty Plans

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

Once the Cart with Warranty plans is added to the cart page, there will be two carts, so you will need to **hide the original one come with the theme.**

**Unfortunately, due to the complexity of having warranty plans selections, its not possible to use the cart come with the theme, it will have to be the cart block from the app.**

The carts will add drop down for warranty plans selections for the applicable products setup in the Warranty plans from the app

#### Alternatively simply add the products to the cart

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

### Add warranty/care plan product to the product page

Another way to cross-sell a warranty or care plan is by adding it to the **product detail page**. To do this, follow these steps:

1. Go to **Shopify online store > Customize the current theme**.
2. Select **Products** from the dropdown.
3. Click on **Add section** and choose **Featured product**.
4. Select the Care/Warranty product.
5. Adjust the settings as desired, then select **Save** to publish it.

This ensures that customers can see and purchase the warranty or care plan directly from the product detail page.

**Note**: It is good practice to test the functionality after adding the warranty products to the cart or product detail page to ensure they are displayed correctly and can be purchased without issues.


# App Settings

The **App Settings** page is where users can view and change settings for the app. The settings types include **General**, **Statuses**, **Integrations**, and **Languages**.

![](/files/sCcfXQwZYuybobrhOKOc)

## Settings Overview

### General Settings

**General Settings** is where users can view or update settings related to the app's behavior. This includes options for email notifications, default country, timezone, date format, and more.

### **Statuses**

The **Statuses** setting is where form statuses are managed. Users can view and edit the default statuses (Processing, Confirmed, and Unqualified). To create a new status, select **Statuses > Add Status**.

### Integrations

The **Integrations** setting is where connections to other apps and services are managed. Users can configure and maintain integrations with various third-party applications to enhance the app's functionality.

### Languages

The **Languages** setting allows users to manage the languages available in the app. Users can customize the app by enabling multiple languages if supported. If no additional languages are configured, the app will default to English.


# General Settings

An overview of the **General Settings** page. To view, go to **App Admin > App Settings > General**.

## Settings for App Behavior

### Admin/Notification Email

By default, a notification email is sent to the shop admin on new product registration. This is the email address where notifications for form submissions, export registrations, etc., will be sent.

### Default Country

The default country in the customer address form when customers fill in their address on the frontend.

### Find Serial Number Intro

Text for the "Find Serial Number" page.

### API Access Token

More details can be found in the [API](/advance/api) documentation.

### Custom CSS

By default, the app will inherit the styling from the site's theme. If the default styling is not satisfactory, custom CSS/styling code can be added here to improve the appearance.


# Custom From Email

The app dispatch emails. These emails are sent to customers and administrators upon new registrations. By default, the "from" email address is set to [**mailer@varify.xyz**](mailto:mailer@varify.xyz) which does have its limits.

For better branding and trust, it is recommended that customers configure a custom "from" email address using an email from their own domain.

The app allows to setup **SMTP** - Use your own email server or third-party SMTP service to send out emails.

## Benefits of Using Your Own SMTP

* **Custom "From" Address**: Send emails from your own domain (e.g., <notifications@yourcompany.com>)
* **Better Deliverability**: Emails sent from your domain are more likely to reach recipients' inboxes
* **Brand Consistency**: Maintain your brand identity in all communications
* **Control**: Manage your own email sending limits and configurations
* **Cost-Effective**: Many SMTP providers offer generous free tiers or affordable plans

## Setting Up SMTP

1. Navigate to \*\*Admin > Apps > My Product Registrations > App Settings > Integrations > SMTP settings
2. Fill out the information
3. Save the SMTP settings

The required fields:

* **From Email**: The email address you want to send from (e.g., <notifications@yourdomain.com>)
* **From Name**: The display name recipients will see (e.g., "Your Company Notifications")
* **Host**: Your SMTP server address (e.g., smtp.yourcompany.com, smtp.mailgun.org)
* **Port**:
  * Use 465 for SSL/TLS (recommended)
  * Use 587 for STARTTLS
* **Authentication**:
  * Username: Your SMTP username
  * Password: Your SMTP password or app-specific password

### Test

Once the setting is setup and save, please do a live test registrations to test the from email and make sure its working correctly.


# Languages

The app supports four languages: **English, Spanish, French, and German**. By default, English is used if the shop/store does not have multiple languages enabled.

## Frontend language string

The app will use the English language unless otherwise specified. For example, if a customer selects Spanish at the frontend, the app will use the Spanish language. If the customer selects a language not supported by the app, it will default to English.

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

The languages set will not change the text within the form fields (e.g., "Product Name" in the field will remain the same as the form field title). It will only affect the frontend system languages, such as registered entries and button labels.

## Multiple languages overview

It is possible to have multiple languages for forms by creating multiple forms, each tailored to a specific language. For example, there will be an English form for English and a French form for French. Each form's fields can be customized with different languages for the field titles/labels.

Here is an example of how the app determines the form for a specific (Spanish) language:

1. Request the language type from the user/customer. If the customer uses the language selector to choose a language, it will send that language to the app.
2. Check if the multiple language form feature is enabled. If not enabled, use the default form.
3. If the requested language is not English and the multiple language form feature is enabled, the app will attempt to find a form with the slug format `[original-form-slug]-[language-code]`. For example, if the user requests the product registration form in Spanish, the app will look for a form with the slug `product-registration-es`.
4. If a form with the slug `product-registration-es` exists, it will serve that form. Otherwise, it will default back to the original `product-registration` form.

### How to set multiple languages for forms

To customize and enable multiple languages, complete the following steps.

#### Step #1 - Enable multiple language forms

Enable the multiple languages form in the **App settings > General > Multiple language forms > Enable > Save**.

#### Step #2 - Create a form for specific language

The form must follow this rule: for a multiple language form, the form slug should be the original form slug name followed by the language code.

For example, if you want to add Spanish to the product registration form (which has the slug **product-registration**), you need to create a new form named **Product Registration ES**. This will create a new form with the slug **product-registration-es**.

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

Alternatively, it is possible to duplicate the original form and rename it. To do this, navigate to **Forms > Product Registration > Settings** and select **Duplicate the form**.

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

#### Step #3 - Design the new form

Once the new form is created, navigate to the form's design settings and update the field titles/labels to the desired language.

#### Step #4 - Test it

Go to the frontend at `/apps/product-registration`, change the language to Spanish, and verify if the Spanish form is loaded correctly.


# Email Templates

The app will send out emails whenever there are new registrations or status changes.

These emails can be customized using the template editor, and different data are available for different templates.

The data in the template is dynamic, so it must be in the following form:

```
{{ data }}
```

### Emails after form submission

Usually, one email is sent to the customer for confirmation, and another is sent to the admin for notification when a form is submitted.

The ***\[registered-products]*** placeholder in these emails will be replaced by the actual registered products or form content.

Here are additional data fields available for the email template:

```
Timestamp when form submitted: {{ now }}
customer first name: {{ customer.firstName }}
customer surname: {{ customer.surname }}
customer email: {{ customer.email }}
customer address 1: {{ customer.address1 }}
customer address 2: {{ customer.address2 }}
customer city: {{ customer.city }}
customer state: {{ customer.state }}
customer country: {{ customer.country }}
customer post code: {{ customer.postCode }}
customer phone: {{ customer.phone }}
ids of the registration: {{ ids }}
```

**Note**: The placeholder `{{ ids }}` will output all the IDs if the form allows adding multiple products. If it's a single-entry form, it will output the ID of that entry.

### Emails for status change

By default, when a status changes, no email will be sent out **unless there is content inside the status's email template**.

The following data fields are available for the email template:

#### Status related

```
Note: {{ note }}
Status: {{ status }}
```

#### Generic data that related to the registration for the status change

```
Customer name: {{ reg.customerName }}
Customer email: {{ reg.customerEmail }}
Product id: {{ reg.productId }}
Product name: {{ reg.productName }}
Purchase date: {{ reg.purchaseDate }}
Serial Numbers: {{ reg.serialNumbers }}
Source : {{ reg.source }}
Order id: {{ reg.orderId }}
Order number: {{ reg.orderNumber }}
Warranty: {{ reg.warranty }}
Warranty start date: {{ reg.warrantyStartDate }}
Warranty end date: {{ reg.warrantyEndDate }}
Last service date: {{ reg.lastServiceDate }}
Created at: {{ reg.createdAt }}
```

#### Related entries

When a registration has related entries (e.g., a warranty claim linked to a product registration), you can access them through `relatedEntriesByType`. This groups related entries by their form type so you can display them separately.

The data is structured as:

```
relatedEntriesByType: [
  {
    type: 'registration' (or 'claim', etc.),
    entries: [
      { same fields as {{ reg }} above },
      ...
    ]
  },
  ...
]
```

Example usage in a status email template:

```html
{% if relatedEntriesByType %}
  <h3>Related Entries</h3>
  {% for group in relatedEntriesByType %}
    <h4>{{ group.type }}</h4>
    {% for entry in group.entries %}
      <p>
        ID: {{ entry.id }}<br/>
        Product: {{ entry.productName }}<br/>
        Serial Numbers: {{ entry.serialNumbers }}<br/>
        Purchase Date: {{ entry.purchaseDate }}<br/>
        Warranty End Date: {{ entry.warrantyEndDate }}
      </p>
    {% endfor %}
  {% endfor %}
{% endif %}
```

Each entry in the `entries` array contains the same fields as `{{ reg }}` (product name, serial numbers, purchase date, warranty dates, etc.).

**Note**: `relatedEntriesByType` will be empty if the registration has no related entries.


# Warranty

Adding warranty information for each product allows customers to easily view the expiration date of their warranty after completing the product registration process. This feature enhances transparency

## How to set up the product warranty period

### Warranty period using tags

Each product can have a different warranty period, which needs to be set up at the product level using **product tags**. Using tags will apply the warranty period to all variants of the product.

To set this up, follow these steps:

1. Open the Shopify admin.
2. Navigate to **Products**.
3. Select the product you want to add a warranty period to.
4. Add new tags to the product to indicate the warranty period.

![product with warranty period tag](/files/-MfHXuZwEoAysAnWu_8z)

The tags should be in the format **warranty:{duration}**, where **duration** consists of a number and a unit (e.g., **1 year**).

Example tags:

* warranty:1 year
* warranty:2 years
* warranty:6 months

![product with warranty period tag](/files/-MfHXuZwEoAysAnWu_8z)

### Warranty period for specific product variant

It's possible to set up specific warranties for different variants. For example, if you have a bed product, the different sizes will be variants. A 2-meter bed can have a 2-year warranty, while a 1.5-meter bed can have a 1-year warranty.

To set the warranty period for a specific variant, you need to use a metafield.

**Create a new metafield for product variants in the Shopify admin > Settings > Custom Data > Variant > Add new definition/metafield**

1. The name must be **warranty** (all lowercase).
2. The type should be Single line text.

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

You can preset choices for the warranty period, such as 1 year, 2 years, and 3 years. This will simplify assigning values later.

Once the variant metafield is set, navigate to the product variant and assign the appropriate metafield value.

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

The value for the warranty should match the format used in the tag section, such as **1 year** or **6 months**.

### Show warranty info

Once the product is set up with a warranty period and the customer registers that product, the warranty expiration date will be calculated based on **registration date + warranty period**.

To allow customers to see the warranty expiration date, you need to enable this feature in the App admin:

1. Go to **App Settings**.
2. Navigate to **General**.
3. Enable **Show customer warranty**.

This will display the warranty expiration date to the customer.

![](/files/-MfHZoSRKApEvj9o3ZGm)\
Once it's enabled, **Save settings**.

After the setting is enabled, the customer can see the warranty information in the frontend under **Registered Products**.

![Customer's view of warranty](/files/-MfHadfW6E8NxdLnhn7M)

### Customizing Warranty Wording

You can change the wording for warranty information in the App admin. To do this, follow these steps:

1. Go to **Settings**.
2. Navigate to **Languages**.
3. Search for the term **warranty**.
4. Modify the wording as needed.
5. Don't forget to **Save** your changes.

This allows you to customize how warranty information is presented to your customers.

### Show warranty info when filling the form

It's possible to show the warranty information while the customer is filling out the form. To enable this feature, follow these steps:

1. Go to **App admin**.
2. Navigate to **Forms**.
3. Select the form you want to modify.
4. Go to **Settings** > **General**.
5. Enable **Show warranty info**.

This will display the warranty information to the customer during the form-filling process.

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

Once the product has a warranty tag and the feature is **enabled**, the warranty information will be displayed on the form when the customer selects the product during the form-filling process.

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

### Extended warranty

### Extended Warranty

It's possible to set up an extended warranty if the customer registers their product within a specified number of days after the purchase date.

First, set up the normal warranty as described above. Then, enable the extended warranty settings in the App admin:

1. Go to **Forms**.
2. Select the form you want to modify.
3. Navigate to **Settings** > **General**.
4. Enable **Extended warranty**.
5. Select the period and date for the extended warranty.

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

Once enabled, the app will automatically calculate the date and add the extended warranty.

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

Once enabled, the app will automatically calculate the extended warranty period and update the warranty expiration date accordingly.


# Navigation

## How to Add a Product Registration Link to Shop's Navigation

1. Go to **Shop Admin > Online Store > Navigation**.
2. Select **Main Menus** (or the equivalent name for the shop if it has been changed).

![](/files/-M4QrwbBfYAqK3LMPkES)

3. Add a **new menu item** to your navigation:
   * For the link, select **web address**.
   * Set the link to **/apps/product-registration**.

![](/files/-M4QrwbFAdnrYCHvrSRy)

4. The **Product Registration** link will appear in the shop's navigation menu.

![](/files/-M4QrwbHV3AznFJslKar)


# Customer Admin Link

As part of deep integration, it is possible to view each customer's product registration in the customer admin. Simply click the link under "More Actions."

![](/files/-M4QrvNhGsbVhF_yqXl9)


# Registrations In Account Area

## New Customer Accounts

The "New Customer Accounts" experience provides a passwordless login for your customers. They log in using a 6-digit verification code sent to their email, eliminating the need to remember passwords.

### Setup Instructions for Merchants

To enable the product registration features in the new customer accounts, you need to add the app extensions via the Shopify Admin.

1. Navigate to **Settings > Customer accounts** in your Shopify Admin.
2. In the **New customer accounts** section, click **Manage**, then click **Customize** (or use the Online theme > Customizer > Checkout and Customer account).
   * *Note: This opens the Checkout and Accounts Editor.*

#### Step 1: Add "My Product Cares" Page (Full Page Extension)

This creates a dedicated page for customers to view and manage all their registrations.

1. In the editor sidebar, click the **Apps** icon (grid icon).
2. Click the **(+)** button next to **"My Product Cares" (Full Page)**.
3. Select **Add page to Accounts**.
4. **Important:** To make this page accessible, go to **Content > Menus** in your Shopify Admin and add the new "My Product Cares" page to your **Customer account menu**.

#### Step 2: Add Order History Block

This adds a quick "View Registrations" button to the customer's order list which link to the Full page.

1. In the editor, use the page selector at the top center to switch to **Order index**.
2. In the **Sections** sidebar, click **(+) Add block**.
3. Select **"Registrations Block"** from the list.
4. **Save** your changes.

![](/files/iaUeS8sdPfEZ225HyTsv)

### Customer Features

Once set up, your customers can access their registrations by:

1. Logging into their account (via email code).
2. Clicking **"My Product Cares"** in the navigation menu, OR
3. Clicking the **"View Registrations"** button on their Order History page.

On the "My Product Cares" page, customers can:

* View the status of their registrations (e.g., Active, Pending).
* Make a warranty claim (if enabled).
* Remove a registration.

***

## Legacy Customer Accounts (classic)

For logged-in customers, it is possible to show their registered products in the account area or any other suitable location. This requires some knowledge of the shop's theme and the ability to make changes to the theme's HTML.

Here are the steps for adding product registrations to the account area:

1. Go to **Shop Admin > Online Store > Themes**.
2. Select **Edit HTML/CSS** from the top right corner.

![](/files/-M4QrswzHrzpVwRSDCPc)

1. Locate the template where the registration should be added (e.g., `customers/account.liquid` - This is the same account page that shows order history).

![](/files/-M4Qrsx0i76RhUjbnPYl)

1. Place the following code into the appropriate location. Ensure it does not break the HTML structure. It is recommended to place it after a closing tag.

```
<div id="mpr-root"></div>
<script type="text/javascript">
window.productReg = {
        // defaultFormSlug: "product-registration",
        // registeredEntriesToShow: ['product-registration'],
        // mode: "normal",
        // openRegisteredEntities: true,
        makeClaimUrlPrefix: "/apps/product-registration",
        customer: {
                id: {{ customer.id | json }},
                email: {{ customer.email | json }},
                address: {{ customer.default_address | json }},
                tags: {{ customer.tags | json }},
         }
}
</script>
<script type="text/javascript" src="https://product-reg.varify.xyz/v2/mpr-embeded-frontend.js"></script>
```

1. **Save** the changes and verify them on the frontend.
2. Ensure that the product registration section appears correctly in the account area and that it does not interfere with other elements on the page. If any issues arise, review the HTML structure and the placement of the code snippet to ensure it is correctly integrated.

**Note**: The above code will display the default form, which is "Product Registration". You can change the default form by navigating to **App Settings > General > Default Form**.

**Alternatively, you can uncomment (i.e., remove the `//` in the line `// defaultFormSlug: 'product-registration'` in the above code) and change `product-registration` to the desired form slug. The form slug can be found by navigating to the form in the Admin area and clicking "View on frontend." This will open a new tab with a URL similar to `apps/product-registration?form=product-registration`. In this example, `product-registration` is the form slug. If your form slug is different, replace `product-registration` with the appropriate slug.**

The **registeredEntriesToShow** variable allows you to specify which forms' registered entries should be displayed. This is useful if you have multiple forms and only want to show entries for a specific form. For example, if you have 10 forms and only want to show registered entries for the "product-registration" form, you can set **registeredEntriesToShow** to `['product-registration']`.

The **makeClaimUrlPrefix** variable defines the base URL for the form. By default, it is set to `/apps/product-registration`. If you have changed the app proxy URL in the app configuration, you will need to update this variable to reflect the new URL.

### App Modes

In the above code, there is a setting for different modes that control how the app behaves. The available modes are:

* **normal** - Displays both the form and registered entries. Users need to be logged in and have registered entries to see this.
* **form** - Displays only the form.
* **registered** - Displays only the registered entries.

Adjust the mode in the above code for different effects. For example, when in the account area, you might want to use the **registered** mode to show only the registered entries without the form.


# Form inside Shopify Page

Embedding Forms in Shopify Pages

### Overview

You can embed forms on any [Shopify page](https://help.shopify.com/en/manual/online-store/themes/theme-structure/pages). By using a page, you can customize the URL, so it doesn't have to be `/apps/product-registration`. For more details on customizing the URL and other settings, refer to the [Shopify page documentation](https://help.shopify.com/en/manual/online-store/themes/theme-structure/pages).

To embed the form inside a page, simply add the form block to the page using the theme's customizer.

> **Note:** If the page template is shared between different pages, the form will be added to all pages using that template. To add the form to a new page, you will need to create a new template using the instructions below.

1. Go to **Shopify admin > Online Store > Themes > Customize**

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

2. On the customize page, add a section or block to the page where you want the form to appear.

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

#### How to create a new page template for the form

The above method will add the form block to the page template, but this might not be ideal if the template is shared between multiple pages, as the form will appear on all those pages.

To ensure the form appears only on a specific page, you should create a new page template specifically for the form. This way, the form will be isolated to that single page.

To create a new page template, follow these steps:

1. Go to **Shopify admin > Online Store > Themes > Customize**.
2. In the theme editor, click on the **Actions** dropdown and select **Edit code**.
3. Under the **Templates** section, click **Add a new template**.
4. Choose **page** as the template type and give it a unique name, such as `page.form`.
5. Select **Done** to create the template.

Now that you have created a new page template specifically for the form, you can add the form block to this template without affecting other pages.

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

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

#### How to add the new template to a page

Once you have created the new page template, you can add the form block to it. To do this, follow these steps:

1. Go to **Shopify admin > Online Store > Pages > Add page**.
2. Create a new page and select the new page template you just created from the **Template suffix** dropdown.

This way, only the new page will use the template, and the form will appear exclusively on that page instead of other pages.

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


# Add registrations for customer

This functionality allows the shop admin to add registrations for customers without sending out **emails to customers**. This is often useful when registrations are collected in person or when migrating existing registrations.

## How to tag the admin user

1. Go to the Shopify customers admin and tag the user with the tag "**product-registration-admin**" (don't forget to save the change).

![](/files/-M4QrutyeitRmI-_ytR1)

2. Log in to the shop frontend (not the Shopify admin) using the tagged admin user credentials.
3. Navigate to the registration page.
4. Complete the registration process by filling in the required customer details and submitting the form.


# POS (Point Of Sales)

The app is also available on the POS system. Once installed, it will be visible on the POS app and the order completion screen.

With the new version of the POS, the app needs to be added before use. It is available in the Shopify admin.

1. From your Shopify admin, go to **Sales channels** > [**Point of Sale**](https://admin.shopify.com/apps/point-of-sale-channel).
2. Navigate to **Settings** > [**POS apps**](https://admin.shopify.com/settings/apps/point-of-sale-channel/settings/pos-ui-extensions).
3. Select **Serial Numbers** by My Product Cares.
4. In the **Additional areas** section, click **Add**.

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

## Order completion

On the available tiles, scroll to the right or left to find the **My Product Cares/Registration** app.

<figure><img src="/files/1eXmeFmmGms8bZQ4pifF" alt=""><figcaption></figcaption></figure>

Once the app is open, you can enter the serial number for each item in the order. You can either enter the serial numbers manually or use a scanner for faster input.

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


# Shopify admin links

Effortlessly integrate the Shopify admin with the app to check customer registrations and conveniently add serial numbers to orders.

### Customer Detail Link - View Customer Entries

The app provides a convenient link in the Shopify customer detail admin page, enabling quick access to registrations, claims, and warranties associated with a specific customer. Simply click the link to view all relevant entries for the selected customer.

<figure><img src="/files/XjJ0hXrUlGdzIUC05ePa" alt="Customer Detail Link Screenshot"><figcaption></figcaption></figure>

By clicking the link, the app will display all registrations, claims, and warranties tied to the current customer, streamlining the process of managing customer data.

### Order Detail Link - Add Serial Numbers to an Order

This feature provides an efficient way to add serial numbers to an order directly from the Shopify order detail admin page.

<figure><img src="/files/IkZInATuHjPOO3SMDPTx" alt="Order Detail Link Screenshot"><figcaption></figcaption></figure>

Once clicked, the app presents input fields for entering serial numbers for each line item in the order. After saving, the serial numbers are stored in the default form, creating an entry that allows searching by order ID or serial numbers in the Forms listing page.

<figure><img src="/files/nPR1rEIYWEhX928NOEd6" alt="Serial Number Input Screenshot"><figcaption></figcaption></figure>

If serial numbers are already associated with the order, they will be displayed, and users can access the corresponding entry for further details.


# Integrations

Our platform supports seamless integrations with third-party services, enabling functionalities such as sending emails and sharing registration form data with marketing platforms like Klaviyo.

**Stay tuned for regular updates as we continue to add new integrations!**


# Klaviyo

Enable the integration to send customer email and additional field details to Klaviyo.

**Note:** Klaviyo will send an email to the customer asking them to confirm their subscription. This is in addition to the registration confirmation email sent by the app after successful registration.

***

## Finding the **Private Key** in Klaviyo

1. Log in to your Klaviyo account.
2. Navigate to **Account**.
3. Go to **Settings**.
4. Select **API Keys**.
5. Generate a new **Private Key**. Ensure it is a **Custom Key** with **Full Access** to Lists, Profiles, and Subscriptions.

***

## Setting Up the App with the Private Key

1. Go to the **Shopify Apps Admin**.
2. Navigate to **My Product Registration**.
3. Go to **Settings > Integrations**.
4. Under **Klaviyo Integration**, enter the **Private Key**.
5. Scroll to the bottom and click **Save Settings**.

Next, go to the **Form's Settings** and select the Klaviyo list where you want the data to be sent.

***

## **Checkbox for Consent**

Once the integration is set up, a new checkbox will be added to the form, asking customers for permission to send their data to third-party integrations.

You can customize the checkbox text in the app admin under **Settings > Languages > Send Data To Third Party**. Update the text to match your requirements.


# Mailchimp

You can send form submission data directly to a Mailchimp list or audience when the form is submitted. This ensures that the collected data is automatically synchronized with your Mailchimp account fo

## Setting Up the Mailchimp API Key

1. Navigate to **App Settings** > **Integration** > **Mailchimp**.
2. Enter your Mailchimp **API Key** and **Server Prefix** in the provided fields.

<figure><img src="/files/5doTVSlaZSyEKFtIvpdu" alt="Mailchimp API Key Setup"><figcaption><p>Mailchimp API Key Setup</p></figcaption></figure>

## Selecting a List or Audience

1. After saving the Mailchimp settings, choose the list or audience to send form data to:
   * Go to **Forms** > Select the desired form > **Settings** > **Mailchimp Integration** (this option will only appear if the API key is saved).
   * Select the appropriate list or audience.

<figure><img src="/files/T6WIlpaOBuUJYsA4tWOP" alt="Mailchimp List Selection"><figcaption><p>Mailchimp List Selection</p></figcaption></figure>

2. Test the setup:
   * Submit a form and verify that the data appears in the selected Mailchimp list.

## Adding Custom Merge Fields in Mailchimp

To include additional data (e.g., product details) in Mailchimp, you need to create custom merge fields:

1. Go to your Mailchimp dashboard.
2. Navigate to **Audience** > **Settings** > **Audience fields and |MERGE| tags**.
3. Click **Add A Field**.
4. Enter the field name (e.g., `PRODUCT`) and select the field type (e.g., Text, Number, Date, etc.).
5. Save the field.

### Recommended Merge Fields

Below is a list of field names you can add to capture additional data. Ensure all fields are of type **Text**:

* `P0`
* `P0_SKU`
* `P0_SN`
* `P0_PDATE`
* `ADDRESS1`
* `ADDRESS2`
* `CITY`
* `COUNTRY`
* `POSTCODE`
* `PHONE`

### Testing Custom Merge Fields

1. Add the above merge fields in Mailchimp.
2. Submit a form using a new or existing email address.
3. Verify that the additional data appears for the corresponding user in Mailchimp.

By following these steps, you can seamlessly integrate your form submissions with Mailchimp and ensure all relevant data is synchronized.


# Stripe payment

Integration with Stripe Checkout (a Stripe-hosted checkout page) enables customers to seamlessly make payments after completing product registrations or claims. This integration simplifies the payment

## Overview

Integrate with [Stripe Checkout](https://stripe.com/docs/payments/checkout) to collect payments seamlessly after form submissions. This integration ensures a smooth and secure transaction experience for your customers.

### Key Steps to Set Up the Integration

1. Obtain the API key from the Stripe admin dashboard.
2. Customize the Stripe Checkout page in the Stripe admin.
3. Create a new form for testing purposes.
4. Add a payment field to the form via the Form's Design section and configure it.
5. Save the form design.
6. **Test the entire flow from the customer's perspective.**
7. Deploy the integration on a live form once testing is successful.

> **Tip:** Always test thoroughly before going live!

***

## How to Obtain the Stripe API Key

1. Sign up for a Stripe account if you don’t already have one.
2. Access the [API key](https://stripe.com/docs/keys) in the Stripe dashboard:

* Navigate to **Developers > API Keys**.
* Follow the [latest Stripe documentation](https://stripe.com/docs/keys#reveal-an-api-secret-key-live-mode) to retrieve your key.

<figure><img src="/files/4YflXaPrskWdEswBmNJS" alt="Stripe API Key Screenshot"><figcaption></figcaption></figure>

3. While in the Stripe dashboard, customize the payment checkout page:

* Go to **Settings > Payments > Checkout**.
* Configure branding and appearance to match your needs.

***

## Setting Up the Integration

1. Once you have the Stripe API key, navigate to **App Admin > App Settings > Integration > Stripe Payment** in your app.
2. Enter and validate the API key.

<figure><img src="/files/IwvAjUsqc57iwehi65yb" alt="Stripe Integration Settings Screenshot"><figcaption></figcaption></figure>

***

### Adding the Payment Field

1. After validating the payment integration, the payment field will become available in the Form's Design section.![](/files/1VlkBWSnnjsUizePugSr)
2. Add the payment field to the form. **Note:** Only one payment field is allowed per form.

<figure><img src="/files/ve38ktcmgoxJD7iEvevc" alt="Payment Field Screenshot"><figcaption></figcaption></figure>

### Required Payment Field Details

* **Product Name:** The name displayed to customers on the Stripe Checkout page.
* **Price:** The amount to be charged.
* **Currency:** The currency for the transaction.

You can also configure success and cancellation messages in the payment field options. Once configured, save the form design.

***

## Customer Experience

After saving the form, customers will:

1. Fill out the form as usual.
2. Be redirected to the Stripe-hosted payment checkout page upon submission.
3. Complete the payment using their preferred method (e.g., credit card).
4. See a success or cancellation message based on the payment outcome.

<figure><img src="/files/hwF7cGqd14PFTqISe933" alt="Stripe Checkout Example"><figcaption></figcaption></figure>

> **Note:** The product name, price, and description displayed on the checkout page are configured in the payment field.

***

## Emails and Statuses

* By default, form submissions are assigned the **Requested** status (this can be changed in the form's settings).
* An email is automatically sent to the customer upon submission (customizable or disable-able in the form's settings).

### Payment-Specific Statuses

Once payment integration is enabled, two new statuses are added:

* **Paid:** Automatically assigned when payment is successful.
* **Unpaid:** Assigned when payment fails or is canceled.

To send emails based on payment outcomes, customize the email templates under **App Settings > Statuses > Paid/Unpaid**.

***

## Why Use Payment Integration?

Payment integration is useful in various scenarios, such as:

* Charging for registrations.
* Collecting partial payments for claims.
* Covering shipping costs for claims.

This integration streamlines the payment process, enhancing both customer experience and operational efficiency.


# Gorgias

Add product registration and warranty details to customer information in Gorgias, enabling seamless access to this data directly within the Gorgias interface.

### Setup

Gorgias supports HTTP integrations, allowing it to call external API endpoints to retrieve and display information directly within the Gorgias interface.

To set up the integration, follow the instructions provided in the [Gorgias HTTP Integration documentation](https://docs.gorgias.com/en-US/http-integrations-81822).

During the setup process, you will be prompted to provide an API endpoint. This endpoint will be used to fetch customer-related information, such as email or other details, from the app.

### Obtain the API Endpoint

The API endpoint for integrating with Gorgias is:

<https://product-reg.varify.xyz/api/gorgias/users?email={{ticket.customer.email}}>

This endpoint requires an authorization token (API key) to be included in the request headers, as specified in the Gorgias HTTP Integration guide. You can obtain the API key by navigating to **App Admin > App Settings > General > API Access Token** in the app.

Ensure the token is securely stored and used only for authorized requests.


# API

If you need to add registrations or serial numbers programmatically, you can use the provided API.

All endpoints are available at **<https://product-reg.varify.xyz/api/>**

## Generate Access Token

To obtain an access token, follow these steps:

1. Navigate to **Shopify Admin**.
2. Go to **Apps**.
3. Select **My Product Registration**.
4. Click on **Settings**.
5. Under the **General** section, find **API Access Token**.
6. Click on **Generate** to create a new access token.

Make sure to store the access token securely as it will be used for authenticating API requests.

## Usage

### Authentication

Requests to API endpoints require an authentication header with the access token. Set the following in the request header:

```
Authorization: Bearer [access-token]
```

It is preferred to include the access token in the header rather than in the body of the request.

### Registrations - add new (POST)

Once the access token is generated, it can be used to register a new product.

1. Make an **HTTP POST request** to the endpoint - <https://product-reg.varify.xyz/api/registrations>.
2. The POST request should have the following **JSON payload**.

```
{
    "accessToken": "12323213123",
    "registrations": [
        {
            "productName": "MacBook 2018",
            "customerEmail": "tom@example.com",
            "customerName": "Tom Delong",
            "serialNumbers": [
                "123",
                "321"
            ],
            "purchaseDate": "2019-01-01",
            "greetings": "hello world!",
        }
    ]
}
```

Or customer data and address can be added in the payload.

```
{
  "registrations": [
    {
      "productName": "MacBook 2018",
      "customerEmail": "tom@example.com",
      "serialNumbers": [
        "123",
        "321"
      ],
      "purchaseDate": "2019-01-01",
      "greetings": "hello world!",
      "customer": {
        "id": 123,
        "firstName": "Testy",
        "lastName": "Test",
        "address1": "1 highstreet",
        "address2": "",
        "city": "New York",
        "State": "New York",
        "country": "US",
        "postCode": "1234567",
        "phone": "1234567"
      }
    }
  ]
}

```

You can register multiple products in a single call by simply adding additional registration objects to the registrations array.

If you need to submit data to a different form (not the default product registration), you'll need to include a new key in the registration: **"type": "form-slug-name".** You can find the form slug name by navigating to **Form > View on the frontend**.

For any extra fields, just add them as key-value pairs within the registration object. The key names can be found in the form's design and field options.

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

### Registrations - Modify existing registration (PUT)

Once the access token is generated, it can be used to modify an existing registration, which can be identified by the registration ID found in the admin panel or via the webhook payload.

1. Make a **HTTP PUT request** to the endpoint - <https://product-reg.varify.xyz/api/registrations/:regId>
2. The PUT request should have the following **JSON payload**

```
{
    "accessToken": "12323213123",
    "registration": {
            "productName": "MacBook 2018",
            "customerEmail": "tom@example.com",
            "customerName": "Tom Delong",
            "serialNumbers": [
                "123",
                "321"
            ],
            "purchaseDate": "2019-01-01",
            "fields": {
                "greetings": "hello agaiin",
            }
    }
}
```

If there are extra fields need to be updated, then put it under **fields** key.

### Update registration status (POST)

To update the status of an existing registration, follow these steps:

1. Make an **HTTP POST request** to the endpoint **/api/registrations/:regId/status**. Replace `:regId` with the specific registration ID.
2. The POST request should have the following **JSON payload**:

```json
{
    "accessToken": "12323213123",
    "status": "new-status",
    "isPublic": false,
    "note": "this is a new status",
    "assets": [
        {
            "name": "receipt",
            "url": "https://example.com/receipt.jpg"
        }
    ]
}
```

The `accessToken` field contains your API access token (you can also use the `Authorization: Bearer [access-token]` header as described in the Authentication section). The `status` field should contain the new status value you want to assign to the registration. The `isPublic` field determines whether the status change should be visible to the customer. The `note` field is optional and can contain additional information about the status change. The `assets` field is optional and accepts an array of objects containing `name` and `url` to attach multiple files or images to the status.

**Response:**

* If the request is successful, the server will return a **200 status code** with the updated registration data.
* If an error occurs, the server will respond with an appropriate error message.

### Delete registration (DELETE)

To delete a registration, follow these steps:

1. Obtain the registration ID that you want to delete.
2. Make an **HTTP DELETE request** to the endpoint: **/api/registrations/:regId**. Replace `:regId` with the specific registration ID.

**Response:**

* If the request is successful, the server will return a **200 status code**.
* If an error occurs, the server will respond with an appropriate error message.

### Registrations (GET) - Get customer's registrations

1. Make an **HTTP GET request** to the endpoint **/api/registrations** with the email as a query string, e.g., **/api/registrations?email=<tom@example.com>**.
2. The server will return all registrations associated with the specified email.

Available query strings:

* **email** - Only get registrations belong to specific email e.g **/api/registrations?email=<tom@example.com>**
* **customerId -** Only get registrations belong to specific customer id (shopify customer id) e.g **/api/registrations?customerId=88888888**
* **formSlug** - Only get registration within specific form
* **limit** - Limit the results

### Add serial numbers (POST)

To add serial numbers, follow these steps:

1. Make an **HTTP POST request** to the endpoint **/api/serial\_numbers**.
2. The POST request should include the following **JSON payload**:

```
{
    "accessToken": "12323213123",
    "serialNumbers": [
        {
            "serialNumber": "22018",
            "sku": "mac123",
            "customerTags": "VIP,mac",
        }
    }
```

The `customerTags` field is a comma-separated list of tags that you want to assign to the customer registering this serial number.

### Get a unused/unregistered serial number (GET)

To get a random unregistered serial number, follow these steps:

1. Make an **HTTP GET request** to the endpoint **/api/serial\_number**.
2. If an unregistered serial number is available, the server will return it with a **200 status code**.
3. If no unregistered serial number is found, the server will return a **204 status code**.

### Get serial number information (GET)

To retrieve information about a specific serial number, follow these steps:

1. Make an **HTTP GET request** to the endpoint **/api/serial\_numbers/{serialNumber}**, replacing `{serialNumber}` with the actual serial number you want to query.
2. If the serial number exists, the server will return its information with a **200 status code**.
3. If the serial number does not exist, the server will return a **204 status code**.

Example request:

```
GET /api/serial_numbers/test123
```

### Upload a file/asset/receipt

You can upload a file and use the URL as the receipt. The upload process is divided into two parts:

1. Get a presigned URL from the app server.
2. Use the [presigned URL to upload the file directly to Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html).

Follow these steps:

1. Make an **HTTP GET request** to the endpoint **/api/upload\_file** with the query string parameters `fileName`, `fileType`, and `fileSize`, e.g., **/api/upload\_file?fileName=test.png\&fileType=image/png\&fileSize=123**.
2. The server will return a **signedRequest URL** which you can use to upload the file. The **url** is the final URL of the uploaded file.
3. Make an **HTTP PUT request** to the **signedRequest URL** and include the file in the payload, e.g.,

```sh
curl -X PUT -T "/path/to/file" "presigned URL"
```

Here are some examples of how to upload the file using JavaScript:

```javascript
// Upload the file in Node.js
let blobData = new Blob([new Uint8Array(array)], { type: 'image/jpeg' });
const result = await fetch(signedRequestURL, {
  method: 'PUT',
  body: blobData
});

// Upload the file in the browser
// file - is the file object from an HTML input element of type="file"
const result = await fetch(signedRequestURL, {
  method: 'PUT',
  body: file
});
```


# Import/Migrate Registrations

Each import and migration from a previous system is unique, and custom development may be required to facilitate the process.

To assist us, please provide the registrations in a CSV file formatted according to the following sample:

{% file src="/files/-MLN-En0eMnBe\_CFEaVD" %}
Sample registration import CSV
{% endfile %}

Ensure the CSV file is correctly formatted.

Once the CSV file is properly formatted, follow these steps to import it:

1. Navigate to **App admin > Forms**.
2. Select the desired form.
3. Go to **Form Settings**.
4. Click on **Import CSV**.
5. Upload the CSV file and proceed with the import.

## CSV Format Specifications

### Required Fields

Every CSV import must include these mandatory fields:

| Field                      | Description            | Example                  |
| -------------------------- | ---------------------- | ------------------------ |
| `productName`              | Name of the product    | "iPhone 15 Pro"          |
| `customerEmail` or `email` | Customer email address | "<customer@example.com>" |

### Standard Fields

The system supports these standard fields that map directly to database columns:

#### Product Information

* `productName` - Product name (required)
* `productId` - Shopify product ID
* `sku` - Product SKU
* `variantId` - Product variant ID

#### Customer Information

* `customerEmail` or `email` - Email address (required)
* `customerName` or `name` - Full customer name
* `firstName` - Customer first name
* `lastName` or `surname` - Customer last name
* `phone` - Phone number

#### Address Information

* `address1` - Primary address line
* `address2` - Secondary address line
* `city` - City
* `state` - State/Province
* `country` - Country
* `postCode` - Postal/ZIP code

#### Registration Details

* `serialNumber` or `serialNumbers` - Product serial numbers
* `purchaseDate` - Date of purchase
* `warrantyStartDate` - Warranty start date
* `warrantyEndDate` - Warranty end date
* `lastServiceDate` - Last service date
* `status` - Registration status
* `orderId` - Shopify order ID
* `orderNumber` - Order number

### Custom Fields

Any column not in the standard field list is automatically treated as a custom field.

**⚠️ Important Field Matching Behavior:**

* **Matching Existing Fields**: If a custom field name matches an existing field name in the form's field configuration, the imported value will populate that existing field
* **New Fields**: If the field name doesn't match any existing form field, a completely new custom field will be created
* **Field Name Matching**: Uses exact name matching (case-sensitive) to determine if it's updating an existing field or creating a new one

**Custom Field Format:**

* Column names can be arbitrary (e.g., `warrantyPeriod`, `storeLocation`)
* Values are stored as strings


# Webhook

To integrate the webhook with your system, such as an ERP, ensure that the webhook URL uses a secure connection. Only **HTTPS** addresses are accepted.

## Setup

To set up the webhook, follow these steps:

1. Go to **Shopify Admin**.
2. Navigate to **Apps** > **My Product Registration**.
3. Select **Forms**.
4. Choose the form you want to integrate with the webhook.
5. Go to **Settings** > **General**.

![](/files/0JnI4ye0x8Cj67YlOcw3)

Once the webhook is set up, every time a registration occurs, the app will send an **HTTP POST** request to the webhook address with the following payload:

```
{
  "type": "product-registration",
  "items": [
    {
      "product": {
        "id": 11651617295,
        "title": "Short sleeve t shirt",
        "handle": "short-sleeve-t-shirt",
        "imageUrl": "https://cdn.shopify.com/s/files/1/1893/1973/products/mens-dark-grey-long-sleeve-basketball-t-shirt-p18984-15470_image.jpg?v=1498345705"
      },
      "purchaseDate": "2018-05-28T10:58:17.597Z",
      "serialNumbers": [
        "123"
      ],
      "extraFields": [
        {
          "name": "Title",
          "type": "text",
          "value": "Mr"
        },
        {
          "name": "where did you buy it?",
          "type": "selection",
          "value": "Ebay"
        },
        {
          "name": "Upload Image (Receipt)",
          "type": "image",
          "value": "https://www.example.com/test.jpg"
        },
      ]
    }
  ],
  "customer": {
    "name": "James Hunt",
    "firstName": "James",
    "surname": "Hunt",
    "email": "james@hunt.com",
    "address1": "1 Highstreet",
    "address2": "Haham",
    "city": "New York",
    "country": "US",
    "state": "NY",
    "postCode": "1234567",
    "phone": "1234567",
  }
}
```


# Downloadable assets after submit

## Overview

Allow customers to download files (e.g., product manuals, warranty documents) after they submit the form.

The app will associate serial numbers with downloadable assets. When customers input specific serial numbers in the form and successfully submit it, they will be able to download the assets associated with those serial numbers.

1. Upload the serial number CSV to associate serial numbers with specific downloads.
2. Customers register their serial numbers.
3. Upon successful registration, customers will see the downloadable assets associated with their serial numbers.

### Step #1 - Upload serial number CSV with downloadable assets

Prepare a serial number CSV that includes links to the downloadable assets. This CSV is similar to the normal [CSV](/admin/serial-numbers#sample-csv), but with an additional column **data\_download\_asset\_name**. The prefix **data\_download\_** is fixed, and the asset name is what will be displayed to the customer.

Here is an example of the CSV format:

| serialNumber | sku  | data\_download\_manual         | data\_download\_warranty       |
| ------------ | ---- | ------------------------------ | ------------------------------ |
| 123          | k123 | <https://example.com/k123.zip> | <https://example.com/k123.pdf> |
| 321          | k123 | <https://example.com/k123.zip> | <https://example.com/k123.pdf> |
| 456          | k456 | <https://example.com/k456.zip> | <https://example.com/k456.pdf> |

In this example, each serial number is associated with multiple downloadable assets, such as manuals and warranty documents.

{% file src="/files/tOreABplb4lsn1neYgAG" %}
Sample serial number with downloadable assets
{% endfile %}

Upload the CSV in the App admin. Once uploaded, customers will be able to see and download the assets associated with their registered serial numbers.

![](/files/8VD3BAFrwkwAjqAXmPtM)

### Step #2 - Turn on show downloadable assets in registered entries

Customers will see the downloadable assets after successfully submitting the form. Additionally, they can view the downloadable assets in their registered entries (e.g., customers can see their registered products when they log in and register products using their login email).

To show the downloadable assets in the registered entries, enable the setting in **App admin > App settings > General > Show registered serial numbers** data for registered products, and then click Save (on the top right).

![](/files/2bUwbaLcJDKh9xvhjl4u)

Once this setting is enabled, customers will be able to view and download the associated assets directly from their registered entries.

![](/files/zwIyvj9b1A6X7BZ8sMpf)


# Serial number checker/validator

## Overview

Sometimes it is desirable to have a simple interface for customers to validate or check their serial numbers. The app provides such functionality. Here are some use cases:

* Check the authenticity of a product - e.g., a customer bought a product with a serial number and wants to verify its authenticity.
* Provide manuals (or any other downloadable content) to customers who bought a product with a serial number. They just need to enter the serial number to download the assets associated with it.

### Frontend UI

The serial number checker/lookup has a frontend URL:

```
apps/product-registration?action=snlookup
```

The simple UI allows customers to enter a serial number and retrieve the relevant information.

![](/files/gECKrsPWcm0jJff8T8ox)

Once a customer enters a valid serial number, the result will be displayed.

![](/files/SjJkPnMwCbfCZbodftqC)

As indicated by the results above, the following information is provided:

1. Whether the entered serial number is valid or not.
2. Downloadable content associated with the serial number, if available - [see here how to associate downloads with serial numbers](/advance/downloadable-assets-after-submit#step-1-upload-serial-number-csv-with-downloadable-assets).
3. The product associated with the serial number - [associate products with serial numbers](/admin/serial-numbers#upload-serial-numbers-in-csv).

For more information on how to manage serial numbers, please check [here](/admin/serial-numbers).


# Shopify Flow

Shopify Flow is a powerful automation tool provided by Shopify. It enables you to streamline various tasks and processes within your store.

## Overview

The app integrates with Shopify Flow by adding triggers, allowing you to use form submission triggers to initiate other automations.

To use this functionality, ensure the Shopify Flow app is enabled. For more detailed information, visit the [Shopify Flow documentation](https://help.shopify.com/en/manual/shopify-flow).

Additionally, enable the flow in the App admin by navigating to **App settings > General > Shopify Flow trigger > Enable**.

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

### How to use it

Once Shopify Flow is working, it is accessible in the Shopify admin.

To access it, navigate to **Apps > Shopify Flow**. From there, you can manage and create new workflows to automate various tasks within your store.

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

To create a new workflow, start by creating a trigger. Select **My Product Cares/Registration's Product registration submitted** as the trigger.

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

This means that every time a product registration is submitted, it will trigger the entire workflow.

As for the actions, they will depend on your needs. For example, you can configure it to send out an email.

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

All subsequent actions will have access to the variables and data provided by the trigger, allowing you to utilize them in various parts of your workflow.

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


# Frontend Events

The frontend form component fires several Javascript custom events (`CustomEvent`) on the `window` object during its lifecycle. You can listen to these events to run custom Javascript logic, hook into third-party analytics, or conditionally intercept workflows like form redirections.

***

### Listening to Events

To listen to an event, use standard Javascript event listeners on the `window` object:

```javascript
window.addEventListener('_mpr_submit_success', function(event) {
  console.log('Event triggered', event.detail);
});
```

***

## Available Events

### `_mpr_form_value_changed`

Triggered whenever a value inside the form changes.

* **Cancelable:** `false`
* **Payload (`event.detail`):** The current [Formik](https://formik.org/) state object. You can access the raw form values using `event.detail.values`.

***

### `_mpr_form_submit`

Triggered right as the user hits the submit button, but **before** the request is sent to the application backend. Useful for validation tracking or signaling the intent to submit.

* **Cancelable:** `false`
* **Payload (`event.detail`):** The raw form values object.

***

### `_mpr_submit_success`

Triggered after a successful form submission when the server returns a successful response. This event is highly customizable and can be intercepted.

* **Cancelable:** `true`
* **Description:** If your event listener invokes `event.preventDefault()`, the default auto-redirect behaviour will be skipped (though the visual success message will still appear). This allows you to perform conditional redirects.
* **Payload (`event.detail`):** An object containing the submission scope and server response details.

  ```json
  {
    "formSlug": "your-form-slug",
    "formId": 12345,
    "submission": {
      "customer": { "email": "...", "firstName": "...", "timezone": "..." },
      "items": [
        { "product": { "id": 1, "title": "..." }, "serialNumbers": ["XYZ"] }
      ]
    },
    "response": {
      "success": true,
      "redirect": "https://example.com/custom-redirect",
      "downloads": [],
      "registeredBefore": false
    }
  }
  ```

**Example: Conditional redirect on form success**

```javascript
window.addEventListener('_mpr_submit_success', function(e) {
  // Prevent the default redirection if one is configured
  e.preventDefault(); 
  
  var data = e.detail;
  var items = data.submission && data.submission.items;
  var purchaseLocation = items && items[0] ? items[0]['Where did you purchase?'] : '';
  
  // Conditionally redirect based on the form input value
  if (purchaseLocation && purchaseLocation.toLowerCase().includes('amazon')) {
    window.location.href = '/pages/amazon-warranty';
  } else {
    // Fall back to original redirect or home
    window.location.href = data.response.redirect || '/';
  }
});
```

***

### `_mpr_product`

Triggered when the form dynamically fetches a product's details directly from the frontend (for example, when looking up a product via URL parameter `?productId=` or filling a product using a verified serial number).

* **Cancelable:** `false`
* **Payload (`event.detail`):** The product details returned from the application backend.

***

### `_mpr_registrations_listed`

Triggered upon successfully fetching the list of a customer's previously registered items. Note that this occurs on pages displaying registration entries rather than the registration form itself.

* **Cancelable:** `false`
* **Payload (`event.detail`):** An array containing the user's past registration entries matching the active display configuration.


# Frequently Asked Questions (FAQ)

## Can I combine the Product Registration form into one page rather than the current two-step approach?

Currently, the form is designed to be divided into two steps: product and customer. This approach ensures that users are taken to a second page where they can review the products they have entered and provide additional details.

The second page of the customer form provides consistent fields to collect essential customer information.

Combining these steps into a single page is not possible at the moment, but it is on our roadmap and may be available in the future.

## How do I customize the look and feel of the form?

By default, the frontend form has a minimal design and inherits the shop's styling.

If the page does not appear as desired, you can add custom CSS to achieve the exact look you want.

To add custom CSS code for the app, navigate to **App admin > Settings > General Setting > Custom CSS styling code for frontend**.

If you need additional assistance, please feel free to [contact us](/contact-us).

## How to make the product name a dropdown list

When customers search for products on the frontend, the default behavior is an autocomplete search. However, in some cases, a dropdown list might be more suitable for allowing customers to select a specific product.

To enable a dropdown list for product selection, follow these steps:

1. **Create a Collection**: Create a collection that includes all the products you want to appear in the dropdown list. Ensure this collection is not visible on the frontend if you do not want it displayed. For guidance, refer to [Shopify's manual on creating collections](https://help.shopify.com/manual/products/collections/manual-shopify-collection).
2. **Enable Dropdown Mode**: Go to **App Admin > Form > Settings > General**. Enable the "Limit Product Search" option, then enable the dropdown mode and select the collection you created. Finally, click **Save Settings** at the bottom of the page.

![](/files/-M4QrtV0gzdvTqdvQjf7)

## How can I find out the app version?

To find the app version, follow these steps:

1. Navigate to **Shopify admin > Apps > My Product Registration**.
2. Scroll to the bottom right corner of the page. The app version is displayed there.

Note: The appearance of the admin page may vary with different versions, but the version number will always be located at the bottom right.

![App version](/files/HUp0RtCM0ZBSgPHUTh8y)

## How can I redirect to a specific URL after submission?

There are two ways to achieve this:

1. **Via Serial Number**: When you upload or import a serial number, you can specify a redirect URL. Whenever a customer registers with that serial number, they will be redirected to the specified URL.
2. **Using the Redirect After Success Setting**: Navigate to **App admin > Forms > Select the form > Settings > General > Redirect URL after success registration**. Enter the desired URL and click **Save**.

Note: If you use the redirect URL in the form settings (step 2), you can include the registration ID or product handle in the URL. For example, if the URL contains **{ids}** or **{handles}**, they will be replaced with the registration ID and the registered product handle, respectively.

For instance, if a customer registers a product with the handle **apple-macbook-pro** and you use the following success redirect URL in the settings:

```
https://example.com/?product={handles}&registration_id={ids}
```

The app will replace the placeholders and redirect to:

```
https://example.com/?product=apple-macbook-pro&registration_id=3213112
```

## How can I get the registration ID in the email subject?

To include the registration ID in the email subject sent to the customer, use the placeholders **{{ id }}** or **{{ ids }}** in the email subject line. These placeholders will be replaced with the actual registration ID when the email is sent.

## I like the app, how do I write a review for it?

We're thrilled to hear that you enjoy the app! Your feedback helps us improve continuously.

To write a review, follow these steps:

1. Go to **Shopify Admin**.
2. Navigate to **Apps**.
3. Select **My Product Cares**.
4. Click on **View Details (...)**.
5. Choose **Write Review**.

Alternatively, you can use [this link](https://apps.shopify.com/product-registration-1) to leave a review directly.

[https://apps.shopify.com/product-registration-1](https://github.com/apps.shopify.com/product-registration-1/README.md)


# Why is View on the frontend link not working?

In the Form admin, to preview the form on the frontend, use the "View on Frontend" function. This will generate the form's URL in the following format:

```
https://[store_name].myshopify.com/apps/product-registration?form=[form_slug]
```

If you have modified the URL path (e.g., changed `/apps/product-registration` to something else), the "View on Frontend" link will not work. You will need to update the URL to match the new app proxy path.

You can find the app proxy in the Shopify admin by navigating to: **Apps > My Product Registration > ... (top right) > App Proxy**.

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

If the app proxy is changed from the default, you will need to update the URL to reflect the new format. Ensure that the new URL path matches the updated app proxy path to maintain functionality.

```
https://[store_name].myshopify.com/[app-proxy]?form=[form_slug]
```

If your store uses a custom domain, the URL format will be:

```
https://[your-store-domain]/[app-proxy]?form=[form_slug]
```

or

```
https://[your-store-domain]/apps/product-registration?form=[form_slug]
```

> **Note:** It's not recommended to change the default app proxy, because some of the links will not work out of the box. Weigh the pros and cons before making any changes to the app proxy.


# Migrate to v2

Version 2 of the app introduces significant improvements, and migrating from v1 to v2 is possible.

## Benefits of v2

* Create multiple forms effortlessly.
* Design forms using a drag-and-drop interface.
* Enjoy many additional features.

## Important Considerations Before Upgrading

While upgrading is straightforward for simple forms with minimal customization, please keep the following in mind:

* The appearance of your forms will change significantly due to the updated design in v2.
* Downgrading back to v1 after upgrading is difficult.

**If your setup is complex or you are satisfied with the current version, you may choose not to upgrade. However, note that v1 will only receive security updates, with no new features introduced.**

If you have any questions, please [contact us](/contact-us) before proceeding with the upgrade.

## How to Upgrade

To upgrade, navigate to **v1 App Admin > Settings > Advanced Settings > Upgrade to v2**.

## Post-Upgrade Checklist

After upgrading, verify that everything is functioning correctly. Here's a checklist to guide you:

* Visit the frontend and review the styling.
* Perform a test registration to ensure it works as expected.
* Review email templates and verify emails from the test registration.
* Confirm the registration status functionality.
* If applicable, check the claim form.

## Updating Registration Forms or Listings in the Account Area

If your registration form or listing is embedded in the account area or other pages using the old documentation, update it as follows:

Old documentation link:

{% embed url="<https://doc.product-reg.varify.xyz/v/v1-shopify-product-registration/admin/settings/registration-in-account>" %}

New documentation link for v2:

{% embed url="<https://doc.product-reg.varify.xyz/admin/registration-in-account>" %}


# Change Logs

## Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), and is generated by [Changie](https://github.com/miniscruff/changie).

Old changes can be found in [here](https://doc.product-reg.varify.xyz/v/v1-shopify-product-registration/change-logs)

## v88.8.3 - 2026-04-13

### Fixed

* Issue with v1 admin links## v88.8.2 - 2026-04-13## v88.8.1 - 2026-04-13

### Changed

* v1 admin use latest app bridge## v88.8.0 - 2026-01-19

### Changed

* Improved speed on submission significantly## v88.7.1 - 2026-01-14

### Fixed

* Fixed issue with the serial numbers contain empty space at the end of the serial number## v88.7.0 - 2025-12-16

### Added

* Support bulk update entry status## v88.6.1 - 2025-12-03

### Added

* Analytics for install process## v88.6.0 - 2025-11-24

### Added

* Shopify extension deployment improvement## v88.5.0 - 2025-11-14

### Added

* Added web vitals analytics with clickhouse## v88.4.0 - 2025-11-09

### Changed

* Better filter the input data## v88.3.0 - 2025-10-30

### Changed

* Support hCaptcha on all## v88.2.1 - 2025-10-06

### Changed

* Clean up the old admin and frontend## v88.2.0 - 2025-08-28

### Added

* Use Shopify assets version for fast rollback etc

## v88.1.3 - 2025-08-25

### Fixed

* Fixed small bit of lint error## v88.1.2 - 2025-08-04

### Fixed

* Check conditional logic fields depend on the logic## v88.1.1 - 2025-05-23

### Fixed

* Remove unused logging## v88.1.0 - 2025-04-30

### Added

* Support queue the redact to make webhook faster## v88.0.0 - 2025-04-29

### Added

* Added support of SMTP## v87.0.1 - 2025-04-09

### Fixed

* Check for collection products is truly empty or not## v87.0.0 - 2025-02-14

### Added

* New POS UI for adding serial numbers## v86.18.2 - 2025-01-31## v86.18.1 - 2025-01-26

### Added

* Added support to verify email domain## v86.18.0 - 2025-01-21

### Added

* Support customer buy warranty products and extend the warranty## v86.17.1 - 2024-12-21

### Changed

* Remove unused shoify api instance## v86.17.0 - 2024-12-17

### Changed

* Use graphql for customer related request## v86.16.0 - 2024-12-12

### Added

* Able to use variant meta field for warranty info## v86.15.0 - 2024-11-28

### Added

* Now api get serial numbers support get specific serial numbers## v86.14.0 - 2024-11-27

### Fixed

* Shopify graph ql to get product## v86.13.0 - 2024-11-23

### Fixed

* Webhook not getting warranty info issue## v86.12.0 - 2024-11-11

### Fixed

* Issue with wrong webhook url, no warranty on claim and product name too long## v86.11.0 - 2024-11-05

### Added

* API for getting all serial numbers## v86.10.0 - 2024-11-01

### Added

* Support for multiple languages forms## v86.9.0 - 2024-10-30

### Added

* Support for more languages (es,fr,de) on the frontend## v86.8.0 - 2024-10-23

### Fixed

* Issue with adding extra fields## v86.7.0 - 2024-10-22

### Added

* Support for Shopify custom app integration## v86.6.1 - 2024-10-13

### Added

* Support for send klaviyo event## v86.6.0 - 2024-09-29

### Added

* Support referral## v86.5.0 - 2024-09-24

### Added

* able to set date format for emails## v86.4.0 - 2024-09-17

### Added

* send email to mail guard for better monitor bounces and complaint rates## v86.3.0 - 2024-09-16

### Fixed

* Issue with frontend customer entry listing and no whereclause## v86.2.2 - 2024-09-16

### Fixed

* Issue with frontend customer entry listing## v86.2.1 - 2024-09-09

### Fixed

* Product image url## v86.2.0 - 2024-09-06

### Added

* Able to add serial numbers from users and admin to the database## v86.1.0 - 2024-08-26

### Changed

* Upgraded bullmq to the latest## v86.0.0 - 2024-08-19

### Added

* Support extended warranty## v85.1.0 - 2024-08-14

### Added

* Support remove integrations## v85.0.0 - 2024-08-13

### Added

* Support for shopify cli app dev mode## v84.0.0 - 2024-08-12

### Added

* Delete users from keycloak## v83.1.0 - 2024-08-07

### Added

* Default will add warranty claim form as well## v83.0.0 - 2024-07-26

### Added

* Added Shopify customer account extension## v82.1.0 - 2024-07-22

### Added

* Support preview draft forms## v82.0.2 - 2024-06-30

### Fixed

* Handle multiple quantity on order webhook## v82.0.1 - 2024-06-27

### Added

* New settings for form to use when associate serial numbers to order## v82.0.0 - 2024-06-26

### Added

* Support upc in serial numbers## v81.1.0 - 2024-06-25

### Fixed

* Adding serial numbers not save useless data## v81.0.1 - 2024-06-18

### Fixed

* More logging to status change## v81.0.0 - 2024-06-17

### Added

* Added products endpoints to provide products functionalities## v80.16.3 - 2024-06-12

### Added

* Get the product tags when getting products from collections## v80.16.2 - 2024-06-06

### Fixed

* Issue with product id is a path id in api## v80.16.1 - 2024-06-05

### Added

* Check for friendly bots and let it pass## v80.16.0 - 2024-05-23

### Added

* Show warranty information on serial number lookup## v80.15.1 - 2024-05-15

### Added

* Support api upload file## v80.15.0 - 2024-05-14

### Added

* Support workflows endpoints## v80.14.0 - 2024-05-06

### Added

* Check for captcha on indie site## v80.13.1 - 2024-04-26

### Fixed

* Use variant image when getting collection## v80.13.0 - 2024-04-17

### Added

* Check for subscription plan limit## v80.12.2 - 2024-04-13

### Fixed

* Allow access to all regs in email template## v80.12.1 - 2024-04-11

### Changed

* Get common app setting is optimized and added plan for payments## v80.12.0 - 2024-04-09

### Fixed

* Payment clean up plans and stripe api## v80.11.1 - 2024-04-05

### Fixed

* Klaviyo not getting all lists, only the default 10## v80.11.0 - 2024-04-04

### Added

* Able to remove integration easily## v80.10.3 - 2024-04-03

### Fixed

* Fixed issue with multiple list in Klaviyo and handle error on each list submission## v80.10.2 - 2024-03-26

### Fixed

* No need to validate serial numbers when its in admin mode## v80.10.1 - 2024-03-26

### Added

* handle Shopify admin link for both customer and order## v80.10.0 - 2024-03-23

### Changed

* Updated Klaviyo integration with latest feature## v80.9.3 - 2024-03-23

### Fixed

* kalviyo into its own place and use latest api## v80.9.2 - 2024-03-21

### Added

* Able to disable stores on api endpoint## v80.9.1 - 2024-03-21

### Fixed

* Made ask accept marketing checkbox required an option## v80.9.0 - 2024-03-18

### Added

* Added delete reg api## v80.8.1 - 2024-03-08

### Security

* Drop bots as early as possible## v80.8.0 - 2024-03-08

### Added

* Check if need to drop send emails when within trial## v80.7.2 - 2024-03-07

### Fixed

* log test charge## v80.7.1 - 2024-03-07

### Fixed

* Issue with fetch klaviyo list on expired api key## v80.7.0 - 2024-03-07

### Added

* Validate according to fields validation rule## v80.6.5 - 2024-03-03

### Fixed

* Fixed welcome email template## v80.6.4 - 2024-03-03

### Changed

* Able to change default from email easily## v80.6.3 - 2024-03-01

### Fixed

* Rate limit the sign s3 upoad## v80.6.2 - 2024-02-28

### Fixed

* Need to create the customer obj rather than return and not crate customer account## v80.6.1 - 2024-02-28

### Fixed

* Not create customer account when there is no email## v80.6.0 - 2024-02-27

### Changed

* More strict validation for the submission## v80.5.1 - 2024-02-26

### Fixed

* use frontend domain## v80.5.0 - 2024-02-24

### Changed

* Use## v80.4.0 - 2024-02-24

### Changed

* Constants from env## v80.3.2 - 2024-02-19

### Fixed

* show## v80.3.1 - 2024-02-19

### Added

* Support search by customer id## v80.3.0 - 2024-02-17

### Added

* Save related orders for POS and Webhook ## v80.2.1 - 2024-02-16

### Fixed

* Issue with file name in other language## v80.2.0 - 2024-02-15

### Fixed

* Issue with double default forms and statuses## v80.1.1 - 2024-02-13

### Fixed

* Default form description## v80.1.0 - 2024-02-12

### Added

* Ability to have unsubscribe link in the email templates## v80.0.2 - 2024-02-09

### Fixed

* Issue with case sensitive issue for validate sku and sn## v80.0.1 - 2024-02-08

### Fixed

* Issue with undefined address when crating customer## v80.0.0 - 2024-02-08

### Added

* Support Stripe payment for pay after registrations/claims## v79.29.5 - 2024-02-02

### Fixed

* Applied custom discount and free shipping to Bio-ionic draft orders## v79.29.4 - 2024-01-31

### Security

* Prevented html injection## v79.29.3 - 2024-01-31

### Added

* Trigger Shopify flow setting and sanitize the file name## v79.29.2 - 2024-01-30

### Fixed

* Bump up the Shopify api version to fix issue with flow trigger## v79.29.1 - 2024-01-29

### Fixed

* Status note can be unlimit length now## v79.29.0 - 2024-01-28

### Added

* Deployment for indie## v79.28.1 - 2024-01-22

### Added

* Added Shopify flow trigger## v79.28.0 - 2024-01-21

### Changed

* Separate out the post acitons and added more logging info## v79.27.1 - 2024-01-20

### Fixed

* Not start up unnecessary loggers## v79.27.0 - 2024-01-18

### Added

* Support custom site actions after status changed## v79.26.5 - 2024-01-18

### Fixed

* Catch invalid url error## v79.26.4 - 2024-01-18

### Fixed

* Issue with log rotation cause error## v79.26.3 - 2024-01-17

### Fixed

* Update reg with bad id will generate new error## v79.26.2 - 2024-01-17

### Fixed

* Able to set file name for logger## v79.26.1 - 2024-01-15

### Fixed

* CI stages## v79.26.0 - 2024-01-11

### Fixed

* CI deployment for extensions and upgrade to latest version of nodejs## v79.25.7 - 2024-01-05

### Fixed

* Add discount code to the newly created order## v79.25.6 - 2024-01-01

### Added

* Limit upload file size## v79.25.5 - 2023-12-29

### Added

* Support multiple file upload## v79.25.4 - 2023-12-21

### Added

* Aded more logging to the emails system## v79.25.3 - 2023-12-19

### Fixed

* Rate limiter for do registration## v79.25.2 - 2023-12-19

### Added

* Ability to check if the email need to drop instead of send, because its bounced or spam before## v79.25.1 - 2023-12-18

### Fixed

* Make sure serial numbers is array on api import## v79.25.0 - 2023-12-17

### Fixed

* Rate limiter on post proxy handler requests## v79.24.1 - 2023-12-17

### Fixed

* Removed rate limit for now## v79.24.0 - 2023-12-17

### Added

* Ability to rate limit post requests## v79.23.0 - 2023-12-17

### Added

* Site settings for indie site## v79.22.2 - 2023-12-16

### Security

* Rate limit the send email## v79.22.1 - 2023-12-16

### Changed

* Moved the ddispatch email to its own## v79.22.0 - 2023-12-13

### Added

* Added ability to skip certain type of emails## v79.21.1 - 2023-12-12

### Added

* Able to disable frontend## v79.21.0 - 2023-12-12

### Fixed

* Able to disable all emails and put emails on the queue## v79.20.2 - 2023-12-10

### Added

* Added languages for the indie site## v79.20.1 - 2023-12-03

### Added

* Support indie site reg listing## v79.20.0 - 2023-11-30

### Added

* Support deploy to staging for Shopify only## v79.19.5 - 2023-11-26

### Added

* Support create order with discount code## v79.19.4 - 2023-11-22

### Fixed

* Run db migration before start## v79.19.3 - 2023-11-20

### Fixed

* Warranty tag case insensitive## v79.19.2 - 2023-11-17

### Fixed

* Indie site form## v79.19.1 - 2023-11-15

### Added

* Able to mark form as claim in database## v79.19.0 - 2023-11-15

### Added

* Indie site specific handlers and overrides## v79.18.5 - 2023-11-09

### Added

* Able to use id in the email subjects## v79.18.4 - 2023-11-06

### Fixed

* More info about which form not found## v79.18.3 - 2023-10-24

### Added

* Support upload registrations without limit from cli## v79.18.2 - 2023-10-21

### Fixed

* Set show related entries when creating new claim form## v79.18.1 - 2023-10-20

### Fixed

* Added related entry type to be more readable## v79.18.0 - 2023-10-20

### Added

* Support for the related entries for frontend customer entries listing## v79.17.1 - 2023-10-13

### Fixed

* Remove double spaces in customer name## v79.17.0 - 2023-10-12

### Added

* Support cors for own domains## v79.16.3 - 2023-10-10

### Fixed

* Customer listing show only serial number based entries## v79.16.2 - 2023-10-06

### Added

* Support search by id in the admin## v79.16.1 - 2023-10-03

### Fixed

* Support last service date in the regs import## v79.16.0 - 2023-09-23

### Added

* Slim down the docker image## v79.15.0 - 2023-09-21

### Fixed

* Use consistent template data between status and submission email## v79.14.0 - 2023-09-11

### Added

* Support select from category/collection field## v79.13.0 - 2023-09-08

### Fixed

* Send custom fields to webhook## v79.12.1 - 2023-09-02

### Fixed

* V1 admin use id for order by## v79.12.0 - 2023-09-01

### Added

* Support individual site## v79.11.0 - 2023-08-26

### Added

* Support order id in the webhook and export csv## v79.10.0 - 2023-08-26

### Changed

* Order by id instead of updatedAt to increase performance## v79.9.1 - 2023-08-24

### Added

* Added settings for custom actions in registered entries## v79.9.0 - 2023-08-23

### Added

* Added support to get forms and get all regs for API## v79.8.3 - 2023-08-22

### Added

* Support tags and price on create order## v79.8.2 - 2023-08-21

### Added

* Support global serial number regexes check on validate serial number## v79.8.1 - 2023-08-02

### Fixed

* Up the import reg limit## v79.8.0 - 2023-07-31

### Added

* Able to have {{ sku }} in the sn look up result language string
* Endpoint to get the serial number by serial number in addition with id## v79.7.0 - 2023-07-25

### Security

* Updated keycloak public cert## v79.6.0 - 2023-07-12

### Added

* Added settings for search all products or active products only ## v79.5.0 - 2023-07-10

### Added

* Ability to log to file or not## v79.4.0 - 2023-07-05

### Added

* Support BCC email## v79.3.0 - 2023-07-04

### Added

* Use latest version of Shopify api## v79.2.0 - 2023-06-25

### Added

* Handle order create webhook using queue if its not already using aws events## v79.1.1 - 2023-06-25

### Fixed

* Check related id before adding it## v79.1.0 - 2023-06-24

### Added

* Support related id on submission## v79.0.0 - 2023-06-20

### Added

* Added support for entry events and replay events## v78.10.0 - 2023-06-16

### Added

* Added support for ids in the email template## v78.9.0 - 2023-06-06

### Added

* Support date range in export## v78.8.0 - 2023-06-05

### Fixed

* Issue with export regs that taking a long time## v78.7.0 - 2023-06-04

### Changed

* Upgraded to latest Shopify api version## v78.6.0 - 2023-06-02

### Changed

* Separate out the related regs to increase performance## v78.5.0 - 2023-05-27

### Fixed

* issues with filter by status and significant performance gained## v78.4.0 - 2023-05-19

### Added

* Able to create draft order## v78.3.0 - 2023-05-18

### Added

* Able to create orders## v78.2.0 - 2023-05-08

### Added

* Fixed issue with shopId## v78.1.0 - 2023-05-08

### Added

* New shop endpoints## v78.0.1 - 2023-05-01

### Added

* Settings for data collection consent default checkbox## v78.0.0 - 2023-04-29

### Added

* Added internal note for entry## v77.2.0 - 2023-04-27

### Added

* Allow update customer id in the admin## v77.1.0 - 2023-04-26

### Fixed

* Fixed issue with not exporting out data in customer object## v77.0.0 - 2023-04-14

### Added

* Added workflow support## v76.0.0 - 2023-04-11

### Added

* Added theme app block - Serial number look up## v75.7.0 - 2023-04-11

### Fixed

* Issue with stauts histories on V1 registration detail page## v75.6.1 - 2023-04-07

### Changed

* Increase api rate limit for Gorgias integration## v75.6.0 - 2023-04-04

### Added

* Support Custom javascript## v75.5.0 - 2023-04-02

### Added

* Support gorgias integration, now its possible to see product registrations in Gorgias## v75.4.0 - 2023-03-31

### Added

* Able to control if send out emails or not when register products from POS (Point of Sales)## v75.3.0 - 2023-03-29

### Fixed

* Klaviyo send customer names if there are available## v75.2.0 - 2023-03-21

### Added

* Show upgrade available for v2 in v1 admin## v75.1.0 - 2023-03-15

### Fixed

* Issues with Chinese characters## v75.0.0 - 2023-03-14

### Changed

* Optimze the code and make admin loading a lot faster## v74.0.0 - 2023-03-12

### Added

* Support bring own AWS s3 storage - files will be uploaded to any s3 storage## v73.2.1 - 2023-03-08

### Added

* Added setting for only allow one serial number## v73.2.0 - 2023-03-07

### Fixed

* Search by status in the admin## v73.1.0 - 2023-03-05

### Removed

* Removed old shopify node api## v73.0.0 - 2023-03-05

### Changed

* Move use liquid template to improve performance## v72.1.1 - 2023-02-27

### Changed

* Improve connections handling and improved user experiences## v72.1.0 - 2023-02-26

### Changed

* Upgrade queue worker to make it more efficient## v72.0.0 - 2023-02-24

### Added

* Added support to use customer's AWS S3

### Changed

* Upgrade AWS sdk to improve performance## v71.3.0 - 2023-02-23

### Added

* Add support customize button on the form## v71.2.1 - 2023-02-20

### Removed

* Remove customer get## v71.2.0 - 2023-02-20

### Fixed

* Use customer get instead of search to get of email usage## v71.1.0 - 2023-02-17

### Added

* Product search speed improvement## v71.0.1 - 2023-02-17

### Fixed

* Deployment improvement## v71.0.0 - 2023-02-15

### Changed

* Converted to typescript and increased performance## v70.8.2 - 2023-01-31

### Changed

* Improve search in the admin with case insensitive for email search ## v70.8.1 - 2023-01-26

### Changed

* Made search serial numbers more efficient## v70.8.0 - 2023-01-25

### Removed

* Datadog logger in the code, use file based agent instead, this will increase performance## v70.7.0 - 2023-01-24

### Changed

* Upgrade bull to latest version to make performance better## v70.6.0 - 2023-01-22

### Changed

* Get rid of all get customer detail api, only use very minimal amount of customer data provided by customer## v70.5.2 - 2023-01-18

### Changed

* Improvement on debug output## v70.5.1 - 2023-01-09

### Fixed

* Status name is avaliable in change status## v70.5.0 - 2023-01-06

### Fixed

* Use the status name instead of status slug
* Warranty start/end date in the status email template## v70.4.0 - 2023-01-03

### Fixed

* Support Chinese characters for form and status slug## v70.3.0 - 2023-01-02

### Changed

* use base path for admin app, so it support refresh in app admin and go to the previous route/page## v70.2.0 - 2022-12-30

### Added

* Redirect embedded admin to index

### Changed

* Upgraded Polaris css## v70.1.1 - 2022-12-16

### Fixed

* No more Default title from variant in the product title## v70.1.0 - 2022-12-15

### Added

* Able to get collection product variants and sku## v70.0.0 - 2022-12-05

### Changed

* Change app name from My Product Registration to My Product Cares## v69.1.0 - 2022-11-26

### Added

* Support validate against serial number and sku## v69.0.2 - 2022-11-13

### Fixed

* Empty status will not save## v69.0.1 - 2022-11-04

### Added

* Export support accept marketing as separate column## v69.0.0 - 2022-11-04

### Added

* New integrations - sendgrid## v68.7.0 - 2022-10-27

### Fixed

* Onboarding tour in the admin## v68.6.1 - 2022-10-26

### Fixed

* Registration status note not public issue## v68.6.0 - 2022-10-24

### Added

* Added asset version hash, make it quicker to invalidate out version of the app## v68.5.2 - 2022-10-24

### Fixed

* Fixed issue with purhcase date NaN-NaN-NaN## v68.5.1 - 2022-10-20

### Fixed

* Improve POS loading speed## v68.5.0 - 2022-10-20

### Changed

* Upgrade POS and using the latest app bridge and polaris## v68.4.2 - 2022-10-19

### Changed

* Improve handling of Klaviyo## v68.4.1 - 2022-10-16

### Fixed

* Sorting by created at, updated etc## v68.4.0 - 2022-10-12

### Added

* API support getting customer's registrations## v68.3.0 - 2022-10-06

### Added

* Support created at filter with custom range
* Support search entries by customer name## v68.2.1 - 2022-09-30

### Added

* Able to delete reg on the frontend## v68.2.0 - 2022-09-28

### Added

* Server the admin app more efficently by using single js## v68.1.3 - 2022-09-26

### Added

* Audit log delete reg and form## v68.1.2 - 2022-09-25

### Fixed

* Error logging object## v68.1.1 - 2022-09-24

### Fixed

* Handle webhook order without email e.g POS orders## v68.1.0 - 2022-09-23

### Added

* Added last service date support for registration entries## v68.0.0 - 2022-09-22

### Added

* Improved frontend performance and Serve the frontend in a single js## v67.1.1 - 2022-09-21

### Fixed

* Fixed datepicker timezone issue## v67.1.0 - 2022-09-19

### Fixed

* Validation phone number against the shop default country## v67.0.0 - 2022-09-12

### Added

* Show form slug in the admin
* Support theme app extensions## v66.0.0 - 2022-09-11

### Added

* Support preview forms

### Fixed

* preview key## v65.1.3 - 2022-09-07

### Fixed

* Date issue with safari## v65.1.2 - 2022-08-23

### Fixed

* No check for multiple calls to the webhook by Shopify## v65.1.1 - 2022-08-22

### Fixed

* Not raised as error when its invalidate## v65.1.0 - 2022-08-20

### Fixed

* Bulk update now allow update pretty much all fields## v65.0.0 - 2022-08-16

### Added

* Support conditional logics in Form design## v64.0.2 - 2022-08-05

### Fixed

* Admin paging issue## v64.0.1 - 2022-08-03

### Added

* Show fields in the customers

### Fixed

* Display dob when there is dob in the reg's customer## v64.0.0 - 2022-08-01

### Added

* Support multiple checkboxes and fixed issue with dropdown in the admin## v63.1.0 - 2022-07-21

### Added

* Added support for image field, so it can display image within a the form## v63.0.0 - 2022-07-19

### Added

* Support drag and drop row in Design admin and improve product search on the frontend## v62.0.0 - 2022-07-14

### Added

* Support new entry point to the app - via customer's admin, it will show that customer's registrations## v61.0.1 - 2022-07-05

### Fixed

* Validate checkboxes, radio and dropdown, country and dropdown options fixed in form view## v61.0.0 - 2022-07-02

### Added

* Added support for edit registration in the admin## v60.0.0 - 2022-06-29

### Added

* Support for default claim form link in the frontend## v59.2.0 - 2022-06-29

### Added

* Frontend checkbox before text## v59.1.0 - 2022-06-11

### Fixed

* Improved performance of serial numbers admin## v59.0.0 - 2022-06-05

### Added

* Added admin mode, subject and sucess title in the form settings## v58.0.0 - 2022-05-19

### Added

* Support default form## v57.0.0 - 2022-05-19

### Added

* New form renderer that support flexiable columns## v56.0.0 - 2022-05-05

### Added

* Support partner friendly installation and refactored the index/home page## v55.0.3 - 2022-04-28

### Added

* Added changie to manage changelog and generate old change log


# Contact us

If you have any questions or feature requests, feel free to reach out to us via email or schedule a call. Here's how you can get in touch:

### Email Us

Send us an email at <support@productvarify.com>. To help us assist you better, please include the following details in your message:

* **Operating System**: Specify the OS you're using (e.g., Windows, macOS, Linux).
* **Browser**: Mention the browser and its version (e.g., Chrome 117, Firefox 118).
* **Steps to Reproduce**: Provide clear steps to replicate the issue or describe the feature you'd like to see.
* **App Version**: Include the app version you're using. [Learn how to find the app version](/frequently-asked-questions-faq#how-can-i-find-out-the-app-version).

The more detailed your message, the faster we can assist you. We appreciate your attention to detail!

### Schedule a Call

Prefer to discuss your questions or issues directly? Schedule a call with us using the link below:

[Schedule a Call](https://calendly.com/varify/shopify-product-registration)

We look forward to hearing from you!


# Terms & Conditions

### **Terms and Conditions**

Welcome to My Product Cares!

These terms and conditions outline the rules and regulations for the use of Vital Iteration's My Product Cares Shopify app (operated under the Varify brand), located at <https://apps.shopify.com/product-registration-1>

By accessing this app we assume you accept these terms and conditions. Do not continue to use My Product Cares if you do not agree to take all of the terms and conditions stated on this page.

The following terminology applies to these Terms and Conditions, Privacy Statement and Disclaimer Notice and all Agreements: "Client", "You" and "Your" refers to you, the person log on this app and compliant to the Company's terms and conditions. "The Company", "Ourselves", "We", "Our" and "Us", refers to our Company (Vital Iteration). "Party", "Parties", or "Us", refers to both the Client and ourselves. All terms refer to the offer, acceptance and consideration of payment necessary to undertake the process of our assistance to the Client in the most appropriate manner for the express purpose of meeting the Client's needs in respect of provision of the Company's stated services, in accordance with and subject to, prevailing law of England and Wales. Any use of the above terminology or other words in the singular, plural, capitalization and/or he/she or they, are taken as interchangeable and therefore as referring to same.

#### **Cookies**

We employ the use of cookies. By accessing My Product Cares, you agree to use cookies in agreement with Vital Iteration's Privacy Policy.

Most interactive apps use cookies to let us retrieve the user’s details for each visit. Cookies are used by our app to enable the functionality of certain areas to make it easier for people visiting our app. Some of our affiliate/advertising partners may also use cookies.

#### **License**

Unless otherwise stated, Vital Iteration and/or its licensors own the intellectual property rights for all material on My Product Cares. All intellectual property rights are reserved. You may access this from My Product Cares for your own personal use subject to restrictions set in these terms and conditions.

You must not:

* Republish material from My Product Cares
* Sell, rent or sub-license material from My Product Cares
* Reproduce, duplicate or copy material from My Product Cares
* Redistribute content from My Product Cares

This Agreement shall begin on the date hereof. Our Terms and Conditions were created with the help of the [Terms And Conditions Generator](https://www.termsandconditionsgenerator.com) and the [Privacy Policy Generator](https://www.generateprivacypolicy.com).

Parts of this app offer an opportunity for users to post and exchange opinions and information in certain areas of the app. Vital Iteration does not filter, edit, publish or review Comments prior to their presence on the app. Comments do not reflect the views and opinions of Vital Iteration, its agents and/or affiliates. Comments reflect the views and opinions of the person who post their views and opinions. To the extent permitted by applicable laws, Vital Iteration shall not be liable for the Comments or for any liability, damages or expenses caused and/or suffered as a result of any use of and/or posting of and/or appearance of the Comments on this app.

Vital Iteration reserves the right to monitor all Comments and to remove any Comments which can be considered inappropriate, offensive or cause breach of these Terms and Conditions.

You warrant and represent that:

* You are entitled to post the Comments on our app and have all necessary licenses and consents to do so;
* The Comments do not invade any intellectual property right, including without limitation copyright, patent or trademark of any third party;
* The Comments do not contain any defamatory, libelous, offensive, indecent or otherwise unlawful material which is an invasion of privacy
* The Comments will not be used to solicit or promote business or custom or present commercial activities or unlawful activity.

You hereby grant Vital Iteration a non-exclusive license to use, reproduce, edit and authorize others to use, reproduce and edit any of your Comments in any and all forms, formats or media.

#### **Hyperlinking to our Content**

The following organizations may link to our app without prior written approval:

* Government agencies;
* Search engines;
* News organizations;
* Online directory distributors may link to our app in the same manner as they hyperlink to the apps of other listed businesses; and
* System-wide Accredited Businesses except soliciting non-profit organizations, charity shopping malls, and charity fundraising groups which may not hyperlink to our Web site.

These organizations may link to our home page, to publications or to other app information so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products and/or services; and (c) fits within the context of the linking party’s site.

We may consider and approve other link requests from the following types of organizations:

* Commonly-known consumer and/or business information sources;
* Dot.com community sites;
* Associations or other groups representing charities;
* Online directory distributors;
* Internet portals;
* Accounting, law and consulting firms; and
* Educational institutions and trade associations.

We will approve link requests from these organizations if we decide that: (a) the link would not make us look unfavorably to ourselves or to our accredited businesses; (b) the organization does not have any negative records with us; (c) the benefit to us from the visibility of the hyperlink compensates the absence of Vital Iteration; and (d) the link is in the context of general resource information.

These organizations may link to our home page so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products or services; and (c) fits within the context of the linking party’s site.

If you are one of the organizations listed in paragraph 2 above and are interested in linking to our app, you must inform us by sending an e-mail to Vital Iteration. Please include your name, your organization name, contact information as well as the URL of your site, a list of any URLs from which you intend to link to our app, and a list of the URLs on our site to which you would like to link. Wait 2-3 weeks for a response.

Approved organizations may hyperlink to our app as follows:

* By use of our corporate name; or
* By use of the uniform resource locator being linked to; or
* By use of any other description of our app being linked to that makes sense within the context and format of content on the linking party’s site.

No use of Varify's logo or other artwork will be allowed for linking absent a trademark license agreement.

#### **iFrames**

Without prior approval and written permission, you may not create frames around our Webpages that alter in any way the visual presentation or appearance of our app.

#### **Liability**

We shall not be held responsible for any content that appears on your app or any loss during the usage of the app. You agree to protect and defend us against all claims that is rising on your app. No link(s) should appear on any app that may be interpreted as libelous, obscene or criminal, or which infringes, otherwise violates, or advocates the infringement or other violation of, any third-party rights.

#### **Your Privacy**

Please read the Privacy Policy

#### **Service Limits**

The Service includes reasonable storage for file uploads and serial numbers storage that covers 99.99% of typical use cases. We apply fair usage limits to ensure sustainable operation for all users.

For storage-intensive and serial numbers usage exceeding typical patterns, additional storage may be available subject to additional fees. You will be notified before any additional charges apply.

We reserve the right to adjust these service limits.

#### **Reservation of Rights**

We reserve the right to request that you remove all links or any particular link to our app. You approve to immediately remove all links to our app upon request. We also reserve the right to amend these terms and conditions and its linking policy at any time. By continuously linking to our app, you agree to be bound to and follow these linking terms and conditions.

#### **Removal of links from our app**

If you find any link on our app that is offensive for any reason, you are free to contact and inform us at any moment. We will consider requests to remove links but we are not obligated to or so or to respond to you directly.

We do not ensure that the information on this app is correct, we do not warrant its completeness or accuracy; nor do we promise to ensure that the app remains available or that the material on the app is kept up to date.

#### **Disclaimer**

To the maximum extent permitted by applicable law, we exclude all representations, warranties and conditions relating to our app and the use of this app. Nothing in this disclaimer will:

* Limit or exclude our or your liability for death or personal injury;
* Limit or exclude our or your liability for fraud or fraudulent misrepresentation;
* Limit any of our or your liabilities in any way that is not permitted under applicable law; or
* Exclude any of our or your liabilities that may not be excluded under applicable law.

The limitations and prohibitions of liability set in this Section and elsewhere in this disclaimer: (a) are subject to the preceding paragraph; and (b) govern all liabilities arising under the disclaimer, including liabilities arising in contract, in tort and for breach of statutory duty.

Except as otherwise provided in this disclaimer, we shall not be liable for any loss or damage arising from your use of the Service.


# Privacy Policy and Data Protection

Vital Iteration, operating under the brand Varify ("us", "we", or "our"), operates the My Product Cares application (the "Service").

This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data.

We provide the Service as a Data Processor on behalf of the merchants (Data Controllers) who install our app. We process data solely on the merchants' instructions and do not use end-customer data for our own purposes. By using the Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, terms used in this Privacy Policy have the same meanings as in our Terms and Conditions.

## Information Collection And Use

We collect several different types of information for various purposes to provide and improve our Service to you.

### Types of Data Collected

### Personal Data

While using our Service, we may ask you (on behalf of the merchant) to provide us with certain personally identifiable information that can be used to contact or identify you ("Personal Data"). Personally identifiable information may include, but is not limited to:

* Names
* Email address
* Customer address
* Usage Data

### Usage Data

When you access the Service by or through a mobile device, we may collect certain information automatically, including, but not limited to, the type of mobile device you use, your mobile device's unique ID, the IP address of your mobile device, your mobile operating system, the type of mobile Internet browser you use, unique device identifiers and other diagnostic data ("Usage Data").

### Tracking & Cookies Data

We use cookies and similar tracking technologies to track the activity on our Service and hold certain information.

Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Tracking technologies also used are beacons, tags, and scripts to collect and track information and to improve and analyze our Service.

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

Examples of Cookies we use:

* Session Cookies. We use Session Cookies to operate our Service.
* Preference Cookies. We use Preference Cookies to remember your preferences and various settings.
* Security Cookies. We use Security Cookies for security purposes.

## Use of Data

My Product Cares uses the collected data for various purposes:

* To provide and maintain the Service
* To notify you about changes to our Service
* To provide customer care and support
* To monitor the usage of the Service
* To detect, prevent and address technical issues

## Transfer Of Data

Your information, including Personal Data, may be transferred to — and maintained on — computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.

My Product Cares will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.

## Disclosure Of Data

### Legal Requirements

My Product Cares may disclose your Personal Data in the good faith belief that such action is necessary to:

* To comply with a legal obligation
* To protect and defend the rights or property of My Product Cares
* To prevent or investigate possible wrongdoing in connection with the Service
* To protect the personal safety of users of the Service or the public
* To protect against legal liability

## Security Of Data

The security of your data is important to us, all data is transmitted over secure channels and encrypted when necessary, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While we doing our best to protect your Personal Data, we cannot guarantee its absolute security.

## Links To Other Sites

Our Service may contain links to other sites that are not operated by us. If you click on a third-party link, you will be directed to that third-party's site. We strongly advise you to review the Privacy Policy of every site you visit.

We have no control over and assume no responsibility for the content, privacy policies or practices of any third-party sites or services.

## Children's Privacy

Our Service does not address anyone under the age of 18 ("Children").

We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Children has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.

## Changes To This Privacy Policy

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the "effective date" at the top of this Privacy Policy.

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

## Information Regarding Your Data Protection Rights Under General Data Protection Regulation (GDPR)

For the purpose of this Privacy Policy, we act as a Data Processor on behalf of the merchants (Data Controllers) who use our Service. The merchant who operates the store where you submit your information is the Data Controller responsible for your personal data.

If you are from the European Economic Area (EEA), the legal basis for the processing of your personal information is determined by the Data Controller (the merchant). As the Data Processor, we process your personal information on the Controller's documented instructions.

* We need to perform a contract with you, such as when you create a Policy with us
* You have given us permission to do so
* To comply with the law

If you are a resident of the European Economic Area (EEA), you have certain data protection rights. In certain circumstances, you have the following data protection rights:

* The right to access, update or to delete the personal information we have on you
* The right of rectification
* The right to object
* The right of restriction
* The right to data portability
* The right to withdraw consent

Please note that we may ask you to verify your identity before responding to such requests.

You have the right to complain to a Data Protection Authority about our collection and use of your personal information. For more information, please contact your local data protection authority in the European Economic Area (EEA).

## Contact Us

If you have any questions about this Privacy Policy or any questions about our data protection program, please contact us:

* By email: <info@varify.xyz>


# GDPR & Data Protection

My Product Cares takes data protection seriously. This page answers common questions about how we handle personal data and our compliance with data protection regulations including GDPR.

***

## Who is behind My Product Cares?

My Product Cares is developed and operated by **Vital Iteration**, a UK-based company, under the brand **Varify**.

***

## Are you a data controller or data processor?

Vital Iteration acts as a **Data Processor** on behalf of the merchants who install our app.

* **The Merchant (you) is the Data Controller.** You decide what data to collect by designing your own registration and claim forms. You determine the purpose, scope, and means of processing. You are responsible for obtaining appropriate consent from your end customers and for providing your own privacy notice.
* **Vital Iteration is the Data Processor.** We provide the software platform (My Product Cares) that you use to collect, store, and manage that data. We process data solely on your documented instructions and do not use end-customer data for our own purposes.

A Data Processing Agreement (DPA) formalizing this relationship is available

***

## Where is data hosted? Is data transferred outside the EU?

My Product Cares uses a combination of hosting locations:

* **Application and database**: Servers in Canada and the United States — located close to Shopify (a Canadian company based in Toronto) for low-latency communication with the Shopify platform
* **File storage and email delivery**: Cloud infrastructure in the European Union
* **Content delivery**: Global network for fast, reliable access

**Data is transferred and processed outside the EU** for the core application and database. We are committed to ensuring appropriate safeguards are in place for cross-border data transfers.

If your end customers are based in the EU/EEA and you require Standard Contractual Clauses (SCCs), these are available as part of our Data Processing Agreement.

***

## What data does My Product Cares store?

**The data stored is almost entirely determined by you, the merchant.** My Product Cares is a flexible form builder — you design your own forms and choose which fields to collect from your end customers. The only mandatory field is **email address**, which is essential for product registrations and warranty claims so that you can contact your customers. Beyond that, you have full control over what data is requested.

Depending on how you configure your forms, data may include:

* Customer identity information (name, email address, phone number)
* Address information
* Product details (product name, SKU, serial numbers, purchase date)
* Uploaded files (images, receipts, documents)
* Custom fields you define
* Warranty and claim information

**What we do NOT collect:**

* Payment card details — payments are handled by Shopify or Stripe
* Any data beyond what your forms request

***

## Who owns the data and can I export it?

**You own your data.** As the Data Controller, the data collected through your forms belongs to you. You can export your data at any time through the App admin — there is a built-in export feature that lets you download all your registrations, claims, and related data on demand, giving you full control and the ability to maintain your own backups.

***

## When is data deleted?

Data is deleted in the following circumstances:

### Shopify GDPR Compliance

My Product Cares implements all Shopify-mandated GDPR webhooks:

* **Customer data deletion** (`customers/redact`): When Shopify notifies us of a valid customer deletion request, we permanently delete all registration and claim data for that specific end customer.
* **App uninstallation** (`shop/redact`): When you uninstall the app, your shop data is anonymized and uploaded files are permanently deleted.
* **Customer data access** (`customers/data_request`): When Shopify notifies us of a customer data access request, we retrieve the relevant data and provide it to you (the Data Controller) for fulfillment.

### Manual Deletion

You can delete individual registrations, claims, and customer data at any time through the admin interface.

### Data Retention

Data is retained for as long as you use the app and require the data for your business purposes. As the Data Controller, you are responsible for defining and communicating your own data retention policy to your end customers.

***

## Do you share data with third parties?

**We do not sell or monetize end-customer data.** Data sharing is limited to what is necessary to provide the service:

### Optional Integrations (enabled by you)

| Integration         | What it does                                                                                                                                                             |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Klaviyo**         | Sends customer and registration data to your Klaviyo account for marketing automation. Only activated if you configure your Klaviyo API key and enable this integration. |
| **Mailchimp**       | Sends customer and registration data to your Mailchimp audience. Only activated if you configure your Mailchimp API key and enable this integration.                     |
| **Custom Webhooks** | Forwards registration data to a webhook URL you provide.                                                                                                                 |

No data is sent to Klaviyo, Mailchimp, or any custom webhook unless you explicitly enable those integrations.

### Service Providers (required for app operation)

We use trusted service providers for infrastructure and operations:

* Cloud hosting and storage providers
* Email delivery services
* Monitoring and error tracking services
* Bot/spam protection on forms

A full list of sub-processors is included in our Data Processing Agreement.

***

## What is your uptime and backup policy?

### Reliability

My Product Cares runs on a production infrastructure designed for high availability:

* Multiple application servers across different data centers and providers
* Automatic failover between servers
* Managed database with standby failover node (99.95% uptime)
* Zero-downtime deployments

### Backups

* **Automated daily database backups**
* **7-day point-in-time recovery** — we can restore the database to any point within the last 7 days
* Uploaded files are stored on cloud infrastructure with high durability guarantees

### Monitoring

Our infrastructure is continuously monitored with automated alerts for any issues. We run automated tests on every production deployment to verify the service is working correctly.

***

## How can end customers exercise their GDPR rights?

Under GDPR, end customers (data subjects) have rights including access, rectification, erasure, restriction of processing, data portability, and the right to object.

Since **you (the merchant) are the Data Controller**, end customers should direct their requests to you. As the Processor, we support you by:

* Providing tools in the admin interface to view, edit, export, and delete customer data
* Responding to Shopify GDPR webhooks for automatic data deletion and export
* Assisting with any data subject requests you receive

***

*For data protection inquiries, contact:* [***info@varify.xyz***](mailto:info@varify.xyz)*.* *Last updated: May 2026*


# Data Processing Agreement

**This Data Processing Agreement ("DPA")** is entered into between:

**You** (the "Merchant" or "Controller"), the entity that has installed the My Product Cares application from the Shopify App Store and uses it to collect and manage data from your end customers;

and

**Vital Iteration**, a UK-based company operating under the brand Varify ("Processor", "We", or "Us"), the developer and provider of the My Product Cares application.

***

## 1. Background

1.1 The Controller uses My Product Cares (the "App") to manage product registrations, warranty claims, and related customer interactions.

1.2 In providing the App, the Processor may process personal data on behalf of the Controller. This includes data submitted by the Controller's end customers through forms configured within the App.

1.3 This DPA sets out the terms under which the Processor will process personal data on the Controller's behalf, in compliance with the UK GDPR, the EU GDPR, and applicable data protection legislation (collectively, "Data Protection Law").

1.4 This DPA is incorporated into and forms part of the Terms and Conditions governing the Controller's use of the App. In case of conflict, this DPA prevails with respect to data processing matters.

***

## 2. Definitions

2.1 **"Personal Data"** means any information relating to an identified or identifiable natural person processed by the Processor on behalf of the Controller through the App.

2.2 **"Data Subject"** means the identified or identifiable natural person to whom Personal Data relates (the Controller's end customers).

2.3 **"Sub-Processor"** means any third party engaged by the Processor to process Personal Data on behalf of the Controller.

2.4 **"Processing"** has the meaning given in applicable Data Protection Law and includes collection, recording, organisation, structuring, storage, adaptation, retrieval, consultation, use, disclosure, alignment, restriction, erasure, or destruction of Personal Data.

2.5 Other capitalised terms have the meanings given in the Terms and Conditions or in applicable Data Protection Law.

***

## 3. Roles

3.1 The Controller determines the purposes and means of processing Personal Data. The Controller is responsible for:

* Deciding what Personal Data to collect (through form design and field configuration)
* Establishing the lawful basis for processing
* Providing a privacy notice to Data Subjects
* Responding to Data Subject requests

  3.2 The Processor processes Personal Data solely on the Controller's documented instructions and for the purpose of providing the App. The Processor does not:
* Determine the purposes or means of processing
* Sell, share, or use Personal Data for its own purposes
* Use Personal Data for any purpose other than providing the App

***

## 4. Details of Processing

4.1 **Subject matter:** Provision of the My Product Cares application.

4.2 **Purpose:** Processing data submitted through the Controller's forms and making that data available to the Controller for management within the App.

4.3 **Duration:** For the term of the Controller's subscription to the App.

4.4 **Data Subjects:** The Controller's end customers who submit data through the App's forms.

4.5 **Types of Personal Data:** As determined by the Controller through form configuration. May include (but is not limited to) name, email address, phone number, postal address, product information, serial numbers, custom form field responses, and uploaded files. Email address is the only mandatory field required for product registrations and warranty claims to enable customer communication; all other fields are at the Controller's discretion.

***

## 5. Processor Obligations

The Processor shall:

5.1 Process Personal Data only on the Controller's documented instructions.

5.2 Ensure persons authorised to process Personal Data are committed to confidentiality.

5.3 Implement appropriate technical and organisational measures as described in Annex A.

5.4 Assist the Controller in responding to Data Subject requests. The App provides tools for the Controller to access, edit, export, and delete Personal Data.

5.5 Notify the Controller without undue delay upon becoming aware of a Personal Data breach.

5.6 Assist the Controller with data protection impact assessments where required.

5.7 Delete or return all Personal Data to the Controller after the end of the provision of services.

5.8 Make information available to demonstrate compliance with this DPA and contribute to audits.

***

## 6. Sub-Processors

6.1 The Controller provides general authorisation for the Processor to engage Sub-Processors. The current list is in Annex B.

6.2 The Processor shall impose equivalent data protection obligations on Sub-Processors and remain liable for their performance.

6.3 The Processor shall inform the Controller of changes to Sub-Processors at least 14 days in advance. The Controller may object on reasonable data protection grounds. If the objection cannot be resolved, the Controller may terminate the subscription without penalty.

***

## 7. International Data Transfers

7.1 Personal Data is processed in Canada (primary), the United States, and the European Union.

7.2 Where transfers involve a country without an adequacy decision, the Processor shall ensure appropriate safeguards are in place, such as Standard Contractual Clauses. SCCs are available upon request.

***

## 8. Security

8.1 The Processor maintains technical and organisational measures as described in Annex A to protect Personal Data.

8.2 These measures are regularly reviewed and tested for effectiveness.

***

## 9. Data Breach Notification

9.1 The Processor shall notify the Controller without undue delay (within 48 hours) after becoming aware of a Personal Data breach.

9.2 The notification shall describe the nature of the breach, likely consequences, and measures taken or proposed.

9.3 The Processor shall cooperate with the Controller in meeting notification obligations to supervisory authorities and Data Subjects.

***

## 10. Data Retention, Deletion, and Return

10.1 Personal Data is retained for the duration of the Controller's subscription. The Controller owns all data collected through the App and may export it at any time using the built-in export feature in the App admin interface.

10.2 **Upon app uninstallation**, the Processor will anonymise shop and customer records and permanently delete all uploaded files.

10.3 **Upon a valid Data Subject erasure request**, the Processor will permanently delete the relevant data (via Shopify's GDPR compliance webhooks).

10.4 The Controller may also delete individual records at any time through the admin interface.

***

## 11. Audit Rights

11.1 The Controller may audit the Processor's compliance with this DPA up to once per calendar year, with at least 30 days' written notice, during normal business hours, and without unreasonable disruption.

11.2 The Controller may engage an independent auditor subject to confidentiality obligations.

11.3 The Controller bears the cost of audits unless a material breach is found.

11.4 As an alternative, the Processor may provide a security assessment summary or respond to a reasonable security questionnaire.

***

## 12. Liability

12.1 Each Party's liability under this DPA is subject to the limitations in the Terms and Conditions, except for liability that cannot be excluded or limited by law.

***

## 13. Term and Termination

13.1 This DPA commences when the Controller begins using the App and continues until all Personal Data is deleted or returned.

13.2 Clauses concerning confidentiality, breach notification, and audit rights survive termination.

***

## 14. Governing Law

14.1 This DPA is governed by the laws of England and Wales, and the parties submit to the exclusive jurisdiction of the courts of England and Wales.

***

**By installing and continuing to use My Product Cares, you acknowledge and agree to this Data Processing Agreement.**

***

## Annex A — Technical and Organisational Security Measures

### Access Control

* Access to production systems is restricted to authorised personnel using secure key-based authentication
* Application-level access is scoped by store, ensuring data isolation between different Controllers
* Admin access is authenticated through Shopify OAuth, ensuring only authorised store administrators can access their store's data

### Data Transmission

* All data is encrypted in transit using HTTPS/TLS
* Email delivery uses encrypted connections
* Internal service communication uses secure channels

### Data Storage

* Databases use encryption at rest
* Cloud file storage uses server-side encryption
* Sensitive configuration data (API keys, tokens) is never stored in code repositories

### Availability and Resilience

* Multiple application servers across different data centres and providers
* Automatic failover between servers
* Managed database with standby failover node (99.95% uptime)
* Automated daily database backups with 7-day point-in-time recovery
* Zero-downtime deployments

### Data Integrity

* Database integrity is enforced through schema constraints
* Input validation is performed at the application layer
* Automated testing on every production deployment

### Data Separation

* Each Controller's data is logically separated, ensuring no cross-Controller data access

### Incident Response

* Real-time error monitoring with automated alerts
* Infrastructure monitoring and log aggregation
* Automated health checks on all services

### Secure Development

* Code changes go through automated testing pipelines
* Dependencies are regularly reviewed and updated
* Rate limiting and input sanitisation at the application layer

***

## Annex B — Sub-Processors

| Sub-Processor                  | Service                                       | Location       |
| ------------------------------ | --------------------------------------------- | -------------- |
| Cloud hosting provider         | Application servers                           | Canada         |
| Cloud hosting provider         | Application servers                           | United States  |
| Cloud infrastructure provider  | File storage, email delivery, message queuing | European Union |
| Payment processor              | Subscription billing                          | Global         |
| Bot protection service         | Form spam prevention                          | Global         |
| Content delivery and security  | CDN, DDoS protection                          | Global         |
| Error monitoring service       | Crash reporting and diagnostics               | European Union |
| Performance monitoring service | Application monitoring                        | European Union |
| Email delivery service         | Email delivery                                | European Union |

***

*For questions about this DPA, contact:* [***info@varify.xyz***](mailto:info@varify.xyz)*.* *Last updated: May 2026*


# Overview

## Introduction

Product registration allow customers to register purchased products from online or in a physical shop,

More information about the customer who bought the products, therefore better understand customer.

Reasons for customer register products

* Warranty - We’re confident nothing will go wrong, but if it does, we’ll make it right.
* Support - Get the most from your products with easy access to email and more.
* Offers & Updates - Get special offers, new products or feature updates.

## Overview

The system is divided into two parts, one is customer facing and the other is for shop admin.

![overview](/files/-M4QrtzwAS27yPc3C-A1)

### [Registration page - Frontend](/v1-shopify-product-registration/frontend-page)

Registration page is in the shop front that customer can see and use it to register products, it allow customer to register multiple products and supply revelent customer information.

### [Admin - Backend](/v1-shopify-product-registration/admin)

Show the registered products and provide settings for different part of the app e.g whether send email to customer or not after registraton; Provide intruction for how to find product's serial number etc.

### Flow

Here are the steps of the flow.

1. Customer fill in the registration form on the shop frontned page.
2. Product detail, serial number and customer information is send to the app server.
3. App server save those details.
   1. Send out a thanks email to customer for the registration.
   2. Send out a notification email to shop admin about the notification.


# Registration Page

This is the page customer see when they go to registration page (the page is automatically created after the app is installed, its should be in the following address **/apps/product-registration**, note: it will be in different address if the app proxy is changed manually - don't worry about it if it doesn't mean anything).

e.g If the shop url is: **mymart.shopify.com**, the registration page will be: **mymart.shopify.com/apps/product-registration**

The page is divided into different parts

## Introduction Text

The is the introduction text that list the benefit of product registration or any information you want customer to see - by default the app generated a generic text for it, but it can be change in the admin settings.

![](/files/-M4QrslUnegburN3lels)

## Product Info

This part collect product information

* Product Name
* Product Serial Number
* Purchase Date

The product name provide autocomplete function which means customer only need to type in some keywords of the product, the app will use those keywords to search products in the shop, then presented as selections for customer.

Obviously some of the products might not be in available in shopify shop, in these case the app will simply take whatever the product name customer supplied.

## Extra Fields

These are the additional product information you might want to gather, see [extra field admin](/v1-shopify-product-registration/admin/settings/general-settings) settings for more information about how to set it up.

## Product Listing

Allow customer to register multiple products in one go, it list all products customer entered, so there is a clear visibility of what will be register.

![](/files/-M4QruPZ5nU2YGU9RPFJ)

## Customer Form

Collect more information about the customer e.g names, address and phone number.


# Claim Warranty

Its also to have claim warranty form for customer to claim the product warranty.

The url for the claim warranty **/apps/product-registration?form=claim-warranty**

These fields are complete customisable, checkout the [admin](/v1-shopify-product-registration/admin/claim-form) for how to set it up, list and manage warranty claims.

![](/files/-M4QruBVPu19tqLjRuss)Note: If the shop url is: **mymart.shopify.com**, the Claim Warranty page will be: **mymart.shopify.com/apps/product-registration?form=claim-warrant**


# Admin

Allow shop admin to view all registered products, customer information for each registration and view/change settings for the app.

The functionalities are divided into three parts:

## [Registrations](/v1-shopify-product-registration/admin/registrations)

A table show all product registrations

## [Serial Numbers](/v1-shopify-product-registration/admin/serial-numbers)

For manage serial numbers on the system

## [Settings](/v1-shopify-product-registration/admin/settings)

Settings for the app


# Registrations

## Registrations

![](/files/-M4QrwqsrL36dKRhmqt_)

## Product

If the registered product is in the shopify shop, the product name will be a link that link to that specific product in the product admin.

It will show normal text if the product is not on the system.

## Customer

When the registered customer is already existed on the system, it will show a link to the customer admin (email address is used to match existing customer on the system).

## Actions

#### View Details

Allow a more detail view for the specific registration - e.g Extra fields associate with the product and more detailed customer information.

#### Change Status

Able to change status for the specific registration, when the customer completed registration the status is default to request, however its possible to change to others like 'Confirmed' or 'Processed' for internal book keeping

![](/files/-M4QrwquWQ9jhB8qo9KA)

#### Delete Registration

Delete the selected registration

## Export as CSV

Export the current registration table as CSV file, the file will contain extra fields associate with the product. Its also possible to filter to specific entries by using the filter in the table.

### Add Registration

Once the add registration is enabled in the App > Settings > General > Show Add Registration, then the add registration button will be appear on the top right corner.

![](/files/-M4QrwqwOC9wOAynzcyd)

The is effectively the same as frontend registration from, however there are a few difference. e.g once the logged in user is have **product-registration-admin** (once the tag is there, then the **customer and admin won't receive any emails**)

![](/files/-M4QrwqyOODfm3wSMKUX)


# Serial Numbers

## Serial numbers

Serial number is a unique identifier for the specific product customer bought - e.g every customers bought a 2017 Mercedes C200 sport car will have a unique number that identify the car they have, this is the serial number, hence its important to handle it and validate it to make sure its from a genuine customer.

![](/files/-M4Qrx_m44iAxURMx2xT)

#### Serial number

this is the unique identifier for the product - e.g the QWERTY-123456

#### SKU (optional)

the generic identifier for the product - e.g an iPhone 8 might be APPIPHONE8-2

#### Customer Tags (optional)

The tags apply for the customer that register with specific serial number - e.g customer bought iPhone 8 with serial number QWERTY-123456 can be tagged as 'new, vip'. This for connivence customers management and need to turn on the setting for it to work.

## Add new serial numbers

New serial numbers can be add using CSV file for bulk import or there are only handful of entry its easier and faster to enter them in the app admin as shown at the bottom of above screenshot.

## Upload serial numbers in CSV

Using CSV upload If there are thousands of serial numbers needed to important into the system. This is a very simple process - a CSV with the following format is needed.

\| **serialNumber** | sku | customerTags |

\| SN12345678 | MERC | new,vip |

\| SN12345678 | VOLVO | new |

**The heading have to be the exact wording, only serialNumber is required -**&#x20;

**serialNumber**: Number or string - required

**sku**: Number or string - \[optional]

**customerTags**: Number or string, multiple tags are separated by comma - \[optional]

### [Sample CSV](https://s3-eu-west-1.amazonaws.com/product-registration/Product+registration+serial+number+csv+-+MPR.csv)

## Validation

Once the serial numbers are imported into the app, its possible to validate the serial number customer entered against the serial number imported - this is optional and require setting to turn on

![](/files/-M4Qrx_ouMopdLfE-fF-)

In the Settings admin, turn on the serial number validation to allow customer have valid serial number to register.

The customer tags can also be turn on in the settings - this will tag customer with tags for that specific serial number entered.

## Actions

There are actions available for each serial number entry, its possible to update serial number, SKU and customer tags and delete the entry.


# Serial number with file download

Sometimes it's desirable to associate the serial number with file download - e.g Manuals, for example, you want customers registered with specific serial numbers to see their instruction manual PDF after they register the product

## Setup

First, you will need to prepare the serial number CSV but with an extra column called **data**&#x20;

{% embed url="<https://doc.product-reg.varify.xyz/admin/serial-numbers#upload-serial-numbers-in-csv>" %}

So the new CSV will have the follow format

&#x20;|**serialNumber** | sku | customerTags | data\_download\_Manual |

\| SN12345678 | MERC | new,vip | <https://example.com/merc\\_manual.pdf> |

\| SN12345678 | VOLVO | new | <https://example.com/volvo\\_manual.pdf> |

The data\_download\_Manual will a URL link to the pdf file itself, **Manual** will be the name showing in the frontend

{% file src="/files/-MhIAypoXSTpC9DABIZF" %}
Sample Serial Number CSV with file download link
{% endfile %}

Once the serial number CSV is upload to the app, then will need to enable the show serial number data to the frontend in the App admin > Settings > General > Show registered serial numbers data for registered products is, then Save Settings at the bottom

![](/files/-MhIBXTKzdivCX7_32RB)

Then whenever customers register with that specific serial number, they will see the download link in their registered products (the registered products will be shown on the registration page by default if the customer is logged in and have registered products, or it can be shown registered products on the account page, please see [https://doc.product-reg.varify.xyz/admin/settings/registration-in-account](/v1-shopify-product-registration/admin/settings/registration-in-account)


# Warranty

Adding warranty information for each product, so customer can see their when their warranty expired after they do registration

### Setup product warranty period

Each product can have different warranty period, hence the warranty period will need to set up at product level using **product tags**&#x20;

Open the Shopify admin > Products > Product and add new tags to the product to indicate the warranty period

![product with warranty period tag](/files/-MfHXuZwEoAysAnWu_8z)

The product tags have to be in the following format

**warranty:{duration}**

**warranty** - this is fixed

**duration** - consist of two parts a number and a unit, separated by a space e.g **1 year**

#### Example product tags

Here are some example valid product tags

* warranty:1 year
* warranty:2 years
* warranty:6 months

### Show warranty info

Once the product is setup with warranty period and the customer registered that product, it will calculate the warranty expiration date based on **registration date + warranty period**

If you want customer to see the warranty expiration date, you have to enable it in the App admin > Settings > General > Show customer warranty

![](/files/-MfHZoSRKApEvj9o3ZGm)

Once its enabled, **Save settings** at the bottom

After the the setting is enabled, the customer can see the warranty information in the frontend - **Registered Products**&#x20;

![Customer's view of warranty](/files/-MfHadfW6E8NxdLnhn7M)

### Languages

Its possible to change wording for warranty in the App admin > Settings > Languages, search for warranty. Don't forget to **Save Settings** after changed languages


# Claim Warranty Form

Sometimes its desirable to have claim form that compliment to the registration form. The claim form allow customer to claim warranty.

## How to enable it

Go to **App admin > Settings > Claims Form**

![](/files/-M4QruBREI0UPl0YDg9o)

After the Claims form is enabled and **Save Settings** the page will reload and **Claims admin** tab will appear

## Frontend Claims Form

This is what the customer see and the link on the Claims admin or it can be access using the following url **/apps/product-registration?form=claim-warranty**, here is what it look like without any configuration - see the Claims admin about how to customise the form

![](/files/-M4QruBVPu19tqLjRuss)

## Claims Admin

Here is the place to manage claim form and see all the claims customer filled.

![](/files/-M4QruBXyq8xJsq8oZnm)On the top right, there is a link to see the claim warranty page on the frontend - **This is the form customer will see**

### Data

This table contain all the claims filled by customer

### Settings

This is how the claim form get customise.

The extra field is same as in the one in **Settings > General Settings > extra fields**, check out it on the documentation.


# Settings

View/change settings for the app - **Remember to save after changes**

![settings](/files/-M4QrxQIjM-1JfHkqvS-)

## General Settings

Settings for the behaviour of the app.

## Languages

Customise the store frontend language strings.

## Introduction Page

This is the content for the introduction section on the product registration page, change this to match your requirement.

## How to find serial number

Instructions can be provide to inform customer how to find product's serial number.

![settings](/files/-M4QrxQLRpxd6xcnfONK)

If the content in this section is empty, it won't show anything to customer, however if there is content it will show a info prompt on the registration page that customer can click to see the intructions in this section. Here is what it look like in frontend (the **i**)

![settings](/files/-M4QrxQNd_X38zpYVjxJ)

## To customer email

By default a thanks email will send to customer after registration, but this functionality can be turn on or off by using the switch button.

Email content can be change as well. **Remember \[registered-products] will get replace by the actual registered products**

See next section fro what the \[registered-products] looks like.

## To admin email

By default a notification email will be send to shop admin on new registration, but this functionality can be turn on or off by using the switch button provided. Email content can be change as well. **Remember \[registered-products] will get replace by the actual registered products**

Here is an example of what \[registered-products] will be replace by


# General Settings

Settings for the behaviour of the app

## Admin Email

By default a notification email will send to shop admin on new product registration, this is the email address of the email will be send to.

## Default Country

The default country in the customer address from when customer fill in the address on the frontend.

## Account Creation

Ability to create new customer account on new registration

## Tag Customer

Its possible to tag customer with the customer tags for the serial number during registration, this provide a convenient way to filter out customer base on serial number, see [Serial Numbers](/v1-shopify-product-registration/admin/serial-numbers) for more information

Note: customer will need to logged in or account creation setting is enabled.

## Validate Serial Number

Setting for turn on validation for serial number, once this setting is enabled only customer with valid serial number can register their product - this is very useful to filter out bogus registration and only genuine customer will able to register.

Serial numbers will need to import into the system for it to work, see [serial numbers](/v1-shopify-product-registration/admin/serial-numbers) for more detail.

**Note: no one will allow to register if this setting is enabled and there are no serial numbers on the system.**

### One Time Serial Number

Once the validate serial number is enabled, the one time serial number setting is available - with this setting the serial number can only use once, after first registration, the serial number on the subsequent registration will deem as invalid.

## Multiple Serial numbers

Setting for customer to enter multiple serial number at once - e.g customer bought 10 same laptop, but each laptop will have unique serial number, turn on this setting will save customer a lot of time.

## Optional Address

Make the address option when customer register their product when its enabled.

## Limit Product search

The product search field on the frontend allow customer to search all the products on the store, however there are cases where you want to limit the search to specific products that allow to register, by enable this setting, its possible to limit the search into specific collections

![](/files/-M4QrslN4-weHPLLM3-0)Here is the guide to make [collection on Shopify](https://help.shopify.com/manual/products/collections/manual-shopify-collection)

## Auto Registration

Sometimes its desirable to register the product after checkout is completed and order created (e.g for products that have life time warranty), this setting allow auto registration - **the order number will become serial number** - because at order complete the product is not picked yet, so there is no way to know the serial number that identify the specific product customer bought.

![](/files/-M4QrslPWmSY771RfsZt)

Once the auto registration is enabled, its possible to limit the registration to certain SKUs

## Show Add Registration in Admin <a href="#extra-fields" id="extra-fields"></a>

Enable this will show add registration on the registrations tab in the app admin

## Data Collection Consent

By default the form is GDPR compliant, because this is very specific clear this is about product registration, hence no consent is needed to collect data, however if double confirm is needed as peace of mind, this option can be enable, once its enabled there will be extra checkbox at the registration from asking for specific data collection permission.

The language of the text and be change in the App Admin > Settings > Languages

## Extra Fields <a href="#extra-fields" id="extra-fields"></a>

Able to set up extra fields for product, there is no limit on number of extra fields, but its not good practice to overwhelm customers.

Simply add the name of the extra field and specify what type of field it should be.

At the moment three type are supported, more type support will be added in the future.

* **Text** - Will present customer with text input box.
* **Selection** - Will present a dropdown selection, tick the **other** checkbox allow customer input custom option.
* **Image** - Will allow customer to upload images.

![](/files/-M4QrslSi9e99C2-zlXs)

Here is what it look like in the frontend.

![](/files/-M4QrslUnegburN3lels)


# Registrations In Account Area

For logged in customer, its possible to show their registered products in the account area or anywhere that's suitable. This will required some knowledge of shop's theme and able to make changes to the theme's HTML.

Here are the steps for putting product registrations in account area:

* Go to Shop Admin > Online Store > Themes
* Select the Edit HTML/CSS on the top right corner

![](/files/-M4QrswzHrzpVwRSDCPc)

* Locate the template registration should in (e.g customers/account.liquid - This is the same account page that shows order history)

![](/files/-M4Qrsx0i76RhUjbnPYl)

* Place the following code into the right place - Make sure it doesn't break the HTML, always good to place it after close tag

```
<div id="my-product-registration"></div>
<script type="text/javascript">
window.productReg = {
        customer: {
                id: {{ customer.id | json }},
                email: {{ customer.email | json }},
                address: {{ customer.default_address | json }},
                tags: {{ customer.tags | json }},
         }
}
</script>
<script type="text/javascript" src="https://product-reg.varify.xyz/dist/product-registration.js"></script>
```

* Now save the changes and check your changes in the frontend.


# Custom From Email

The app will send out emails to emails to customer and the admin when there is a new registration, by default the from email address for this email is set to **<mailer@varify.xyz>**

Its good practice and better brand recognise for customer if the from address if from your domain.

The app use Amazon Email service to send out emails, because the problem with spams and identity, all from emails will need to verify to confirm the real identity and ownership.

The verification involve a few steps:

Go to Admin > Apps > My Product Registrations > Settings > Select Admin email, here a new from email can be set.

![](/files/-M4QrvtShIXoJPJZa3Wo)

1. Put in the email address in the box, then click **Verify Email Address** - Amazon will send a verification email to that email.
2. Go to your inbox, and click on the verify link.
3. Once its verified, go back to the app admin, and click **Confirm Verification.**
4. Finally click **Save Settings** to finish it, from now all from email will be from your custom email address.


# Navigation

Add product registration link to shop's navigation

Go to S**hop Admin > Online Store > Navigation**

![](/files/-M4QrwbBfYAqK3LMPkES)

The select **Main Menus** (or the equivalent name for the shop if it has been changed)

Finally add a **new menu item** to your navigation, make sure select **web address** for link and make it point to **/apps/product-registration**

![](/files/-M4QrwbFAdnrYCHvrSRy)

Now the product registration link will appear in shop's navigation

![](/files/-M4QrwbHV3AznFJslKar)


# Customer Admin Link

As part of deep integration, its possible to see each customer's product registration in the customer admin, just click in link under more actions.

![](/files/-M4QrvNhGsbVhF_yqXl9)


# Add registrations for customer

This functionality allow shop admin add registrations for customer without sending out **emails to customer**, this is often the case when registration is collected or migrate exiting registration etc.

This process is very easy, essentially involve 3 steps.

1. Tag the admin user with "**product-registration-admin**"
2. Login to shop frontend with admin user with the tag
3. Go to registration page and do registration

Tag admin user

Go the the Shopify customers admin and tag the user with tag "**product-registration-admin**" (don't forget to save the change)

![](/files/-M4QrutyeitRmI-_ytR1)

then login as the admin user on the **shop front** (not shopify admin), then go to the registration page like normal customer.


# Webhook

This is for you to integrate it with your system like ERP etc.

The webhook have to be using secure connection, there for only **HTTPS** address is accepted.

## Setup

Webhook can be setup in the App Admin (Shopify Admin > Apps > My Product Registration) > Settings > Advance Settings

![](/files/-M4Qrx78xKVPzs7mC0f_)

Once webhook is setup, every time there is registration, the app will send a **HTTP POST** request to the webhook address with the following payload.

```
{
  "type": "product-registration",
  "items": [
    {
      "product": {
        "id": 11651617295,
        "title": "Short sleeve t shirt",
        "handle": "short-sleeve-t-shirt",
        "imageUrl": "https://cdn.shopify.com/s/files/1/1893/1973/products/mens-dark-grey-long-sleeve-basketball-t-shirt-p18984-15470_image.jpg?v=1498345705"
      },
      "purchaseDate": "2018-05-28T10:58:17.597Z",
      "serialNumbers": [
        "123"
      ],
      "extraFields": [
        {
          "name": "Title",
          "type": "text",
          "value": "Mr"
        },
        {
          "name": "where did you buy it?",
          "type": "selection",
          "value": "Ebay"
        },
        {
          "name": "Upload Image (Receipt)",
          "type": "image",
          "value": "https://www.example.com/test.jpg"
        },
      ]
    }
  ],
  "customer": {
    "name": "James Hunt",
    "firstName": "James",
    "surname": "Hunt",
    "email": "james@hunt.com",
    "address1": "1 Highstreet",
    "address2": "Haham",
    "city": "New York",
    "country": "US",
    "state": "NY",
    "postCode": "1234567",
    "phone": "1234567",
  }
}
```


# Import/Migrate Registrations

Because every import and migration from previous system is different, so we might need some custom development to import/migrate from previous system

In order for us to do that, please provide the registrations in a CSV with the format like the following sample

{% file src="/files/-MLN-En0eMnBe\_CFEaVD" %}
Sample registration import CSV
{% endfile %}

Please make sure the CSV is with the right format

**Everything is extra field need to have extraField\_ prefx\***\ <br>


# API

If you ever need to add registrations or serial numbers programatically, there is an API for it.

## Generate Access Token

Access token can be obtain in the Shopify Admin > Apps > My Product Registration > Settings > Advance > Generate Token

![](/files/-M4QrwAn5CfPIIJk7GWt)

## Usage

### Registrations - add new (POST)

Once the access token is generated, it can be use to register a new product

1. Make an **HTTP POST request** to the endpoint - <https://product-reg.varify.xyz/api/registrations>
2. The POST request should have the following **JSON payload**

```
{
    "accessToken": "12323213123",
    "registrations": [
        {
            "productName": "MacBook 2018",
            "customerEmail": "tom@example.com",
            "customerName": "Tom Delong",
            "serialNumbers": [
                "123",
                "321"
            ],
            "purchaseDate": "2019-01-01",
            "extraFields": {
                "extra_field_name_in_lower_case": "extra_field_value",
                "extra_field_name_in_lower_case_2": "extra_field_value_2",
            }
        }
    }
```

It's possible to register multiple products in one call - simply add another registration object to the registrations array.

If there are extra fields - make sure the **extra field name** is used and it's in **lowercase**

Extra field name - this can be found in the webhook payload or admin extra fields (make sure its exact name in lowercase)

### Registrations - Modify existing registration (PUT)

Once the access token is generated, it can be used to modify existing registration (the registration id can be found in the admin or via the webhook payload)

1. Make a **HTTP PUT request** to the endpoint - [https://product-reg.varify.xyz/api/registration](https://product-reg.varify.xyz/api/registrations)/:regId
2. The PUT request should have the following **JSON payload**

```
{
    "accessToken": "12323213123",
    "registration": {
            "productName": "MacBook 2018",
            "customerEmail": "tom@example.com",
            "customerName": "Tom Delong",
            "serialNumbers": [
                "123",
                "321"
            ],
            "purchaseDate": "2019-01-01",
            "extraFields": {
                "extra_field_name_in_lower_case": "extra_field_value",
                "extra_field_name_in_lower_case_2": "extra_field_value_2",
            }
    }
}
```

If there are extra fields - make sure the **extra field name** is used and it's in **lowercase**

### Serial Numbers

Here is example the payload for adding serial numbers

```
{
    "accessToken": "12323213123",
    "serialNumbers": [
        {
            "serialNumber": "22018",
            "sku": "mac123",
            "customerTags": "VIP,mac",
        }
    }
```

The customerTags is a comma-separated of tags you want to tag the customer who register this serial number


# POS (Point Of Sales)

The app also available on POS, once the app is installed you will able to see it on the POS app and order completed screen

## Order complete

the **...** (three dots) on the top right, My Product Registration app will be available

![](/files/-M4QrwMnMwIUHLnWkPFg)

Once the app is open you can enter the serial number for each items in the order

![](/files/-M4QrwMpASt6225s8qP8)


# Integrations

We provide integration to other platform, so its possible to setup the app send email and other data on the registration form to a 3rd party like Marketing platform like Klaviyo

**We will be adding new integration regularly**


# Klaviyo

Allow customer's email and extra fields details send to Klaviyo

**Klaviyo will send out an email to customer ask them to confirm the subscribe** (this is in additional to the registration confirmation email sent out by the app after successful registration

### Find the **Private Key** on the Klaviyo

1. Login to Klaviyo
2. Go to Account
3. Go to Settings&#x20;
4. Go to API Keys
5. Generate a new **Private Key**

### Set up the app with Private Key

1. Go to Shopify Apps admin&#x20;
2. Go to My Product Registration
3. Settings > Advance&#x20;
4. Klavio integration > put in the **Private Key**
5. **Fetch Lists** - this will fetch the lists on Klaviyo
6. Select a list&#x20;
7. Scroll to the bottom and **Save Settings**

### **Checkbox ask for consent**

Once the integraton is setup, it will added a new checkbox on the from - ask customer permission t send data to 3rd party integration

The language of the checkbox can change in the App admin > Settings > Languages > **Send Data To Third Party,** please change it to match your requirement


# Frequently Asked Questions (FAQ)

## Can I combine all forms into one page rather than currently two step approach?

Its by design that it will take customers to second page that will show them the products they have entered and more details they need to enter.

Although you made extra fields (names, address and email) on the first input form, its better to delete these fields and use those fields on the second page.

* The customer fields on the second page is validated, e.g email address is validated to make sure its an email, country and states drop down etc.
* The second page allow customer to register multiple products/warranties, also provide them to review it before submit.
* By removing those the extra fields you setup on first input will make the first input form smaller which make customer engagement easier.

More importantly the second page customer form provide a consistent fields to collect customer information which is essential (those extra fields can be delete or added in the future that will cause data to be inconsistent)

## How to hide the Serial Number field?

You can hide the serial number field by adding the following CSS styling code to your theme.

`#mpr-product-inputs .form-group:nth-child(2) {`

`display: none;`

`}`

1. Shopify Admin > Online Store > Themes > Current Theme > Actions > Edit Code

   ![Screen Shot 2018-04-17 at 18.35.29.png](https://mail.google.com/mail/u/0?ui=2\&ik=83c03f499a\&attid=0.1\&permmsgid=msg-a:r6806864293158755149\&view=fimg\&sz=w1600-h1000\&attbid=ANGjdJ-yzx96Cpmmx0ZFpo_OpJAMCqJA3YMgN6NWTykvuhnBvpaB7OoaClfMrj1Kjx4YSmnMWMIwong5Xj_e9Q2nBgkl4AXBpPTAzOCyGEe6rTKwVTcsgs4vl5m2UQk\&disp=emb\&realattid=162d4b1a652f972298d3)
2. In the theme editor search for "**style**" or "**scss**" , you will see a file name "**styles.scss.liquid**" or "**main.scss.liquid**" show up under **Assets**
3. Open the file and then copy the above code to the bottom of the file, then **Preview** it, **Save** it once you happy with the result.

   ![Screen Shot 2018-04-17 at 18.38.24.png](https://mail.google.com/mail/u/0?ui=2\&ik=83c03f499a\&attid=0.2\&permmsgid=msg-a:r6806864293158755149\&view=fimg\&sz=w1600-h1000\&attbid=ANGjdJ9wPRaE6Jnmbp3dljeehviW4LiDq5K4cvHSI-nmXsizO4O3DJxCT4f71nNpW5cocF_AgQBjlnKGiGlJvNMPu6-L_EWJ2K6MlJ0D-enloCaWAjvcwWFkEXNC90w\&disp=emb\&realattid=162d4b3cf6c30cf3aa54)

## How to hide the product field?

~~Please see the how to hide serial number field above, but using the following code instead~~

`#mpr-product-inputs .form-group:nth-child(1) {`

`display: none;`

`}`

There is a settings in App Admin > Settings > General to for hide the product field.

## How to hide the registration date field?

Please see the how to hide serial number field above, but using the following code instead

`#mpr-product-inputs .form-group:nth-child(3) {`

`display: none;`

`}`

## How to make the product name as a dropdown list

To enable a customer to select a list of products within a dropdown, it will have to do two things

1. Create a collection that contains all the products you want to appear in the dropdown list, also make sure this list is not visible on frontend if you don't want display on the frontend, here is how you can[ create Collection in Shopify](https://help.shopify.com/manual/products/collections/manual-shopify-collection)
2. Once the collection is created, you will need to go to App Admin > Settings > General > Enable Limit Product Search, then enable the dropdown mode and select a Collection, finally **Save Settings** at the bottom of the page

![](/files/-M4QrtV0gzdvTqdvQjf7)

## I like the app, how do I write review for it

Glad you like the app, we work hard to make it better everyday.

You can using the following link or in the **Shopify Admin** > **Apps** > **My Product Registration** > **View Details** > **Write Review**.

[https://apps.shopify.com/product-registration-1](https://github.com/apps.shopify.com/product-registration-1/README.md)


# Change Logs

### v55.0.0-types-changes - 2022-04-21 <a href="#h2-v55-0-0-types-changes-2022-04-21" id="h2-v55-0-0-types-changes-2022-04-21"></a>

### v54.0.0-customer-listing - 2022-04-14 <a href="#v54.0.0-customer-listing-2022-04-14" id="v54.0.0-customer-listing-2022-04-14"></a>

### v53.0.0-migration-v2-available - 2022-04-11 <a href="#v53.0.0-migration-v2-available-2022-04-11" id="v53.0.0-migration-v2-available-2022-04-11"></a>

### v52.0.0-skip-customer - 2022-04-07 <a href="#v52.0.0-skip-customer-2022-04-07" id="v52.0.0-skip-customer-2022-04-07"></a>

### v51.0.0-frotned-styling-changes - 2022-04-04 <a href="#v51.0.0-frotned-styling-changes-2022-04-04" id="v51.0.0-frotned-styling-changes-2022-04-04"></a>

### v50.3.0-auto-expire-regs - 2022-03-28 <a href="#v50.3.0-auto-expire-regs-2022-03-28" id="v50.3.0-auto-expire-regs-2022-03-28"></a>

### v50.2.0-admin-server-table - 2022-03-11 <a href="#v50.2.0-admin-server-table-2022-03-11" id="v50.2.0-admin-server-table-2022-03-11"></a>

### v50.1.0-add-reg-in-admin-with-token - 2022-03-04 <a href="#v50.1.0-add-reg-in-admin-with-token-2022-03-04" id="v50.1.0-add-reg-in-admin-with-token-2022-03-04"></a>

### v50.0.1-html-label-real-claim-slug - 2022-02-25 <a href="#v50.0.1-html-label-real-claim-slug-2022-02-25" id="v50.0.1-html-label-real-claim-slug-2022-02-25"></a>

### v50.0.0-remove-sessions - 2022-02-03 <a href="#v50.0.0-remove-sessions-2022-02-03" id="v50.0.0-remove-sessions-2022-02-03"></a>

### v50.0.0-general-work-queue-import-regs - 2022-01-19 <a href="#v50.0.0-general-work-queue-import-regs-2022-01-19" id="v50.0.0-general-work-queue-import-regs-2022-01-19"></a>

### v49.0.0-polaris-admin - 2021-12-02 <a href="#v49.0.0-polaris-admin-2021-12-02" id="v49.0.0-polaris-admin-2021-12-02"></a>

### v48.0.0-worker - 2021-11-28 <a href="#v48.0.0-worker-2021-11-28" id="v48.0.0-worker-2021-11-28"></a>

### v47.0.5-rate-limiter - 2021-08-10 <a href="#v47.0.5-rate-limiter-2021-08-10" id="v47.0.5-rate-limiter-2021-08-10"></a>

### v47.0.4-dd-tracer - 2021-08-04 <a href="#v47.0.4-dd-tracer-2021-08-04" id="v47.0.4-dd-tracer-2021-08-04"></a>

### v47.0.3-timezone-support - 2021-08-03 <a href="#v47.0.3-timezone-support-2021-08-03" id="v47.0.3-timezone-support-2021-08-03"></a>

### v47.0.2-change-asset-bucket - 2021-08-03 <a href="#v47.0.2-change-asset-bucket-2021-08-03" id="v47.0.2-change-asset-bucket-2021-08-03"></a>

### v47.0.1-collection-all-products - 2021-07-23 <a href="#v47.0.1-collection-all-products-2021-07-23" id="v47.0.1-collection-all-products-2021-07-23"></a>

### v47.0.0-warranty - 2021-07-20 <a href="#v47.0.0-warranty-2021-07-20" id="v47.0.0-warranty-2021-07-20"></a>

### v46.0.1-redis-cache - 2021-07-19 <a href="#v46.0.1-redis-cache-2021-07-19" id="v46.0.1-redis-cache-2021-07-19"></a>

### v46.0.0-phone-validation-on-server-side - 2021-07-08 <a href="#v46.0.0-phone-validation-on-server-side-2021-07-08" id="v46.0.0-phone-validation-on-server-side-2021-07-08"></a>

### v45.0.0-sn-lookup - 2021-07-06 <a href="#v45.0.0-sn-lookup-2021-07-06" id="v45.0.0-sn-lookup-2021-07-06"></a>

### v44.0.0-pos-fixes - 2021-06-20 <a href="#v44.0.0-pos-fixes-2021-06-20" id="v44.0.0-pos-fixes-2021-06-20"></a>

### v43.0.0-use-jwt-token - 2021-06-16 <a href="#v43.0.0-use-jwt-token-2021-06-16" id="v43.0.0-use-jwt-token-2021-06-16"></a>

### v42.0.3-clean-up-login - 2021-06-15 <a href="#v42.0.3-clean-up-login-2021-06-15" id="v42.0.3-clean-up-login-2021-06-15"></a>

### v42.0.2-serial-number-download-data - 2021-04-13 <a href="#v42.0.2-serial-number-download-data-2021-04-13" id="v42.0.2-serial-number-download-data-2021-04-13"></a>

### v42.0.1-share-serial-numbers-on-frontend - 2021-04-07 <a href="#v42.0.1-share-serial-numbers-on-frontend-2021-04-07" id="v42.0.1-share-serial-numbers-on-frontend-2021-04-07"></a>

### v42.0.0-billing-clean-up - 2021-03-30 <a href="#v42.0.0-billing-clean-up-2021-03-30" id="v42.0.0-billing-clean-up-2021-03-30"></a>

### v41.0.0-public-in-status-histories - 2021-03-27 <a href="#v41.0.0-public-in-status-histories-2021-03-27" id="v41.0.0-public-in-status-histories-2021-03-27"></a>

### v-41.0.0-own-search - 2021-02-17 <a href="#v-41.0.0-own-search-2021-02-17" id="v-41.0.0-own-search-2021-02-17"></a>

### v40.0.0-meilisearch - 2021-02-17 <a href="#v40.0.0-meilisearch-2021-02-17" id="v40.0.0-meilisearch-2021-02-17"></a>

### v39.0.0-async-proxy - 2021-01-20 <a href="#v39.0.0-async-proxy-2021-01-20" id="v39.0.0-async-proxy-2021-01-20"></a>

### v38.0.0-assets-on-different-domain - 2021-01-14 <a href="#v38.0.0-assets-on-different-domain-2021-01-14" id="v38.0.0-assets-on-different-domain-2021-01-14"></a>

### v37.0.0-quantity-field - 2020-09-12 <a href="#v37.0.0-quantity-field-2020-09-12" id="v37.0.0-quantity-field-2020-09-12"></a>

### v36.0.0-integration-with-klaviyo - 2020-07-20 <a href="#v36.0.0-integration-with-klaviyo-2020-07-20" id="v36.0.0-integration-with-klaviyo-2020-07-20"></a>

### v35.0.0-release-the-end-of-form-extra-fields - 2020-07-13 <a href="#v35.0.0-release-the-end-of-form-extra-fields-2020-07-13" id="v35.0.0-release-the-end-of-form-extra-fields-2020-07-13"></a>

### v34.1.0-check-token-validity - 2020-07-06 <a href="#v34.1.0-check-token-validity-2020-07-06" id="v34.1.0-check-token-validity-2020-07-06"></a>

### v34.0.0-sequelize-upgrade - 2020-07-02 <a href="#v34.0.0-sequelize-upgrade-2020-07-02" id="v34.0.0-sequelize-upgrade-2020-07-02"></a>

### v33.0.0-webhook-limit-tags-changes - 2020-06-15 <a href="#v33.0.0-webhook-limit-tags-changes-2020-06-15" id="v33.0.0-webhook-limit-tags-changes-2020-06-15"></a>

### v32.0.0-separate-post-registration-action-part1 - 2020-05-31 <a href="#v32.0.0-separate-post-registration-action-part1-2020-05-31" id="v32.0.0-separate-post-registration-action-part1-2020-05-31"></a>

### v31.1.0-webhook-add-status - 2020-05-17 <a href="#v31.1.0-webhook-add-status-2020-05-17" id="v31.1.0-webhook-add-status-2020-05-17"></a>

### v31.0.0-api-versioning - 2020-05-02 <a href="#v31.0.0-api-versioning-2020-05-02" id="v31.0.0-api-versioning-2020-05-02"></a>

### v30.0.0-auto-default-status - 2020-04-22 <a href="#v30.0.0-auto-default-status-2020-04-22" id="v30.0.0-auto-default-status-2020-04-22"></a>

### v29.0.0-lambda-exporter - 2020-04-01 <a href="#v29.0.0-lambda-exporter-2020-04-01" id="v29.0.0-lambda-exporter-2020-04-01"></a>

### v28.0.0-one-page-registration-form - 2020-03-25 <a href="#v28.0.0-one-page-registration-form-2020-03-25" id="v28.0.0-one-page-registration-form-2020-03-25"></a>

### v27.2.0-preset-serial-number - 2020-03-23 <a href="#v27.2.0-preset-serial-number-2020-03-23" id="v27.2.0-preset-serial-number-2020-03-23"></a>

### v27-1.0-dob - 2020-03-01 <a href="#v27-1.0-dob-2020-03-01" id="v27-1.0-dob-2020-03-01"></a>

### v27.0.0-show-dob - 2020-02-25 <a href="#v27.0.0-show-dob-2020-02-25" id="v27.0.0-show-dob-2020-02-25"></a>

### v26.2.0-hide-names-and-phone - 2020-02-17 <a href="#v26.2.0-hide-names-and-phone-2020-02-17" id="v26.2.0-hide-names-and-phone-2020-02-17"></a>

### v26.1.0-admin-add-reg-dropdown-and-skip-account - 2020-02-06 <a href="#v26.1.0-admin-add-reg-dropdown-and-skip-account-2020-02-06" id="v26.1.0-admin-add-reg-dropdown-and-skip-account-2020-02-06"></a>

### v26.0.0-accept-marketing-on-account-creation - 2020-02-05 <a href="#v26.0.0-accept-marketing-on-account-creation-2020-02-05" id="v26.0.0-accept-marketing-on-account-creation-2020-02-05"></a>

### v25.1.0-embeded-mpr-frontend-changes - 2020-02-01 <a href="#v25.1.0-embeded-mpr-frontend-changes-2020-02-01" id="v25.1.0-embeded-mpr-frontend-changes-2020-02-01"></a>

### v25.0.0-api-changes - 2020-01-17 <a href="#v25.0.0-api-changes-2020-01-17" id="v25.0.0-api-changes-2020-01-17"></a>

### v24.0.0-puffsalt - 2020-01-10 <a href="#v24.0.0-puffsalt-2020-01-10" id="v24.0.0-puffsalt-2020-01-10"></a>

### v23.0.0-edit-product-reg-detail - 2020-01-07 <a href="#v23.0.0-edit-product-reg-detail-2020-01-07" id="v23.0.0-edit-product-reg-detail-2020-01-07"></a>

### v22.4.0-reg-in-account-changes - 2020-01-04 <a href="#v22.4.0-reg-in-account-changes-2020-01-04" id="v22.4.0-reg-in-account-changes-2020-01-04"></a>

### v22.3.0-added-hash-toreg-listing - 2019-12-26 <a href="#v22.3.0-added-hash-toreg-listing-2019-12-26" id="v22.3.0-added-hash-toreg-listing-2019-12-26"></a>

### v22.2.0-sentry-error-logging - 2019-12-13 <a href="#v22.2.0-sentry-error-logging-2019-12-13" id="v22.2.0-sentry-error-logging-2019-12-13"></a>

### v22.1.0-export-csv-and-email-on-listing - 2019-12-10 <a href="#v22.1.0-export-csv-and-email-on-listing-2019-12-10" id="v22.1.0-export-csv-and-email-on-listing-2019-12-10"></a>

### v22.0.0-new-db - 2019-12-04 <a href="#v22.0.0-new-db-2019-12-04" id="v22.0.0-new-db-2019-12-04"></a>

### v21.0.0-product-search-dropdown - 2019-11-28 <a href="#v21.0.0-product-search-dropdown-2019-11-28" id="v21.0.0-product-search-dropdown-2019-11-28"></a>

### v20.0.0-connect-registrations-and-claims - 2019-11-28 <a href="#v20.0.0-connect-registrations-and-claims-2019-11-28" id="v20.0.0-connect-registrations-and-claims-2019-11-28"></a>

### v19.0.0-added-language-maping-for-reg-detail - 2019-11-15 <a href="#v19.0.0-added-language-maping-for-reg-detail-2019-11-15" id="v19.0.0-added-language-maping-for-reg-detail-2019-11-15"></a>

### v18.0.0-site-specific-functions - 2019-11-08 <a href="#v18.0.0-site-specific-functions-2019-11-08" id="v18.0.0-site-specific-functions-2019-11-08"></a>

### v17.0.0-edit-reg - 2019-10-30 <a href="#v17.0.0-edit-reg-2019-10-30" id="v17.0.0-edit-reg-2019-10-30"></a>

### v16.0.0-pos - 2019-10-15 <a href="#v16.0.0-pos-2019-10-15" id="v16.0.0-pos-2019-10-15"></a>

### v15.0.0-customisable-statuses - 2019-09-14 <a href="#v15.0.0-customisable-statuses-2019-09-14" id="v15.0.0-customisable-statuses-2019-09-14"></a>

### v14.0.0-export-csv-address12-and-disable-product-link - 2019-08-31 <a href="#v14.0.0-export-csv-address12-and-disable-product-link-2019-08-31" id="v14.0.0-export-csv-address12-and-disable-product-link-2019-08-31"></a>

### v13.3.0-serial-numbers-api - 2019-08-27 <a href="#v13.3.0-serial-numbers-api-2019-08-27" id="v13.3.0-serial-numbers-api-2019-08-27"></a>

### v13.2.0-min-chars-to-search - 2019-08-27 <a href="#v13.2.0-min-chars-to-search-2019-08-27" id="v13.2.0-min-chars-to-search-2019-08-27"></a>

### v13.1.0-hide-sn-and-purchasedate - 2019-08-18 <a href="#v13.1.0-hide-sn-and-purchasedate-2019-08-18" id="v13.1.0-hide-sn-and-purchasedate-2019-08-18"></a>

### v13.0.0-validating-email - 2019-08-16 <a href="#v13.0.0-validating-email-2019-08-16" id="v13.0.0-validating-email-2019-08-16"></a>

### v12.1.0-add-disable-product-link - 2019-08-02 <a href="#v12.1.0-add-disable-product-link-2019-08-02" id="v12.1.0-add-disable-product-link-2019-08-02"></a>

### v12.0.1-update-status-emails - 2019-06-25 <a href="#v12.0.1-update-status-emails-2019-06-25" id="v12.0.1-update-status-emails-2019-06-25"></a>

### v12.0.0-status-email-tempalte - 2019-06-25 <a href="#v12.0.0-status-email-tempalte-2019-06-25" id="v12.0.0-status-email-tempalte-2019-06-25"></a>

### v11.0.0-form-button - 2019-06-11 <a href="#v11.0.0-form-button-2019-06-11" id="v11.0.0-form-button-2019-06-11"></a>

### v10.2-radio-extra-field - 2019-03-14 <a href="#v10.2-radio-extra-field-2019-03-14" id="v10.2-radio-extra-field-2019-03-14"></a>

### v10.1-added-serial-number-redirect - 2019-02-13 <a href="#v10.1-added-serial-number-redirect-2019-02-13" id="v10.1-added-serial-number-redirect-2019-02-13"></a>

### v10.0-added-reg-id-and-seperate-forms-in-frontend - 2019-02-09 <a href="#v10.0-added-reg-id-and-seperate-forms-in-frontend-2019-02-09" id="v10.0-added-reg-id-and-seperate-forms-in-frontend-2019-02-09"></a>

### v9.5-separated-out-proxy-handler - 2018-12-23 <a href="#v9.5-separated-out-proxy-handler-2018-12-23" id="v9.5-separated-out-proxy-handler-2018-12-23"></a>

### v10.0-using-server-side-table - 2018-11-16 <a href="#v10.0-using-server-side-table-2018-11-16" id="v10.0-using-server-side-table-2018-11-16"></a>

### v9.4-opacity-for-modal-fix - 2018-11-15 <a href="#v9.4-opacity-for-modal-fix-2018-11-15" id="v9.4-opacity-for-modal-fix-2018-11-15"></a>

### v9.3-fixed-registration-detail-problem - 2018-11-13 <a href="#v9.3-fixed-registration-detail-problem-2018-11-13" id="v9.3-fixed-registration-detail-problem-2018-11-13"></a>

### v9.2-fix-problem-of-limit-search-to-certain-skus-not-string - 2018-11-01 <a href="#v9.2-fix-problem-of-limit-search-to-certain-skus-not-string-2018-11-01" id="v9.2-fix-problem-of-limit-search-to-certain-skus-not-string-2018-11-01"></a>

### v9.1-added-lambda-functions - 2018-10-29 <a href="#v9.1-added-lambda-functions-2018-10-29" id="v9.1-added-lambda-functions-2018-10-29"></a>

### v9.0-after-added-limit-auto-registration-to-certain-skus - 2018-10-28 <a href="#v9.0-after-added-limit-auto-registration-to-certain-skus-2018-10-28" id="v9.0-after-added-limit-auto-registration-to-certain-skus-2018-10-28"></a>

### v8.2-after-added-support-global-customer-tags - 2018-08-20 <a href="#v8.2-after-added-support-global-customer-tags-2018-08-20" id="v8.2-after-added-support-global-customer-tags-2018-08-20"></a>

### v8.1-added-excel-support - 2018-06-29 <a href="#v8.1-added-excel-support-2018-06-29" id="v8.1-added-excel-support-2018-06-29"></a>

### v8.0-added-only-login-customer-allow-register - 2018-06-14 <a href="#v8.0-added-only-login-customer-allow-register-2018-06-14" id="v8.0-added-only-login-customer-allow-register-2018-06-14"></a>

### v7.0-added-site-custom-js - 2018-06-10 <a href="#v7.0-added-site-custom-js-2018-06-10" id="v7.0-added-site-custom-js-2018-06-10"></a>

### v7.0-added-editor-with-html-view - 2018-05-28 <a href="#v7.0-added-editor-with-html-view-2018-05-28" id="v7.0-added-editor-with-html-view-2018-05-28"></a>

### v6.1-added-consent-and-webhook - 2018-04-27 <a href="#v6.1-added-consent-and-webhook-2018-04-27" id="v6.1-added-consent-and-webhook-2018-04-27"></a>

### v5.10-show-add-reg-in-admin - 2018-03-25 <a href="#v5.10-show-add-reg-in-admin-2018-03-25" id="v5.10-show-add-reg-in-admin-2018-03-25"></a>

### v1.0-verify-paid - 2018-03-25 <a href="#v1.0-verify-paid-2018-03-25" id="v1.0-verify-paid-2018-03-25"></a>

### v2.1.0-one-time-serial-number - 2018-02-28 <a href="#v2.1.0-one-time-serial-number-2018-02-28" id="v2.1.0-one-time-serial-number-2018-02-28"></a>

### v2.0.1-modal-on-sucess-registration - 2017-12-14 <a href="#v2.0.1-modal-on-sucess-registration-2017-12-14" id="v2.0.1-modal-on-sucess-registration-2017-12-14"></a>

### v2.0.0-ability-to-add-free-forms - 2017-11-24 <a href="#v2.0.0-ability-to-add-free-forms-2017-11-24" id="v2.0.0-ability-to-add-free-forms-2017-11-24"></a>

### v1.5.0-auto-reg-on-order-create - 2017-11-15 <a href="#v1.5.0-auto-reg-on-order-create-2017-11-15" id="v1.5.0-auto-reg-on-order-create-2017-11-15"></a>

### v1.4.8-registration-status - 2017-11-09 <a href="#v1.4.8-registration-status-2017-11-09" id="v1.4.8-registration-status-2017-11-09"></a>

### v1.4.9-registration-status - 2017-11-09 <a href="#v1.4.9-registration-status-2017-11-09" id="v1.4.9-registration-status-2017-11-09"></a>

### v1.4.8-admin-reg-with-send-option-on-frontend - 2017-11-04 <a href="#v1.4.8-admin-reg-with-send-option-on-frontend-2017-11-04" id="v1.4.8-admin-reg-with-send-option-on-frontend-2017-11-04"></a>

### v1.4.7-customer-proxy-url-change - 2017-10-23 <a href="#v1.4.7-customer-proxy-url-change-2017-10-23" id="v1.4.7-customer-proxy-url-change-2017-10-23"></a>

### v1.4.7-default-country - 2017-10-09 <a href="#v1.4.7-default-country-2017-10-09" id="v1.4.7-default-country-2017-10-09"></a>

### v1.4.6-customise-email-template - 2017-09-30 <a href="#v1.4.6-customise-email-template-2017-09-30" id="v1.4.6-customise-email-template-2017-09-30"></a>

### v1.4.5-multi-serial-number-update - 2017-09-27 <a href="#v1.4.5-multi-serial-number-update-2017-09-27" id="v1.4.5-multi-serial-number-update-2017-09-27"></a>

### v1.4.4-upload-file-extra-field - 2017-09-25 <a href="#v1.4.4-upload-file-extra-field-2017-09-25" id="v1.4.4-upload-file-extra-field-2017-09-25"></a>

### v1.4.2-language-strings-in-account-area-multiple-serial-numbers - 2017-09-24 <a href="#v1.4.2-language-strings-in-account-area-multiple-serial-numbers-2017-09-24" id="v1.4.2-language-strings-in-account-area-multiple-serial-numbers-2017-09-24"></a>

### v1.4.1-dropdown-field-customer-account-languages - 2017-09-20 <a href="#v1.4.1-dropdown-field-customer-account-languages-2017-09-20" id="v1.4.1-dropdown-field-customer-account-languages-2017-09-20"></a>

### v1.4.0-dropdown-selection - 2017-09-18 <a href="#v1.4.0-dropdown-selection-2017-09-18" id="v1.4.0-dropdown-selection-2017-09-18"></a>

### v1.3.0-more-languages - 2017-09-17 <a href="#v1.3.0-more-languages-2017-09-17" id="v1.3.0-more-languages-2017-09-17"></a>

### v1.2.3-logging - 2017-08-16 <a href="#v1.2.3-logging-2017-08-16" id="v1.2.3-logging-2017-08-16"></a>

### v1.2.3-serial-numbers-tab - 2017-07-31 <a href="#v1.2.3-serial-numbers-tab-2017-07-31" id="v1.2.3-serial-numbers-tab-2017-07-31"></a>

### v1.2.2-email-verification-template - 2017-07-24 <a href="#v1.2.2-email-verification-template-2017-07-24" id="v1.2.2-email-verification-template-2017-07-24"></a>

### 1.2.1 - 2017-07-23 <a href="#id-1.2.1-2017-07-23" id="id-1.2.1-2017-07-23"></a>

### v1.2 - 2017-07-21 <a href="#v1.2-2017-07-21" id="v1.2-2017-07-21"></a>

### v1.1.1 - 2017-07-21 <a href="#v1.1.1-2017-07-21" id="v1.1.1-2017-07-21"></a>

### v1.1 - 2017-07-16 <a href="#v1.1-2017-07-16" id="v1.1-2017-07-16"></a>

### v1.0 - 2017-04-03 <a href="#v1.0-2017-04-03" id="v1.0-2017-04-03"></a>


# Contact us

Drop us an email if you have any questions or new feature request.

<support@productvarify.com>

Please be more specific about your request, will be great if you can provide at least the following information

* Operating system
* Browser
* Step to reproduce the issue or how you want the feature

The more specific the better! we like attention to details.

### Schedule a call

If you have any other questions or encounter any issues feel free to contact us via email or schedule a call with us using the following link

<https://calendly.com/varify/shopify-product-registration>


