# Overview

## Introduction

Product Cares provide after cares after purchase the product, e.g allow customers to register purchased products from online or in a physical shop, manage claims and warranty etc

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

Here is a simple overview, the app is divided into two parts, one is customer facing and the other is for shop admin.

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

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

Frontend page is in the shop front that customer can see and use it to register products etc (depend on what you configured to do), it allow customer to register multiple products and supply relevant customer information, make claims on the registered products and see their registered products and warranty information

### [Admin - Backend](/admin)

Manage the registrations/warranties/claims/serial numbers and more

### 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.

The app can do a lot more than just register product, it allow multiple form creation, so its possible to have different form for different purchase, allow you to do product authenticity check and more, checkout the relevant docs here for other usage.


# Frontend Page

By default its the product registration form

This is the page customer see when they go to Frontend page (the page is automatically created after the an account is created

e.g If the account username  is: **mymart**, the frontend page will be: **mymart.miproductcares.com**

By default this page will show all the forms available e.g product registrations, warranty claims and allow customers to check their product registrations/claims (Don't worry about it, you can see the frontend link for the form in the backend Form > View on Frontend)

In general the form is divided into different parts (all the fields are totally customizable in the Form's admin)

## 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 App admin > Forms >  Form's settings.

![](/files/qrDAbyICmNXjXp6C3LEO)

## Customizable fields

The fields here are totally customizable in the Form's Admin

However the following fields are default that collect product information

* Product Name
* 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 setup in the admin, in these case the app will simply take whatever the product name customer supplied.

## Register multiple products

By default the form allow register multiple products, it 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. (depend on the form setting, if its one step form, it will only allow to register one product at one time)

![](/files/-M4QruPZ5nU2YGU9RPFJ)

## Customer Form

Collect more information about the customer e.g names, address and phone number.


# Prefill form fields

Prefill fields make it easier for customer

Its possible to prefill the form using special paramters in the URL , then send the URL to customer, so they will have the fields prefileld for them

Query string can be added to the URL to prefill fields, it have the following form

```
https://mymart.miproductcares.com/forms/product-registration?sn=123&purchaseDate=2023-08-08

```

In the above url, anything after ? is called query string and it will be a key and value pair

e.g&#x20;

**sn=123**

Its possible to add multiple query strings to the url using **&**

e.g

**sn=123\&purchaseDate=2023-08-08**

The above url will prefill the serial number and purchase date field in the form

### Prefill Product field

The product field is a special field, because it contain more information then simple title, it will have to contain id, so it can match the product on the backend

So the query string for prefill product is a product id

e.g&#x20;

product=product\_id\_12323

```
https://mymart.miproductcares.com/forms//product-registration?product=product_id_12323
```

The above will prefill the product field, Please use a valid product id, otherwise it won't work

The product id can be found by going to the product in the admin > Products > Product detail, then look at the URL, it should be the id in the last part of the URL

### Prefill other fields

Its possible to prefill any fields on the from, but first you will have to find out the name of the field, normally the name can be found in the App admin > Forms > Select the form > Design > Select the field > Field options will show the field name (on the right hand side)

![](/files/zZtPZ1M4mDKTHP1c6EUG)

Once you find out the field name, then you can use the above pattern to add the field name to the URL

e.g&#x20;

**purchaseDate=2023-08-08**

Make sure the value is correct format - specially for date

### Test the URL

Once the prefill URL is devised

**Test the URL and make sure it worked before send to customer**


# Registered entries

Show registered entries like product registrations or claims

Customer will be able to check their registered entries by enter their emails, then the app will send email with verification code to the email, then customer use that verification code to confirm their identity, the registered entries will show if customer is verified

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

The columns showing in the registered entries are corresponding to the fields for the form

### Customize registered entry columns

Its possible to customize the columns, e.g only show certain columns

Its in the App admin > Forms > Select the form > Settings > General > Customize registered entry columns > Enable, then select the columns to show

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

### Actions column

The actions column allow customer to take actions again the specific registered entry

By default if there is a form called or maked claim, it will automatically provide the make a claim action button which will open the claim form and prefilled the product information from the current entry data

Its also possible to change the form for the Make a claim button, its in the App admin > Forms > Select the form > Settings > General > Frontend - registered listing, what Make a Claim should link to

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

#### Extra actions

Its also possible to add extra actions to the actions column, the actions will be a url (e.g it will open a URL)

Add custom actions link for the registered products - e.g you can have life time warranty claim and other actions as you wish

First you will need to go the App admin > Forms > Select the form > Settings > General > Custom actions and add new actions

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

Once that's added, in the frontend registered entries, it will show the extra action

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

Please let us know if you encounter any issues with this feature


# Fill product with serial number

Its possible to enter a serial number on the frontend, then it will automatically prefill the product field with the product associated with that serial number

### Setup

To make it work, it will require a two steps

1. Upload/Add serial numbers to the App admin  > Serial numbers, and for each serial number entered the associate **sku** of the product (the product have to exist on backend with that specific sku associated with the serial number)
2. Enabled the show products when validate serial numbers on the frontend form, it can be enable in the App admin > Forms > Select the form > Settings > General > Show product when validating a serial number

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

Once the above is setup, it can be test on the form in the frontend, go to the form and enter a serial number that have associated sku, then it will show the product information and prefill the product field

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


# Claim Warranty

Its possible to provide claim warranty page for customer - **this form is not enabled by default, will need to create the form in the app admin.**

Once the form is created the url for the claim warranty **/forms/claim-warranty**

These fields are complete customizable, checkout the [admin](/admin/forms/claim-form) for how to set it up, list and manage warranty claims.

![](/files/-M4QruBVPu19tqLjRuss)

Note: If the shop url is: **mymart.miproductcares.com**, the Claim Warranty page will be: **mymart.miproductcares.com/forms/claim-warrant**


# App Admin

Allow admin to manage the app, view all registered products, customer information for each registration and view/change settings for the app.

The functionalities are divided into different parts:

## [Forms](/admin/forms)

A table show all product registrations

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

For manage serial numbers on the system

## Products

For manage products

## [Settings](/admin/settings)

Settings for the app

## Account

Manage account related settings e.g subscription


# Forms

Manage forms - add new forms, edit forms and everything

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

### Add new form

Its possible to new forms, there are different form types

* Custom form - complete control the form
* Claim - this will create a default claim form with default fields - those fields can be customize later on&#x20;

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


# Listing

## Listing

A list of form submission entries

Its also possible to filter by Product name, customer email, status and date range etc

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

## 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

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

#### Delete Registration

Delete the selected registration

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.


# Registration detail

Here are, the registration detail, related registration and customer info

### Registration data

Data associated with the registration and able to update them

#### Statuses

The statuses of the registration

### Customer data

View and update customer data associated with the registration

### Related registrations/entries

There are different types of related registrations/entries

![](/files/kXYgdt3aGBP3xKbgzNhW)

#### Same serial number

The relationship is based on serial number e.g if two entries from different forms have the same serial number, then those two entries are related

![](/files/uQFz9m7APtjUcgMdqurc)

#### Submitted from the same form

For forms that allow registered multiple products (each registered product count as one registration), and its related if its submitted from the same instance

![](/files/nX8I8xWGHw6Ch9lYI778)

#### Linked claim by user

Another way to related two entries are via user action - on the frontend, it will show customer’s registered entries when the customer logged in, whenever the customer click on the make a claim for the specific registration, it will open the claim form and marked the new claim with the specific registration

![](/files/bvw0pWRZ34F84ulsvn8A)


# Form Design

Customize the fields for the form using drag and drop, its very easy to customize the form fields

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

Select fields on the left side, then its possible to drag and drop to arrange them on the right hand side.

Please make sure <mark style="color:red;">**there is an Email field in the form**</mark> (because an email is needed for send confirmation email to the customer)

### Add Fields

Here show all available fields, new fields will be added in the future.

### Add Options

Customize the field's option, each field have different options

## Fields

### Select From Category/Collection

This field is used for provide users a list of category/collection, so they can select a category, then able to select a product from the selected category/collection

![](/files/obPl20odtvY71pV4fEBF)

1. Collections must be created in the admin
2. Add the Select from Category field in the form’s Design
3. Configure the field (most importantly select which collections customers able to select from)
4. Preview the form
5. Test it
6. Save it


# Form Settings

Settings for the form

### General

General settings associate with the specific form like serial numbers validation, default status and product search etc

### Introduction text

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

### Emails templates

By default when the user submit a form submission, it will send out two emails

* Confirmation email to the user
* Notification email to store admin

Its also possible to turn on/off of sending those emails

The content of the emails are completely customizable (see [email templates](#emails-templates) for more information about customization)&#x20;

### Integrations

#### Klaviyo integration

It's available if its enabled (will need to enter the api key in the App settings)

Klaviyo integration allow you to select which list in Klaviyo the new submission will send to

#### 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.

#### Import entries/registrations

See [Import/Migrate Registrations](#import-entries-registrations) for more detail


# 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 **Forms > New > Form type > Claim**

![](/files/P0AoArFRe71rRxrtILIF)

Once the form is created, it will be function like a normal form but with default settings and fields

## 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 **/forms/claim-warranty**, here is what it look like without any configuration - see the Claims admin about how to customise the form

![](/files/-M4QruBVPu19tqLjRuss)

##


# App Settings

View/change settings for the app - **Remember to save after changes**

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

### General Settings

Settings for the behavior of the app.

### **Statuses**

Manage statuses

### Integrations

Connect the app with other apps/services

### Languages

Customize the store frontend language strings.


# General Settings

Settings for the behavior of the app

### Admin/Notification 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 where there are form submission or export registratioin etc

### Default Country

The default country in the customer address from when customer fill in the address on the frontend.

### Find serial number intro

Text for find serial number page

### API access token

More detail can be found in [API](/advance/api)

### Custom CSS

By default the app will inherit the styling from site's theme, sometimes it might not good as you wish, then custom css/styling code and be added in here to make it look better


# 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@productcares.com>**

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 >  App Settings > General Setting > From Email

![](/files/Ztiq8vj6ioMvajJYjGhg)

1. Put in the email address in the box, then click **Request verification** - 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 email verified.**
4. Finally **Save Settings** to finish it, from now all from email will be from your custom email address.


# 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.

<figure><img src="/files/7mTpVv5NGyllNnWNpXTu" alt=""><figcaption></figcaption></figure>

#### 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

In the Form > Settings > General, 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;

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 > App Settings > General > Show registered serial numbers data for registered products is, then Save Settings at the bottom

Then whenever customers register with that specific serial number, they will see the download link in their registered products


# Email Templates

The app will send out emails whenever there are new registrations or status changed etc

These emails can be customize using the template editor and different data are available for different templates

The data in the template is dynamic so it will have to be in the following form

```
{{ data }}
```

### Emails after form submission

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

The ***\[registered-products]*** inside these email will be replaced by the actual registered products or form content

Here are extra data 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:  {{ ids }} will output all the ids if the form is able to add multiple products, if it's a one-page form, then it will simply output the id of the entry

### Emails for status change

By default when a status change it will not send out any email **unless there are contents inside status's email template**

The follow data are available for the email template&#x20;

#### 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 }}
```


# 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,** it should be a **Custom key** with **Full Access: List, Profiles, and Subscriptions**

### Set up the app with Private Key

1. Go to App admin&#x20;
2. Settings > Integrations&#x20;
3. Klavio integration > put in the **Private Key**
4. Scroll to the bottom and **Save Settings**

Then go to the Form's > settings and select which Klaviyo list you want to the data sent to

### **Checkbox ask for consent**

Once the integration 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


# Mailchimp

Its possible send submission data to Mailchimp list/audience when the form is submitted

### Set up Mailchimp api key

Go to App settings > Integration > Mailchimp and put the api key and server prefix there

### Select the list/audience to send the data to

Once the Mailchimp settings are saved, you will need to select which list the data should send to

Go to Forms > Select the form > Settings > Mailchimp integration (it will only appear if the Mailchimp api key is saved), then select the list

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

Test the setup after everything is saved - do a submission of the form then check the list in the Mailchimp


# Stripe payment

Integration with Stripe checkout (Stripe-hosted checkout page) to allow customers to pay after product registrations/claims

### The overview

Integrate with [Stripe checkout](https://stripe.com/docs/payments/checkout) to collect payment after form submission

Here is simply overview of the steps to setup the integration

* Get the API key from Stripe admin dashboard
* Customise the Stripe checkout in the Stripe admin
* Create a new form for testing
* Go to Form's Design to add a payment field and customise it
* Save the form design
* **Test the whole flow from customer point of view**
* Do it on a live form when its all working

Its always good idea to test things before making it live!

### How to get the Stripe API

Sign up to a Stripe account if you don't already have one

The [API key](https://stripe.com/docs/keys) should be available in the Stripe dashboard, please read the [latest Stripe doc ](https://stripe.com/docs/keys#reveal-an-api-secret-key-live-mode)for getting the key, normally it shoudl bein the Stripe dashboard > Developers > API keys > Get the key from there

<figure><img src="/files/4YflXaPrskWdEswBmNJS" alt=""><figcaption></figcaption></figure>

While at the Stripe dashboard, might be good idea to customise the payment checkout, because that's what the app will be using Stripe-hosted checkout page, the customisation is in the Stripe dashboard > Settings > Payments > Checkout, to setup the branding and how it should be look like etc

### Setup the integration

Once the Stripe API key is obtained, it need to put in the App admin > App Settings > Integration > Stripe payment > API key

### Setup the payment field

Once the payment integration is validated and saved, the payment field will appear in the Form's Design (normally the payment field is not available if there is no payment integration)

![](/files/1VlkBWSnnjsUizePugSr)

Add the payment field to the page - **ONLY ONE PAYMENT IS ALLOWED PER FORM**

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

The following field is required

* Product name - this is the product name customer will see on the Stripe checkout
* Price
* Currency

Its also possible to provide the messages for when the payment successfully paid or cancelled in the payment field options

Save the form design after setup the payment field

### The frontend - what the customer see

Once the form is saved, customer will present with the form without the payment field and customer will fill out the form normally and then will be redirect to payment checkout when the form data is saved

**Customer submit the form -> Present with successfully saved data -> Redirect to payment checkout -> Customer enter the credit card or other method to pay -> Show payment success or cancelled message**

Here is the example payment checkout  (its possible to customise the looks an feels of [Stripe payment checkout](https://stripe.com/docs/payments/checkout/customization)) will be shown to customer after submit the form

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

**In the above the product name, price and description is set in the payment field**

Once its successfully paid, it will present with the success message in the payment field

### Emails and Statuses

By default when the customer submitted the form, the submission entry will have status **Requested** (its possible to chagne in the form's settings) and will automatically send out an email to customer (its cusotmizable in the Form's settings or disable the email)

After the payment integration is enabled (with valid api key), the app will create two new status **paid** and **unpaid**, this will be like normal status you added manually

When the customer go through the payment, the app will automatically change the entry's status to **Paid** when the payment is successfully, or **unpaid** when its not paid

If you want to send out email after success payment, then you need to customise the email template in the App settings > Statuses > paid/unpaid status > add on email template

### Why you want payment integration?

There are a lots reason why payment is needed after submit the form (e.g after registration and claim), here are some examples

* Need to pay for the registration
* Sometimes its desirable for customer to pay for part of the product when make claim
* Need to pay for the shipping of the claim


# Gorgias

Add the registration information to the customer info in Gorgias, so its possible to see product registrations/warranties information in Gorgias

### Setup

Within Gorgias, there is http integration which allow Gorgias to call any api endpoint and get information about it and display in Gorgias

Please following the Gorgias http integration to set it up

{% embed url="<https://docs.gorgias.com/en-US/http-integrations-81822>" %}

Within the integration, it will ask for a endpoint - this is the endpoint of the app api that will provide information about the email/customer in Gorgias

### Obtain the endpoint from the app

The endpoint for Gorgias from the app is at

<https://api.productcares.com/api/gorgias/users?email={{ticket.customer.email}}>

The above endpoint will need authroization token (api key for the app) in the header as mentioned in the Gorgias HTTP Integration, the authorization token can be obtain in the App admin > App settings > General > API access token


# API

If you ever need to add registrations or serial numbers programmatically, there is an API for it.

All endpoints are available at **<https://api.productcares.com/api/>**

## Generate Access Token

Access token can be obtain in the  Admin > Settings > General > API Access token > Generate

## Usage

### Authentication

Requests to api endpoints needs an authentication header with the access token, setting the following in the request header e.g&#x20;

**Authorization: Bearer \[access-token]**

The access token can either put in the **Authorization** header or in the body, but put the access token in the header is preferred

### 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://api.productcares.com/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!",
        }
    ]
}
```

It's possible to register multiple products in one call - simply add another registration object to the registrations array.

If need to add data to different form e.g not the default product-registration, a new key will needed add to the registration **"type": "form-slug-name",** then form slug name can be found in the Form > View on frontend

If there are extra fields just add those field as key within registration, the key name 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 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://api.productcares.com/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 update, then put it under **fields** key

### Delete registration (DELETE)

A registration id is needed to delete a registration

1. make a HTTP DELETE request to the endpoint **/api/registrations/:regId**
2. It will return 200 if its all good, otherwise throw error with message

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

1. make a **HTTP GET request** to the endpoint **/api/registrations?email=<tom@example.com>,** the email must be in the query string
2. It will return all customer's registrations

Available query strings

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

### Serial Numbers

Here is example the payload for adding serial numbers (POST)

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

```
{
    "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

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

You can get a random unregistered serial number

1. Make a **HTTP GET request** to the endpoint **/api/serial\_number**
2. It will return a random unregistered serial number if there is one with status 200
3. If there is no unregistered seiral number, it wil return 204

### Get a serial number (GET)

Getting information of a serial number

1. make a **HTTP GET request** to the endpoint **/api/serial\_numbers/test123**,  test123 is a serial number
2. It will return the serial number info if there is one
3. if there is no such serial number, it will return 204

### Upload a file/asset/receipt

Its possible to upload a file and then 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 file directly to Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html)

Here is the steps

1. Make a **HTTP GET request** to the endpoint **/api/upload\_fiile** with the query string fileType, fileName and fileSize, e.g **/api/upload\_file?fileName=test.png\&fileType=image/png\&fileSize=123**
2. Then it will return a **signedRequest url** which you can use it to upload file, the **url** is the final url of the file
3. Make a HTTP PUT request to the **signedRequest url** and put the file in the payload e.g&#x20;

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

Here are some examples of how to upload it in Javascript

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

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


# 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

Once the CSV is in the right format, then go to App admin > Forms > Select the Form > Form Settings > Import CSV > upload the CSV and do the import.\ <br>


# 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 > Forms > Select the form > Settings > General > Webhook

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",
  }
}
```


# Downloadable assets after submit

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

The app will associate serial number with downloadable assets, then when customer input the specific serial numbers in the from and successfully submitted, it will get assets for that serial numbers and allow customer to download it

1. Upload the serial number CSV, so the serial number is associate with specific download
2. Customer register the serial number
3. On success the customer will see the downloadable assets associate with the serial number for download

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

Prepare a serial number CSV that have link to the downloadable asset - its like the normal [CSV](/admin/settings/serial-numbers#sample-csv), but with the extra column **data\_download\_asset\_name** (**data\_download\_** is fixed and the asset name is what will be displayed for the customer)

Here is a sample CSV

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

As you can see from the above same sku can assicate with same downloadable manual

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

Upload the CSV in the App admin

Once its upload the customer will able to see the assets for download when they registered with the specific serial number

![](/files/8VD3BAFrwkwAjqAXmPtM)

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

Customer will see the downloadable assets after successfully submitted the form, but its also possible to see the downloadable assets in the registered entries (e.g customer can see their registered products when they logged in and registered products using the login email)

To show the downloadable assets in the registered entries, it will need to enable the setting in App admin > App settings > General > Show registered serial numbers data for registered products > Save (on the top right)

![](/files/2bUwbaLcJDKh9xvhjl4u)

Once that's turned on, the customer will see the downloadable assets in the registered entries

![](/files/zwIyvj9b1A6X7BZ8sMpf)


# Serial number checker/validator

Sometimes is desirable to have a simple interface for customer to validate or check their serial number. The app provide such function, here are some use cases

* Check if authenticity of a product - e.g customer bought the product with serial number and want to check the authenticity
* Provide manual (or any other  downloadable content) customer when bought the product with serial number, they just need enter the serial number to download the assets associate with the serial number

### Frontend UI

The serial number checker/lookup have a frontend url&#x20;

<https://mymart.productcares.com/**snlookup>\*\*

The simple UI allow customer to enter serial number and get the relevant information for it

![](/files/gECKrsPWcm0jJff8T8ox)

Once customer enter a valid serial number it will present the result

![](/files/SjJkPnMwCbfCZbodftqC)

As indicate from the above results, it consist the following

1. Wether the entered serial number is valid or not
2. Show downloadable content if there are downloadable content associate with the serial number - [see here how to assicate download to serial number](/advance/downloadable-assets-after-submit#step-1-upload-serial-number-csv-with-downloadable-assets)
3. Show the product associated with the serial number - [associate product with serial numbers](/admin/settings/serial-numbers#upload-serial-numbers-in-csv)

For more information how to manage serial numbers, please checkout [here](/admin/settings/serial-numbers)


# Frequently Asked Questions (FAQ)

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

Its by design the form is divided into two steps - product and customer, that it will take user to second page that will show them the products they have entered and more details they need to enter.

More importantly the second page customer form provide a consistent fields to collect customer information which is essential

Its not possible to combine them into one step yet, but its on the roadmap and its possible to do it in the future

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

By default the frontend form have minimal and it will inherit the styling of the shop

Sometimes the page might not look like what you want, then its possible to add styling/CSS to make it look like exactly what you want

You can add custom CSS code for the app in the **App admin > Settings > General Setting > Custom CSS styling code for frontend**

If you need extra help, then you can [contact us](/contact-us)

## How can I find out the app version?

The app version can be found in the App admin

The version is at the bottom right corner of the page (sometimes you might need to scroll to the bottom right if its not visible) - note different version of admin might look different but the version number will always on the bottom right

## How can I redirect to specific url after submission?

There are two ways to do it

1. Via serial number, when you upload/import a serial number, you can specifiy a redirect url, so whenever the customer register with that serial number, it will redirect to that url
2. Using the redirect after sucess in the App admin > Forms > Select the form > Settings > General > Redirect url after success registration, you can put the url here > Save

Note: if using the step 2 - redirect url in the form settings, then its possible to have the id or product handle in the url, e.g if the url contain **{ids}** or **{handles}**, they will get replaced with registration id and the registered product handle in the registration

For example, when customer registered a product with handle **apple-macbook-pro** and using the following success redirect url in the setting

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

Then the app will actuall replace the ids and handles and do the redirect, so the actual url get redirected will be [https://example.com/?product=apple-macbook-pro\&registration\_id=3213112](<https://example.com/?product=apple-macbook-pro\&registration_id=3213112&#xA;>)

## How can I get the id in the email subject?

Its possible to have the registration id in the email subject to customer, you will need to use **{{ id }}** or **{{ ids }}** in the email subject, they will get replaced by the actual registration id


# 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)

### 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

Drop us an email if you have any questions or new feature request.

<support@productcares.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
* App version - [how to find app version](/frequently-asked-questions-faq#how-can-i-find-out-the-app-version)

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/productcares-info/quick-chat>


