# 2Checkout Documentation

<h2 align="center">2Checkout Developer Portal </h2>

<p align="center">APIs, step-by-step guides, and tools to help you integrate payments, manage subscriptions, and operate globally with confidence.</p>

<figure><img src="https://notebooklm.google.com/notebook/0c36e493-15a6-4607-a94e-0d5e5c7e6a3b?artifactId=f003e8d7-a169-453b-bd8b-f34b43ea1056" alt=""><figcaption></figcaption></figure>

{% columns %}
{% column valign="middle" %}

### Get started with 2Checkout...

**2Checkout** is a leading global payment platform that simplifies online payments, billing, and subscription management for businesses and consumers worldwide. With a focus on flexibility and innovation, 2Checkout provides vendors with a comprehensive suite of payment processing solutions, including customizable APIs, real-time analytics, and robust fraud-prevention methods. &#x20;

<a href="/spaces/deHPh87488cW76Md0m4D/pages/7FvWQMF0kTK7HGhlQfmo" class="button primary" data-icon="file-user">Get a 2Checkout account</a>
{% endcolumn %}

{% column %}
{% embed url="<https://www.youtube.com/watch?v=sHj7gfrERYs>" %}
{% endcolumn %}
{% endcolumns %}

## Accept payments via...

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h3>Hosted checkout</h3></td><td>Get started in minutes with our most popular hosted solutions.</td><td><a href="/spaces/Ahgiqd5u0cqvfGiCyB3b/pages/rOwStQ48lC2s2ECsBAvo" class="button primary">ConvertPlus</a></td><td><a href="/spaces/Ahgiqd5u0cqvfGiCyB3b/pages/6ATTSmGWUbkZq6e0hEmW" class="button primary">InLine client</a></td><td><a href="/spaces/CbqTuG2SOk3yrkX5eirC/pages/JnjWXxmWXjqo4TqcjAFE" class="button primary">Create a payment link</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/XQB8xC6pBElyONiuDpio">/files/XQB8xC6pBElyONiuDpio</a></td></tr><tr><td><h3><strong>API Reference</strong></h3></td><td>Explore the 2Checkout APIs and choose the solution that works bets for you. Browse, test, and implement APIs.</td><td><a href="/spaces/9Z7UgWMSxxDpoeZtZX1w" class="button primary">REST API</a></td><td><a href="/spaces/679iFU7z6UxBisoND9JE/pages/2879a5baffc599e704a57adfb6a3316219ae71b3" class="button primary">Webhooks</a></td><td><a href="/spaces/679iFU7z6UxBisoND9JE/pages/1c4fd96eb57be781374001ca171deece4160d747" class="button primary">2Pay.js</a></td><td><a href="/spaces/9Z7UgWMSxxDpoeZtZX1w">/spaces/9Z7UgWMSxxDpoeZtZX1w</a></td><td><a href="/files/M9r2pfZggAcilPK7xOde">/files/M9r2pfZggAcilPK7xOde</a></td></tr></tbody></table>

## Explore 2Checkout's Commerce Solutions

Read the getting-started guides, watch video tutorials, and learn how our platform's modular design can help you adapt to opportunities as your business grows.&#x20;

<a href="/spaces/deHPh87488cW76Md0m4D/pages/PbYb0GukRhiS4qCHdRal" class="button primary" data-icon="book-open">Guides</a> <a href="/spaces/deHPh87488cW76Md0m4D/pages/LThc2RqOxBKU56Qt3TMy" class="button secondary" data-icon="book">Documentation</a>

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td><h3>Global payments </h3></td><td><p>Build online revenue without payment processing headaches, no matter where your business is or where your clients are.</p><p>                    </p></td><td><a href="/spaces/rTsIN97K1i6xNDG9X36n/pages/NGZx172Y0zEedWTxQpZO" class="button primary">Read more</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/ZY7kBgd8VN0Ec6tP9xhG">/files/ZY7kBgd8VN0Ec6tP9xhG</a></td><td><a href="/files/ZVPrBX8yVkgAD8RXfkke">/files/ZVPrBX8yVkgAD8RXfkke</a></td></tr><tr><td><h3><strong>Subscription Billing</strong></h3></td><td>The subscription solution helps you manage subscriptions and customers, handle invoices and recurring billing, all to improve revenue.                                     </td><td><a href="/spaces/dTPb2ipDVVSZO7QfRjJ4/pages/DiivoCljdNP6hkl06pV1" class="button primary">Read more</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/M2DIIZmvPN9y4crUASAD">/files/M2DIIZmvPN9y4crUASAD</a></td><td></td></tr><tr><td><h3>Tax &#x26; Financial Services</h3></td><td>2Checkout takes the complexity out of doing business in today's global market.      </td><td><a href="/spaces/vsNrYOnhkX1pjDer5HrJ/pages/ZJb7E1GFRLJ4zdXrWCv4" class="button primary">Read more</a></td><td><a href="/spaces/9Z7UgWMSxxDpoeZtZX1w">/spaces/9Z7UgWMSxxDpoeZtZX1w</a></td><td><a href="/files/ua6hAWk54rKyGEQOVf9t">/files/ua6hAWk54rKyGEQOVf9t</a></td><td></td></tr></tbody></table>

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h3>Reporting &#x26; Analytics </h3></td><td><p>Get instant insights into sales and trends as well as customer health metrics, overall or at the business unit level, all from your commerce dashboard.          </p><p>                              </p></td><td><a href="/spaces/UWE24ZucRsxjBIt1wplS" class="button primary">Read more</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/7zlSUYum6wNHjcq5DZLi">/files/7zlSUYum6wNHjcq5DZLi</a></td></tr><tr><td><h3><strong>Fraud Prevention</strong></h3></td><td>When selling internationally, managing payment fraud and complying with international regulations are major issues. We take care of both, so you can focus on growing your business.</td><td><a href="/spaces/deHPh87488cW76Md0m4D/pages/286e38908e1e1d81899857d703fd5352708f393d" class="button primary">Read more</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/ZOzXiQ0XlOSEX0PGPjDB">/files/ZOzXiQ0XlOSEX0PGPjDB</a></td></tr><tr><td><h3>Marketing Tools</h3></td><td><p>Whether you need a solution for promotions, upselling or cross-selling, 2Checkout has got you covered with a comprehensive set of marketing tools.                 </p><p>            </p></td><td><a href="/spaces/h2t43pXZf3k0MMtQsFJ3/pages/NRVh9OaGBWQwc0VAJ30f" class="button primary">Read more</a></td><td><a href="/spaces/9Z7UgWMSxxDpoeZtZX1w">/spaces/9Z7UgWMSxxDpoeZtZX1w</a></td><td><a href="/files/KuxcX0qT7ks9DnwIv9VM">/files/KuxcX0qT7ks9DnwIv9VM</a></td></tr></tbody></table>

## Partner Solutions

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h3>Affiliate Network </h3></td><td><p>Leverage 2Checkout's Affiliate network and boost your revenue. </p><p>   </p></td><td><a href="/spaces/SAGB66gKb89BJSS8OWpT/pages/8554095536e8e34bc0f4e66745f3290de6adea70" class="button primary">Read more</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/qzEXaHnwolfN5H4i2iwO">/files/qzEXaHnwolfN5H4i2iwO</a></td></tr><tr><td><h3><strong>Partner sales</strong></h3></td><td>2Checkout offers multiple tools to manage your relationships with resellers.</td><td><a href="/spaces/zeikzjTAIlujvShCxZMP" class="button primary">Read more</a></td><td><a href="/spaces/deHPh87488cW76Md0m4D">/spaces/deHPh87488cW76Md0m4D</a></td><td><a href="/files/YtDjUAUQbwr2guojpF4v">/files/YtDjUAUQbwr2guojpF4v</a></td></tr></tbody></table>

## 2Checkout for Developers

{% columns %}
{% column %}

### Get started in developer mode...

Setting up your first API call should be the easiest part of getting started. With clear endpoints, copy-paste-ready examples, and quick authentication, you’ll be up and running in minutes, not hours.

No guesswork, no complexity—just your first successful call, fast.

<a href="/spaces/c3LqgF4vQq2p9dv81hxh/pages/trIgFCs9ByHmoH9hbmdh" class="button primary" data-icon="rocket-launch">Getting started guide</a>     <a href="/spaces/9Z7UgWMSxxDpoeZtZX1w" class="button primary" data-icon="terminal">API reference</a>

<a href="/spaces/679iFU7z6UxBisoND9JE/pages/1c4fd96eb57be781374001ca171deece4160d747" class="button primary" data-icon="rocket-launch">2Pay.js</a>                         <a href="/spaces/679iFU7z6UxBisoND9JE/pages/2879a5baffc599e704a57adfb6a3316219ae71b3" class="button primary" data-icon="webhook">Webhooks</a>
{% endcolumn %}

{% column %}
{% code title="index.js" overflow="wrap" %}

```javascript
// Import the SDK
import ExampleAPI from "example-api";

// Initialize the client
const client = new ExampleAPI({ apiKey: "YOUR_API_KEY" });

// Send your first message
const response = await client.messages.send({
  message: "Hello, world!"
});

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

<h2 align="center">Need help or have a question for us?</h2>

<p align="center">Contact our support teams or log a Jira ticket in just a few steps.</p>

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h4><i class="fa-circle-question">:circle-question:</i></h4></td><td><strong>Need help?</strong></td><td>Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.</td><td><a href="/spaces/OAxBdbPXjcVm9nOEeGqV/pages/q95OwLN8HTfao5rPNX0q" class="button secondary">Contact support</a></td><td><a href="/files/rB2SXtrGCbNltDnb0J9e">/files/rB2SXtrGCbNltDnb0J9e</a></td></tr><tr><td><h4><i class="fa-user-message">:user-message:</i></h4></td><td><strong>Not yet a 2Checkout customer?</strong></td><td><p>2Checkout can help take your business global. We can set you up with the right payment solution for your business. Get in touch with our sales reps, and our team of experts will happily discuss your needs.   </p><p>    </p></td><td><a href="https://www.2checkout.com/pricing/enterprise/?versionType=version_2" class="button secondary">Talk to Sales</a>       </td><td><a href="/files/k162tdpoAdbe4Kzftw4d">/files/k162tdpoAdbe4Kzftw4d</a></td></tr></tbody></table>


# Welcome to 2Checkout

2Checkout is omnipresent in omnichannel - no matter where you are in the world, no matter where\
you are with your customer journey. We revolutionize commerce. We make it happen. Simply.

Our leading all-in-one monetization platform allows businesses to quickly expand internationally\
and optimize recurring revenue streams across channels, by simplifying the back-end\
complexities that modern digital commerce creates.

This *Getting Started* guide introduces essential first steps:

{% columns %}
{% column width="58.333333333333336%" valign="middle" %}

### <i class="fa-circle-1">:circle-1:</i> Create and activate your 2Checkout account...

Start by registering for a free merchant account on the 2Checkout platform. Before you can process live payments, 2Checkout requires account verification to protect you and your customers.

<p align="center"><a href="/pages/QPzbTvC6XsT5gERiU43E" class="button primary" data-icon="file-user">Account setup</a></p>

<p align="center"><a href="/pages/OYQyNWSQjoypd9gNhqTe" class="button primary" data-icon="square-check">Activate account</a></p>
{% endcolumn %}

{% column width="41.666666666666664%" valign="middle" %}

<figure><img src="/files/KJ8uiUhS63ANGUa0L8bZ" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

{% columns %}
{% column width="58.333333333333336%" valign="middle" %}

### <i class="fa-circle-2">:circle-2:</i> Get your API key...

Once your account is active, retrieve your API credentials from the Merchant Control Panel (MCP). You will need these for any integration type.

<p align="center"><a href="/spaces/c3LqgF4vQq2p9dv81hxh/pages/trIgFCs9ByHmoH9hbmdh" class="button primary" data-icon="key">API Authentication &#x26; Keys</a></p>
{% endcolumn %}

{% column width="41.666666666666664%" valign="middle" %}

<figure><img src="/files/9F3017L49aVDTqxWchOP" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### <i class="fa-circle-3">:circle-3:</i> Choose and build your integration type...

2Checkout offers multiple integration paths. Choose the one that best fits your technical resources and business needs. With your chosen integration type in mind, connect your storefront or application to the 2Checkout platform.

<table data-view="cards"><thead><tr><th align="center"></th><th></th><th align="center"></th></tr></thead><tbody><tr><td align="center"><h4><strong>API Integration</strong></h4></td><td>Full custom control<br>Requires developer</td><td align="center"><a href="/spaces/c3LqgF4vQq2p9dv81hxh" class="button primary">2Checkout API</a></td></tr><tr><td align="center"><h4>No-Code Checkout</h4></td><td>Hosted payment page<br>No coding needed</td><td align="center"><a href="/spaces/Ahgiqd5u0cqvfGiCyB3b" class="button primary">Shopping carts</a></td></tr><tr><td align="center"><h4>Plugins &#x26; Links</h4></td><td>CMS / platform ready<br>Install &#x26; configure</td><td align="center"><p><a href="/spaces/Yx58RsyQmIsfLoMCqr5W" class="button primary">Connectors</a><br></p><p><a href="/spaces/CbqTuG2SOk3yrkX5eirC" class="button primary">Payment link</a></p></td></tr></tbody></table>

***

{% columns %}
{% column width="58.333333333333336%" valign="middle" %}

### <i class="fa-circle-4">:circle-4:</i> Test your integration...

Before going live, thoroughly test your payment flows in 2Checkout's sandbox to simulate real transactions without moving real money.

<p align="center"><a href="/spaces/wpvpXXy7uMuuOvyKFMt1" class="button primary" data-icon="vial">Test your integration</a></p>
{% endcolumn %}

{% column width="41.666666666666664%" valign="middle" %}

<figure><img src="/files/8Z9RMUj2hAXu6wrd4Ra3" alt=""><figcaption></figcaption></figure>

{% endcolumn %}
{% endcolumns %}

***

{% columns %}
{% column valign="middle" %}

### <i class="fa-circle-5">:circle-5:</i> Go live...

Once testing is complete and your integration is verified, switch to production and start accepting real payments from customers worldwide.

<p align="center"><a href="/spaces/rS3A5ZkCh18y86lixEko/pages/JsKd452Nu8XTrHz68zaF#get-started-with-2checkout" class="button primary" data-icon="rocket">TBD</a></p>
{% endcolumn %}

{% column valign="middle" %}

<figure><img src="/files/eTlXHbGkN0EnuXUNmzlu" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}


# Sign up for an account

To sign up for a 2Checkout account, visit [2checkout.com](https://www.2checkout.com/) and click on the **Sign up for free** green tab.

&#x20;

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

Once prompted with the types of accounts in the 2Checkout offer, select the one that suits your business purpose the most, and once again, click the **Sign up for free** button.

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

Fill in the form with your details and click on **Get started**.

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

Check the type of goods you want to sell with 2Checkout and click on **Create account**.

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

Once the creation of your account is confirmed, click on **Login to my account**.

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

Log in to your new 2Checkout account.

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


# Set up an account

After signing up for an account by filling in the form on the 2Checkout website, you can access the Merchant Control Panel.

Before you can start selling with 2Checkout, you need to finalize a few more steps.

The steps below apply to all accounts, including those using third-party services to connect to the 2Checkout platform.&#x20;

### Add your first product or plan

To use your 2Checkout account to sell goods and services, you need to request activation of your live account. To do this, you must first:

1. Add a product/plan
2. Generate a buy link and place a test order

Product catalog management is one of the most important aspects of your online store. [This guide](https://verifone.cloud/docs/2checkout/Documentation/01Product-catalog/02Products_and_subscription_plans/01Mandatory_product_info/) will show you how to add the first product within your 2Checkout Merchant Control Panel. Our platform supports the creation of both electronic and [physical products](https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/02Subscription-Packaging-and-Pricing/02Set-up-subscription-plans-for-physical-products/). Adding [shipping methods](https://verifone.cloud/docs/2checkout/Documentation/01Product-catalog/03Products_with_physical_delivery/Configure_shipping_methods/) will give you more control over your costs and income from tangible products.

You can add your products one by one, or do a [batch import via XML files](https://verifone.cloud/docs/2checkout/Documentation/01Product-catalog/Import-Export-product-and-pricing-data/Import_product_data_using_XML_files/).&#x20;

You can also receive payments from customers worldwide without the need to add catalog products. ConvertPlus enables you to pass the product information dynamically to the checkout page, either by using URL parameters or via your 2Checkout Merchant Control Panel.

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

### Generate your first buy-link and place a test order

**Link your website to the 2Checkout ordering process**

2Checkout offers different options for linking your website to your secure hosted 2Checkout order flows. The ConvertPlus buy-links trigger different order flows designed to suit a variety of business needs.

To see the different options available, go to **Setup** → [**Generate links**](https://secure.2checkout.com/cpanel/integration.php). To link your website to your 2Checkout ordering page, copy and paste the checkout links you’ve generated into the web page that will host the purchase button/link.

If you’re aiming to integrate other shopping cart applications with your 2Checkout account and take advantage of an integrated solution in order to provide a superior buying experience and receive worldwide payments, you can check the available options here. Integrations with other shopping cart applications are available only for 2Checkout accounts that **handle their own tax and invoice management**.&#x20;

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

### Place a test order

No matter what option you choose when setting up your products or subscription plans, or integrating the checkout process within your website, it is important to run tests to make sure the selected settings work flawlessly. Testing is the best way to make sure that the actual user experience is the one you want. It is also a way to test how 2Checkout notifies you about the different types of transactions.

Using the 2Checkout testing system you can replicate new acquisitions and trial purchase scenarios, as well as automatic renewals, trial conversions, manual renewals, and upgrades.

To generate a test link and place a test order using the test billing information, click here.

### Request activation of your account

When you log into your account (until your application is approved), you will see a blue banner at the top of your account that says, **“Your account is currently in demo mode”**. Even though your account is in demo mode, everything is completely functional. You can set up products, renewals, and fulfillment or delivery information, as well as test and use all the other available features. This mode allows you to test your setup to make sure everything works as expected, prior to launching your 2Checkout store.

To finalize your account setup, so that your 2Checkout live transactions can be processed, you must **submit your application for approval**, as explained here.

The 2Checkout's underwriting team will review your application right away and will get in touch with you to either request additional information, if required, or notify you about the resolution.

Once your application is approved, your 2Checkout account is live and you can start using it to process real orders. Your [Dashboard](https://secure.2checkout.com/cpanel/) will continue to display sample data until you register your first real transaction.<br>


# Activate your account

## Overview

After you create your account with 2Checkout, you need to request the activation of your live account by completing a form and providing information that will help us verify the business and identity of the individuals involved in your business.

{% hint style="warning" %}
Your activation request will be analyzed manually by 2Checkout’s Underwriting team and it is a mandatory step before you can start selling. Do make sure you check your email for any requests you may get from 2Checkout that are needed to finish the activation process.
{% endhint %}

## Activate your 2Checkout account

{% stepper %}
{% step %}

### Start activation

Activate your 2Checkout account by clicking on the **Start activation** button.

Upon clicking **Start activation** you'll be prompted with an application form that you need to fill out to provide information about your business.

All application fields are mandatory. It will take about 5–10 minutes to complete the form. If you don’t have all the information at hand, you can **save the application** and continue later.

Make sure you have the following documents ready to upload during the application process:

* A **company registration** document (chamber of commerce extract or articles of incorporation)
* A **valid passport** or official **identity card** (not a driver’s license) of the person signing the contract and of shareholders who directly or indirectly have 10% or more of the shares or voting rights. (Note that the [MRZ code](https://en.wikipedia.org/wiki/Machine-readable_passport) needs to be clearly visible.)
  {% endstep %}

{% step %}

### Demo mode indicator

If you haven't started the account activation, you will see an orange button that displays the text **“Demo mode”** at the top of your Merchant Control Panel and asks you to **"Add information about your business to activate your account and start selling"**.

<div data-with-frame="true"><img src="/files/62f23036f963ebe99b77e0e5b4a23ed92cb691f7" alt=""></div>
{% endstep %}

{% step %}

### PSP business model note

If you are on the PSP business model (2Sell or 2Subscribe accounts), the Start selling steps in the drop-down will look like this:

<div data-with-frame="true"><img src="/files/d1b6fdaae6442b97d480cf7529320261b5271b4e" alt=""></div>
{% endstep %}
{% endstepper %}

## Fill in the application form

After hitting the **Start activation** button, you'll need to fill out the activation form in order to be able to sell with us.

**Before you start** filling out the form, you'll be prompted with a page that:

* informs you about your pricing plan
* states the purpose of the form
* explains the activation process

<div data-with-frame="true"><img src="/files/67cd70bc2ecdb5c7af7e20b009b496bab7e6582f" alt=""></div>

Once you click **Next**, you can see all the required info and also how to fill out the form.

### About your business

Tell us the basics of your business.

1. Let us know what **is the Trade name** of your business. This can be your business registered name or your full name as seen in your National ID if your business is not registered yet. The name of your business will be displayed to your customers during checkout.
2. Select the **Business type** for your company from the drop-down list:
   * **Individual or Sole proprietorship** – your business is unincorporated and you are the only person responsible and liable for all your company’s profit and debts
   * **Partnership** – your company’s profit and debts are owned and/or shared by two or more individuals
   * **Private corporation** – your company’s shares are not publicly traded and are held by a small number of stockholders (shareholders)
   * **Public corporation** – your company’s shares are publicly traded and are held by a large number of stockholders (shareholders)
   * **Limited Liability Corporation (LLC)**
   * **Non-profit** – your company serves the public interest and runs charitable activities or is raising funds from the public
   * Other
3. If you select the business type as **Individual**, you need to add your **personal details** (date of birth, ID number as printed on your national identification documents, such as ID-card, passport or residents permit, and your phone number), and your **fiscal address** **details** (country, city, address, ZIP/postal code). In the unlikely event that we need to contact you, a phone number is our preferred alternative to email. Verifone will not spam you.
4. If you select any of the other business types, you need to provide the **company registration date** (date when your business was established) and the **Registered business address** (country, city, address, ZIP/postal code). The company address cannot be from a Virtual Box or a P.O. Box.<br>

   <div data-with-frame="true"><figure><img src="/files/DsUbht04DcyDpsnmiy9j" alt=""><figcaption></figcaption></figure></div>
5. Click **Next** to continue with the **Financial details** of your business. Verifone needs this information to assess your company financially from a risk standpoint. You need to provide the following details:
   * **Company Registration ID**
   * **Tax registration number** – Same with company registration ID in some cases. Depending on your country, the tax registration can have different names (Tax ID in USA, VAT in EU, GST in India, etc.). The Tax or Value Added Tax number (VAT) is issued by the Tax Office at the moment of registration of the business. You can provide your Tax or Employer Identification Number, or, in case you use your Social Security Number for business tax purposes, you can provide that instead.
   * **Annual online transacted volumes** (in US dollars) – for start-ups with no processing history, we recommend entering $10,000 - $30,000 or less, unless you have some special circumstances around your launch. Otherwise, use your current processing statements as a guide.
   * **Average order value** (in US dollars)
   * **Chargeback rate** for the past 12 months and an estimation for the next 12 months<br>

     <div data-with-frame="true"><figure><img src="/files/e5LrhoKAs75xuqsX8NGX" alt=""><figcaption></figcaption></figure></div>
6. Click **Next** to provide details about the **Stakeholders.** To be compliant with financial regulations and anti-money-laundering laws, 2Checkout is required to know the identity of the individuals who substantially control or own your company.  \
   \
   Click **Add stakeholder** to provide details either about yourself and/or about any beneficiary having 10% or more voting rights, shares, or other direct or indirect control in your company.
   * First name
   * Last name
   * Stakeholder type – Owner/Legal representative or both
   * Role – The position/role the stakeholder has within your company.
   * Ownership share – Share percentage that the stakeholder has in the company.
   * Email
   * Phone
   * Country
   * City
   * Address
   * ZIP/Postal code
   * Date of birth
   * National identification number – This is your [national identification number](https://en.wikipedia.org/wiki/National_identification_number) and depending on your country it can have different names. This will be used for identity verification and soft credit check that will not affect your credit score.<br>

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

### About your products

Tell us more about the products and services you provide. The information helps verify and understand what your customers will receive.

You need to add information about:

* **Product or services category**:
  * Online services – Selling access to online services without physical or digital delivery, e.g., hosting or access to educational content
  * Digital goods/software – Selling digitally deliverable goods, such as software licenses or downloadable files
  * Offline services – Offline services such as yoga classes
* **Have you processed online transactions before for this type of business?**
* **Product access instruction for review**:
  * Verifone needs access to your product to understand what you sell and to test for compliance. For common product types, access can mean:
    * Username & password (for SaaS products)
    * Download URL + username & password and license key if applicable (for downloadable products)

{% hint style="info" %}
Your business must operate within the permitted use of Verifone services outlined in the [Acceptable Use Policy](http://www.2checkout.com/legal/acceptance.php).
{% endhint %}

<div data-with-frame="true"><img src="/files/da620717e552fc3ddc0cdc2b38a1b0c28b0094fe" alt=""></div>

### Account settings

Select the payout method you would like Verifone to use for issuing your transfers. Possible values:

* **Wire Transfer** – requires bank information such as bank name, city, currency, and bank account number
* **PayPal** – requires a payout currency and PayPal address
* **Payoneer** – requires a payout currency and a [Payoneer ID](https://payouts.payoneer.com/partners/lp.aspx?token=6a85cf5ecb4148829ab10ee5daacd62fADDC62AAF5). You can [apply for a 2Checkout MasterCard powered by Payoneer](https://secure.2checkout.com/cpanel/avangate_mastercard.php) from your Merchant Control Panel.

<div data-with-frame="true"><img src="/files/8242e4fd939bc2754a482f5355c26741d4c342c2" alt=""></div>

### Documents

After saving your account settings you can upload the necessary documents to prove your identity.

{% hint style="info" %}
Accepted formats: .docx, .jpg, .png, .pdf, and .gif (<10MB).
{% endhint %}

* **Valid government-issued ID** – ID card or passport. Ensure the uploaded file includes your photo.
* **Valid proof of address** – Name, full residential address, and date of issue should appear. Utility bills and bank statements must be no older than 3 months.
* **Business documents**:
  * **Company ownership documents** – Certified Certificate of Incorporation or equivalent registration document
  * **Tax identification documents** – For Europe, TIN or relevant documentation; for the United States, SSN/TIN/PTIN or relevant documentation.
  * **Valid proof of address** – electricity or telephone bill that states your name, full residential address, and date of issue (not older than 3 months).

You can also upload any other valid and relevant documents that help prove your identity and company ownership.

<div data-with-frame="true"><img src="/files/bfc7ff412ef46c8573d48a7517ade8084a5e8532" alt=""></div>

### Summary

Once you upload the required documents and before hitting **Submit**, review your application form and update/edit missing or incorrect information highlighted in red.

<div data-with-frame="true"><img src="/files/d96fc5f6e052c6467b6893e3e8c9bc93116f3856" alt=""></div>

## Application review process

After filling in your information, submit the application for review. If there are any empty fields or missing information, you will not be able to click the Submit button.

Once submitted, Verifone's Underwriting team will review your application and will contact you if additional details are needed or to notify you about the resolution.

If additional information is required:

* You will receive an email notification
* The first activation step on your [Dashboard](https://secure.2checkout.com/cpanel/) will display the message **“Action required"**
* You can update your request and provide the additional information requested by Verifone's underwriting team by clicking **Add required information**

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

Upon submitting the required information, your Dashboard will display messages that your application is **"In review"**, and you can view it by clicking **View application**.

<div data-with-frame="true"><img src="/files/d64df845a0c60cde7012ec51a4fecdf9e2b0704a" alt=""></div>

## Sign the contract and go live!

By submitting the application for review you acknowledge and accept the [Terms and Conditions](https://www.2checkout.com/legal/terms/) and Services Agreement that will become your binding contract as soon as the application is approved by Verifone's underwriting team.

Once your application is approved, your account is live and can be used for real transactions. Verifone strongly recommends testing your integration one last time before publishing buying links and starting to process live payments.

Your [Dashboard](https://secure.2checkout.com/cpanel/) will continue to display sample data until you process your first real transaction.

{% hint style="info" icon="lightbulb" %}

#### Want to sell worldwide? Learn how Verifone can help with over 45 payment methods and 100 display and billing currencies.

<a href="https://www.2checkout.com/lp/2checkout-payment-method-coverage.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}


# How do I know what type of 2Checkout account I have?

## Overview <a href="#overview" id="overview"></a>

If you are not sure or you don't remember what type of account you have on the 2Checkout platform, you can find this information in your Merchant Control Panel.

## Availability <a href="#availability" id="availability"></a>

The information about the account type is available for all merchants who signed a contract with 2Checkout.

## How to find your 2Checkout account type <a href="#how-to-find-your-2checkout-account-type" id="how-to-find-your-2checkout-account-type"></a>

To find out what type of account you have on the 2Checkout platform, follow these steps:

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the cogwheel in the top-right corner and click on **Settings**, as shown below.<br>

   <div data-with-frame="true"><figure><img src="/files/CCwTtukl5w1w4NNagFoy" alt=""><figcaption></figcaption></figure></div>
3. On the **Account Settings** page, scroll down to the **Account Information** section and click on the **Edit details** button.<br>

   <div data-with-frame="true"><figure><img src="/files/DiSgnAU066YOHLqlBEcI" alt=""><figcaption></figcaption></figure></div>
4. On the [Account Information page](https://secure.2checkout.com/cpanel/account.php), scroll down to the **Account documents** section and click on the **PDF** to open/download it. The PDF is the contract you signed with 2Checkout and includes the information about your account type, as well as details about margins and fees that apply to your account.<br>

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


# Account identity verification

## Overview <a href="#overview" id="overview"></a>

2Checkout complies with regulatory obligations worldwide and is committed to providing a secure platform for all our customers. This is why we are asking you to confirm your identify and provide proof of ownership of your company.

Account identity verification is a process referred to as "[Know Your Customer](http://en.wikipedia.org/wiki/Know_your_customer)" (KYC). We have simplified the process of supplying all valid, relevant documents, which should take you only a few minutes, and we appreciate your cooperation when it comes to verifying your information and reducing risk.

## Requirements <a href="#requirements" id="requirements"></a>

Provide **scanned copies** of valid, relevant documents (i.e., do not include expired documents).

## Workflow <a href="#workflow" id="workflow"></a>

### For new accounts <a href="#for-new-accounts" id="for-new-accounts"></a>

1. Sign-up for a 2Checkout account.
2. Navigate to the [Know your customer area](https://secure.2checkout.com/cpanel/manage_documents.php) and upload scanned copies of relevant documents from the checklist in this article. This will accelerate the review process and you can start selling and accepting transactions from customers worldwide.
3. Newly created 2Checkout accounts undergo a review.
4. Work with the 2Checkout underwriting team to help validate your information.

### For existing accounts <a href="#for-existing-accounts" id="for-existing-accounts"></a>

1. Log in to your Merchant Control Panel account.
2. Navigate to **Settings** in the upper right corner of your Dashboard, as shown below.<br>

   <div data-with-frame="true"><figure><img src="/files/5PvkTvIDXPMLvbCs6rKA" alt=""><figcaption></figcaption></figure></div>
3. In the **Account Settings** window, scroll down to the **Account Information** section and click on the **Business Details** link, as the image below shows.<br>

   <div data-with-frame="true"><figure><img src="/files/XSK33eCTjt0DLfxG4Bea" alt=""><figcaption></figcaption></figure></div>
4. In the [**Know your customer documents**](https://secure.2checkout.com/cpanel/manage_documents.php) window, scroll down to the **Upload documents** field and select the type/types of documents you want to upload. <br>

   <div data-with-frame="true"><figure><img src="/files/uW8kSbiYqMQfNfobxWzi" alt=""><figcaption></figcaption></figure></div>
5. After adding your scanned copies of documents, click on the **Upload** button.<br>

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

As regulatory and compliance obligations change over time, 2Checkout can request additional valid, relevant documents to verify your identity and proof of ownership of your company.

## KYC Documents Checklist <a href="#kyc__00a0documents__00a0checklist" id="kyc__00a0documents__00a0checklist"></a>

The document checklist is different for individuals and for businesses/companies.

### Individuals <a href="#individuals" id="individuals"></a>

* **Valid government-issued ID** such as a passport or national identity card
* Valid address proof, such as electricity bill, telephone bill (no older than two months from the date when you upload the scanned copies)
* Any other valid, relevant documents that can prove your identity (in addition to the government-issued ID)

### Companies/Business Entities <a href="#companies__002fbusiness-entities" id="companies__002fbusiness-entities"></a>

* **Company ownership documents** (such as Articles of Incorporation or Organization, showing beneficial ownership)
* **Tax identification documents**
  * Europe - [TIN](https://ec.europa.eu/taxation_customs/business/tax-cooperation-control/administrative-cooperation/tax-identification-numbers-tin_en) or other relevant documentation
  * US - [SSN / TIN / PTIN](https://www.irs.gov/individuals/international-taxpayers/taxpayer-identification-numbers-tin) or other relevant documentation
* **Valid government-issued ID** such as a passport or national identity card. Include DOB, for anybody with 10% or more ownership in the company
* Any other valid, relevant documents that can prove your identity and offer proof of ownership for your company.


# Password and login

## Overview <a href="#overview" id="overview"></a>

You can change your login details, including password and email from your 2Checkout Merchant Control Panel.&#x20;

2Checkout assigns your email address to a single account. To use the same email address for multiple accounts, contact 2Checkout.&#x20;

## Login Settings <a href="#login-settings" id="login-settings"></a>

To set or edit your login details, follow these steps:

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel).
2. Navigate to the **Settings** cogwheel in the top right corner.
3. Click on **My details**.<br>

   <div data-with-frame="true"><figure><img src="/files/Llu6e3A0LPQ5SOvLOsas" alt=""><figcaption></figcaption></figure></div>
4. On the [Login information page](https://secure.2checkout.com/cpanel/login_information.php), you can edit your login details: First name, Last name, Username, and Email.
5. After editing your login details, click on the **Update** button to save them.<br>

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

## Password Settings <a href="#password-settings" id="password-settings"></a>

### Password requirements <a href="#password-requirements" id="password-requirements"></a>

2Checkout requires you to set a strong password:

* Must have at least 8 characters.
* Must have at least 3 out of the following 4 sets of characters: small letters, capital letters, numbers, and special characters.
* Must be different from the last 4 passwords.
* The password will never expire.

### Set up your password <a href="#set-up-your-password" id="set-up-your-password"></a>

To set a password for your 2Checkout account, follow the steps below.

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel).
2. Navigate to the **Settings** cogwheel in the top right corner.
3. Click on **My details**.
4. On the [Login information page](https://secure.2checkout.com/cpanel/login_information.php), you can set up the password for your account.
5. Input your old password.
6. Input the new password. You can click on the **Generate** button to make sure you use a strong password.
7. Confirm the new password.
8. Select the password lifetime. For security reasons, we recommend setting up a password expiration date. Master account users can set passwords to **never expire**. Contact the master user of your account to perform this change on your user account.
9. Click on the **Save** button to update the password.
10. In case you forgot your account password, use the password recovery functionality and a link for generating a new password will be sent to the e-mail address you use to log in to the Merchant Control Panel.

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


# Two-factor authentication

## Overview <a href="#overview" id="overview"></a>

Two-factor authentication is a method of computer access control that grants users access to their account after validating two criteria:

* Knowledge - represented by a security aspect the user has knowledge of, such as the username and password.
* Possession - represented by an item that only exists in the possession of that specific user, such as a smartphone, tablet, phone number, or email address.

Through two-factor authentication, users can access the 2Checkout Merchant Control Panel using their username, password, and a security token provided either by the **Google Authenticator** app or sent via **email** (associated with their Merchant Control Panel account).

{% hint style="info" %}
For security reasons, **master account** users can enable two-factor authentication for their own accounts **only via Google Authenticator**.&#x20;
{% endhint %}

2Checkout allows you to manage user access to specific features by creating and assigning user roles. This extra layer of security enables you to restrict access to the Merchant Control Panel to specific users, based on unique tokens.

## Availability <a href="#availability" id="availability"></a>

All 2Checkout accounts.

## Requirements <a href="#requirements" id="requirements"></a>

* Two-factor authentication through Google Authenticator requires a compatible mobile device running Android 2.3.3 or newer, or iOS 7.0 or newer.
* Two-factor authentication via email requires the user to have access to his or her email account.

### Google Authenticator for Android <a href="#google-authenticator-for-android" id="google-authenticator-for-android"></a>

You can download the Google Authenticator app for Android [here](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) or by accessing Google Play Store from your Android device.

### Google Authenticator for iOS <a href="#google-authenticator-for-ios" id="google-authenticator-for-ios"></a>

You can download the Google Authenticator app for iOS [here ](https://itunes.apple.com/us/app/google-authenticator/id388497605)or by accessing the App Store from your iOS device.

## Two-factor authentication types <a href="#two__002dfactor-authentication-types" id="two__002dfactor-authentication-types"></a>

2Checkout supports two types of two-factor authentication:

* Two-factor authentication powered by **Google Authenticator**. Authentication codes are delivered through the Google Authenticator app for Android and iOS.
* Two-factor authentication via **email**. Particular cases where users do not have access to their smartphones, such as environments that adhere to a "clean desk" policy, require authentication codes to be sent via email. In these situations, two-factor enrollment is done by the master account. Users enrolled by the master account cannot disable two-factor authentication on their own.

## Two-factor authentication via Google Authenticator <a href="#two__002dfactor-authentication-via-google-authenticator" id="two__002dfactor-authentication-via-google-authenticator"></a>

### Enable two-factor authentication <a href="#enable-two__002dfactor-authentication" id="enable-two__002dfactor-authentication"></a>

Follow the steps below to enable two-factor authentication for your account.

1. Log in to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the **Settings** cogwheel in the upper right corner.
3. Click on **My details**.<br>

   <div data-with-frame="true"><figure><img src="/files/I1QAlL6jrsXM4nwbeBgP" alt=""><figcaption></figcaption></figure></div>
4. Go to the **Two-factor authentication** tab.
5. Scan the QR code using your smart device or enter the **Authentication secret** in the Google Authenticator app. The app will provide an authentication code.
6. Enter the authentication code in the dedicated field in the 2Checkout Merchant Control Panel.
7. Click **Activate**.

From this point on, every login attempt will require an authentication code provided by Google Authenticator.

### Disable two-factor authentication <a href="#disable-two__002dfactor-authentication" id="disable-two__002dfactor-authentication"></a>

Follow the steps below to disable two-factor authentication.

1. Login to the [2Checkout Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the **Settings** cogwheel in the upper right corner.
3. Click on **My details**.
4. Go to the **Two-factor authentication** tab.
5. Click **Deactivate**.

## Two-factor authentication via email <a href="#two__002dfactor-authentication-via-email" id="two__002dfactor-authentication-via-email"></a>

Particular cases where users do not have access to their smartphones, such as environments that adhere to a "clean desk" policy, require authentication codes to be sent via email. In these situations, two-factor enrollment is done by the master account. Users enrolled by the master account cannot disable two-factor authentication on their own.

Follow the steps below to enable two-factor authentication via email.

1. Login to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel/) with a master account.
2. Navigate to the **Settings** cogwheel in the upper right corner.
3. Click on **User management**.
4. Identify the user you wish to enable two-factor authentication for and click **Edit**.
5. Check the **Two-factor authentication by email** option.
6. Click **Save**.

Once you enable two-factor authentication for a user, 2Checkout notifies them about the change and sends an authentication code to their email address each time a login attempt is detected.


# Universal SSO with 2Checkout (SAML-Based)

## Overview

The 2Checkout Universal SSO solution enables seamless Single Sign-On (SSO) for your organization's users across SaaS and internal applications using any Identity Provider (IdP) that supports the SAML 2.0 protocol. This solution simplifies authentication workflows, enhances security through centralized identity governance, and reduces login friction for end users.

{% hint style="danger" %}
**Important!** This SSO integration is not self-service. To enable it for your account, your organization must contact 2Checkout Support or your 2Checkout vendor representative to initiate setup.
{% endhint %}

## How it works

1. You configure a SAML 2.0 application in your IdP, using the 2Checkout cPanel as the Service Provider (SP). Both the SP Entity ID and ACS URL are set to <https://secure.2checkout.com/cpanel/saml-login>.
2. You share your IdP metadata (URL or XML file) with your 2Checkout representative.
3. 2Checkout configures the integration on its end using the provided metadata.
4. SSO is initially validated with a restricted set of test users before being rolled out to all users.
5. Once fully enabled, you and your users are redirected to your organization's IdP for authentication when logging into the 2Checkout cPanel. Password-based login is disabled at this point.

## Supported identity providers

2Checkout Universal SSO is compatible with any Identity Provider that implements the SAML 2.0 standard. Below is a non-exhaustive list of popular IdPs, grouped by target market.

#### Enterprise & Large-Scale Identity Providers

* [Okta](/get-started/getting-started/activate-your-account/universal-sso-with-2checkout-saml-based/okta-to-2checkout-cpanel-sso-integration-setup-guide)
* [Microsoft Entra ID](/get-started/getting-started/activate-your-account/universal-sso-with-2checkout-saml-based/microsoft-entra-to-2checkout-cpanel-sso-integration-setup-guide) (Azure AD)
* [Ping Identity](/get-started/getting-started/activate-your-account/universal-sso-with-2checkout-saml-based/ping-identity-to-2checkout-cpanel-sso-integration-setup-guide)
* IBM Security Verify
* Oracle Identity Cloud Service

#### Cloud & SaaS-First Identity Providers

* OneLogin
* Auth0
* JumpCloud
* Google Workspace
* Salesforce Identity

#### Education, Public Sector & Nonprofit

* Shibboleth
* Azure AD for Education
* WSO2 Identity Server

#### Developer & Custom Identity Platforms

* Keycloak
* Gluu
* SimpleSAMLphp

## Setup and configuration

The setup process follows these high-level steps:

1. **Contact 2Checkout** — Reach out to 2Checkout Support or your vendor representative to initiate the SSO onboarding process.
2. **Configure your IdP** — Set up a SAML 2.0 application in your Identity Provider using the SP details provided. Your 2Checkout representative will guide you through this or provide IdP-specific instructions where available.
3. **Share your metadata** — Provide your IdP's Federation Metadata URL (or XML file) to your 2Checkout representative.
4. **Testing** — A test user will be used to validate the integration before it is rolled out to your organization.
5. **Full rollout** — Once testing is successful, ensure all your users are added to the application in your IdP. 2Checkout will then enable SSO for all users on your account.

{% hint style="info" %}
Once SSO is fully enabled, password-based authentication to the 2Checkout cPanel is disabled for all users on your account. It is critical that all your users are provisioned in the IdP before the final rollout step.
{% endhint %}

***

#### Need help?

For assistance or to begin the SSO onboarding process, contact 2Checkout Support or your vendor representative.


# Ping identity to 2Checkout cPanel – SSO Integration Setup Guide

This guide walks you through configuring Ping Identity as an Identity Provider (IdP) for Single Sign-On (SSO) access to your 2Checkout cPanel using SAML 2.0.

## Prerequisites

* Admin access to your Ping Identity environment
* A 2Checkout representative contact to share configuration details with

## Setup and configuration

{% stepper %}
{% step %}

### Create a new application

* Log in to the **Ping Identity Admin Console**.
* In the left-hand navigation menu, go to **Applications → Applications**.
* Click the **+** (Add) button.
* Enter an **Application Name** (e.g., 2Checkout cPanel SSO).
* Optionally, add a **Description** and upload an **Icon**.
* Under **Application Type**, select **SAML Application**.
* Click **Configure**.
  {% endstep %}

{% step %}

### SAML configuration

On the **SAML Configuration** screen, select **Manually Enter**.

Fill in the following fields:

<table><thead><tr><th width="250">Field</th><th>Value</th></tr></thead><tbody><tr><td><strong>ACS URLs</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr><tr><td><strong>Entity ID</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr></tbody></table>

Click **Save**.
{% endstep %}

{% step %}

### Edit configuration

After saving, the application will open. Navigate to the **Configuration** tab and click **Edit**.&#x20;

Set the following field:

<table><thead><tr><th width="250">Field</th><th>Value</th></tr></thead><tbody><tr><td><strong>Target Application URL</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr></tbody></table>

Leave all other settings at their default values and click **Save**.
{% endstep %}

{% step %}

### Edit attribute mappings

Navigate to the **Attribute Mappings** tab and click **Edit**.

Ensure the following mapping is set:

| Attribute     | PingOne Mapping |
| ------------- | --------------- |
| saml\_subject | Email Address   |

Click **Save**.
{% endstep %}

{% step %}

### Enable the application

* Navigate back to **Applications → Applications**.
* Locate your newly created application in the list.
* Toggle the switch on the right side of the application row to enable it. The toggle will turn blue when active.
  {% endstep %}

{% step %}

### Retrieve and share the metadata URL

* Navigate to the **Overview** tab of your application.
* Scroll down to the **Connection Details** section.
* Locate the **IDP Metadata URL** and copy it using the copy icon next to it.
* **Send this Metadata URL to your 2Checkout representative** so they can complete the IdP configuration on their end.
  {% endstep %}

{% step %}

### Assign users

* Navigate to the **Access** tab of the application.
* User access is controlled through **Groups**. Click the **Groups** link to manage which groups have access to the application.
* Assign a group containing your test user first, then notify your **2Checkout representative** that a test user has been assigned and that you are ready to begin testing.
  {% endstep %}

{% step %}

### Full rollout

Once testing is confirmed successful, assign the remaining users by adding the appropriate groups under the **Access** tab.
{% endstep %}
{% endstepper %}

#### Need help?

If you encounter any issues during setup, contact your 2Checkout representative for assistance.

***

<sub>*This document was generated with the assistance of AI and has been reviewed and verified by a 2Checkout team member.*</sub>\ <sub>*The information contained in this document was tested and verified using a Ping Identity trial licence. Setup steps may differ for full licence or on-premises installations.*</sub>


# Microsoft Entra to 2Checkout cPanel – SSO Integration Setup Guide

This guide walks you through configuring Microsoft Entra as an Identity Provider (IdP) for Single Sign-On (SSO) access to your 2Checkout cPanel using SAML 2.0.

## Prerequisites

* Admin access to your Microsoft Entra Admin Center
* A 2Checkout representative contact to share configuration details with

## Setup and configuration

{% stepper %}
{% step %}

### Create a new enterprise application

* Log in to the **Microsoft Entra Admin Center** at [entra.microsoft.com](https://entra.microsoft.com/).
* In the left-hand navigation menu, go to **Enterprise apps → All applications**.
* Click **+** **Create your own application**.
* In the panel that opens, enter a name for your app (e.g., 2Checkout cPanel SSO).
* Select **"Integrate any other application you don't find in the gallery (Non-gallery)"**.
* Click **Create**.
  {% endstep %}

{% step %}

### Select the Single Sign-On method

Once the application is created, navigate to **Single sign-on** in the left-hand menu under **Manage**.

On the **Select a single sign-on method** screen, click **SAML**.
{% endstep %}

{% step %}

### Configure Basic SAML settings

In the **Set up Single Sign-On with SAML** page, click **Edit** on the **Basic SAML Configuration** section.

Fill in the following fields:

<table><thead><tr><th width="273">Field</th><th>Value</th></tr></thead><tbody><tr><td><strong>Identifier (Entity ID)</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr><tr><td><strong>Reply URL (Assertion Consumer Service URL)</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr><tr><td><strong>Sign on URL</strong></td><td>Leave blank (Optional)</td></tr><tr><td><strong>Relay State</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr><tr><td><strong>Logout URL</strong></td><td>Leave blank (Optional)</td></tr></tbody></table>

Click **Save** and close the panel.
{% endstep %}

{% step %}

### Configure the SAML signing certificate

* On the **Set up Single Sign-On with SAML** page, scroll down to section **3 – SAML Certificates**.
* Click the **Edit** (pencil) icon to open the **SAML Signing Certificate** panel.
* Set the **Signing Option** to **"Sign SAML response and assertion"**.
* Click **Save** and close the panel.
  {% endstep %}

{% step %}

### Retrieve and share the SAML certificate details

* On the **Set up Single Sign-On with SAML** page, scroll down to section **3 – SAML Certificates**.
* Collect all of the following and send them to your 2Checkout representative:
  * **App Federation Metadata URL** — copy the URL from the field and include it in your email.
  * **Federation Metadata XML** — click **Download** next to Federation Metadata XML and attach the file.
  * **Certificate (Base64)** — click **Download** next to Certificate (Base64) and attach the file.
* Your 2Checkout representative will advise which of these they require to complete the configuration on their end.
  {% endstep %}

{% step %}

### Assign a test user

Before rolling out SSO to all users, validate the integration with a single test account:

* In the left-hand menu, go to **Users and groups**.
* Click **+ Add user/group**.
* Select a test user and click **Assign**.
* Notify your 2Checkout representative that a test user has been assigned and that you are ready to begin testing.
  {% endstep %}

{% step %}

### Full rollout

Once testing is successful with the test user:

* Return to **Users and groups**.
* Add the remaining users or groups to the application
  {% endstep %}
  {% endstepper %}

#### Need help?

If you encounter any issues during setup, contact your 2Checkout representative for assistance.

***

<sub>*This document was generated with the assistance of AI and has been reviewed and verified by a 2Checkout team member.*</sub>\ <sub>*The information contained in this document was tested and verified using a Microsoft Entra trial licence. Setup steps may differ for full licence or on-premises installations.*</sub>


# Okta to 2Checkout cPanel – SSO Integration Setup Guide

This guide walks you through configuring Okta as an Identity Provider (IdP) for Single Sign-On (SSO) access to your 2Checkout cPanel using SAML 2.0.

## Prerequisites

* Admin access to your Okta organization
* A 2Checkout representative contact to share configuration details with

## Setup and configuration

{% stepper %}
{% step %}

### Create a new app integration in Okta

* Log in to your **Okta Admin Console**.
* In the left-hand navigation menu, go to **Applications → Applications**.
* Click **Create App Integration**.
  {% endstep %}

{% step %}

### Select the Sign-In method

In the **Create a new app integration** dialog, select **SAML 2.0** as the sign-in method.

Click **Next**.
{% endstep %}

{% step %}

### General settings

* Enter a descriptive **App name** (e.g., 2Checkout cPanel SSO).
* Optionally, upload an **App logo**.
* Click **Next**.
  {% endstep %}

{% step %}

### Configure SAML settings

On the **Configure SAML** screen, fill in the following fields:

<table><thead><tr><th width="271">Field</th><th>Value</th></tr></thead><tbody><tr><td><strong>Single sign-on URL</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr><tr><td><strong>Audience URI (SP Entity ID)</strong></td><td><a href="https://secure.2checkout.com/cpanel/saml-login">https://secure.2checkout.com/cpanel/saml-login</a></td></tr><tr><td><strong>Name ID format</strong></td><td>EmailAddress</td></tr><tr><td><strong>Application username</strong></td><td>Email</td></tr></tbody></table>

✅ Make sure the checkbox **"Use this for Recipient URL and Destination URL"** remains checked under the Single sign-on URL field.

Leave all other settings on this page at their **default values**.

Click **Next**, then complete the final **Feedback** step to finish creating the integration.
{% endstep %}

{% step %}

### Retrieve and share the metadata URL

* Once the app is created, navigate to the Sign On tab of your newly created application.
* Under Metadata details, locate the Metadata URL.
* Click Copy to copy the URL.
* Send this Metadata URL to your 2Checkout representative so they can complete the IdP configuration on their end.
  {% endstep %}

{% step %}

### Assign a test user

Before rolling out SSO to all users, validate the integration with a single test account:

* In the application, go to the **Assignments** tab.
* Click **Assign** and select **Assign to People**.
* Find and assign a test user, then click **Done**.
* Notify your 2Checkout representative that a test user has been assigned and that you are ready to begin testing.
  {% endstep %}

{% step %}

### Full rollout

Once testing is successful with the test user:

* Return to the **Assignments** tab.
* Assign the remaining users (individually or via groups) to the application.
  {% endstep %}
  {% endstepper %}

#### Need help?

If you encounter any issues during setup, contact your 2Checkout representative for assistance.

***

<sub>*This document was generated with the assistance of AI and has been reviewed and verified by a 2Checkout team member.*</sub>\ <sub>*The information contained in this document was tested and verified using an Okta trial licence. Setup steps may differ for full licence or on-premises installations.*</sub>


# Restrict API calls based on request IP

## Overview <a href="#overview" id="overview"></a>

Restrict API calls based on request IP address and increase the security of your account by preventing unauthorized API usage. By default, you can call the 2Checkout API from any IP.

{% hint style="info" %}
Currently, the 2Checkout systems do not support IPv6 for customer IP.
{% endhint %}

## Availability <a href="#availability" id="availability"></a>

All 2Checkout accounts.

## Set up <a href="#set-up" id="set-up"></a>

1. Navigate to  Settings » Users » [Firewall](https://secure.2checkout.com/cpanel/ip_tools.php).
2. Specify a static IP address or a range of IP addresses.&#x20;
3. In the **Selected Users** area, apply the restriction to API (Special).&#x20;
4. Add the IP filter.&#x20;
5. Activate the IP filtering system.


# Restrict access to the Merchant Control Panel

## Overview <a href="#overview" id="overview"></a>

Restrict access to the Merchant Control Panel only for specific IPs or IP ranges and increase the security of your account. By default, 2Checkout account users can access the Merchant Control Panel from any IP.

## Availability <a href="#availability" id="availability"></a>

All 2Checkout accounts.

## How to restrict access to the Merchant Control Panel <a href="#how-to-restrict-access-to-the-merchant-control-panel" id="how-to-restrict-access-to-the-merchant-control-panel"></a>

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the **Settings** cogwheel in the upper right corner and click on **User Management**.<br>

   <div data-with-frame="true"><figure><img src="/files/b6UMzMNhXlQrV9Ip4Zrd" alt=""><figcaption></figcaption></figure></div>
3. On the **User Management** page, click on the **Restrict access** tab.<br>

   <div data-with-frame="true"><figure><img src="/files/OIWtaWbaFHBa8LK1J43X" alt=""><figcaption></figcaption></figure></div>
4. On the **Restrict access** page, click on the **Add IP filter** button.
5. Specify a static IP address or a range of IP addresses in the iFrame window.
6. Apply the restriction to **all** or only to **selected** Merchant Control Panel users.&#x20;
7. Click on the **Add filter** button to save the setting.<br>

   <div data-with-frame="true"><figure><img src="/files/P0l9Qv7OoGlonTSXll3g" alt=""><figcaption></figcaption></figure></div>
8. On the **Restrict access** page, click on the **Activate** button to enable the IP filtering system.<br>

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


# Change time zones in the 2Checkout system

## Overview <a href="#overview" id="overview"></a>

The 2Checkout platform supports time zones and Daylight Saving Time corrections when reporting the date and time. Time zone support enables you to gain better insight into the performance of your business operations correlating it with your preferred time zone, or the one that best matches your geographical location.

2Checkout date-time stamps:

* GMT+02:00 by default;
* The time zone you set using Account settings.

The 2Checkout platform enables you to control the Time zone for:

* The Control Panel
* The 2Checkout API

{% hint style="info" %}
The Time zones set for the Control Panel and for the API can coincide, but at the same time they can be different, since they work independent of one another. For example, you can set GMT-8 if you're on Pacific Time for the Control Panel, and GMT-6 for Central America for the API.
{% endhint %}

## Impact <a href="#impact" id="impact"></a>

Changing the Time zones in the 2Checkout platform impacts the way in which the system reports:

* the date and time of orders placed by your customers and partners;
* when placing partner orders;
* subscriptions generated by the system;
* changes happening through the lifetime of subscriptions;
* delivery confirmations;
* refunds.

{% hint style="info" %}
2Checkout corrects for Daylight Saving Time. The date and time information can vary through the inclusion of Daylight Savings depending on your country and the period of the year.
{% endhint %}

In addition, date and time info sent through IPN (Instant Payment Notification) and LCN (License Change Notification) will also adapt to reflect the time zone you opt to use for the 2Checkout API.

## Exceptions <a href="#exceptions" id="exceptions"></a>

1. Accounting area - All [**Accounting**](https://secure.avangate.com/cpanel/accounting.php) data recorded and provided by the 2Checkout platform uses the system's default GMT+02:00 time zone and cannot be changed. The accounting reports, emails you receive from 2Checkout, the Accounting area in the Control Panel, invoices, Product overview, Orders overview and Products report will display the GMT+02:00 time zone of 2Checkout's system.
2. Bonus programs for 2Checkout affiliates use the default GMT+02:00 time zone.
3. The 2Checkout sales reports use default GMT+02:00 time zone.
4. Parts of the 2Checkout API not related to IPN and LCN.

## Time zone setup <a href="#time-zone-setup" id="time-zone-setup"></a>

To set up or change time zones in the 2Checkout platform for your account, navigate to [**Account settings**](https://secure.avangate.com/cpanel/index_account_settings.php), and in the System settings area, click on the **Edit system settings** button at the bottom of the page.

By default, the Control Panel uses the (GMT+02:00) Athens, Bucharest, Istanbul time zone to display the date, to which Daylight Saving might apply, depending on country and period of the year. Using the dropdown menus, you can change the Control Panel display time zones in order & customers related areas (Order Search, Customers, Delivery Confirmations, Place Partner Order and Partner Refunds) and the time zoned used in the 2Checkout APIs for IPN (Instant Payment Notification) and LCN (License Change Notification).

## Displaying time zone details <a href="#displaying-time-zone-details" id="displaying-time-zone-details"></a>

When you select a time zone it is displayed throughout the Control Panel, but Daylight Saving Time corrections will only be made for the actual date and time.

This means that if you select GMT + 01:00, when the associated offset increases to GMT + 02:00 because of Daylight Savings, the date and time reported by the system will change accordingly, even though GMT + 01:00 will appear per your settings.

[**Orders search**](https://secure.avangate.com/cpanel/reports.php) for both [**eStore orders**](https://secure.avangate.com/cpanel/reports.php) and [**Partner orders**](https://secure.avangate.com/cpanel/reports.php?partners) enable you to swap the report time zone between the 2Checkout default and the custom time zone you selected.

The same is valid for the [**Subscriptions Management**](https://secure.avangate.com/cpanel/licenses_management.php?), [**Customers**](https://secure.avangate.com/cpanel/customers_management.php) and the **Partner** [**Refunds**](https://secure.avangate.com/cpanel/partner_refunds.php) report.

The time zone is also displayed on the [**Dashboard**](https://secure.avangate.com/cpanel/index.php) (home page of the Control Panel) under the **Latest orders** area. In addition, when editing the details of a subscription, time zone information will also be displayed.

## 2Checkout API time zones <a href="#id-2checkout-api-time-zones" id="id-2checkout-api-time-zones"></a>

2Checkout sends out datetime stamps in the following situations:

* By default for every LCN (License Change Notification). This behavior cannot be switched off.
* For IPN (Instant Payment Notification) but only if under [**IPN settings**](https://secure.avangate.com/cpanel/ipn_settings.php) you check the **TIMEZONE\_OFFSET** option in the **notification details** area.

**LCN -** **TIMEZONE\_OFFSET:** The time zone you selected or the default GMT+02:00 time zone of the 2Checkout system.

[**IPN**](https://verifone.cloud/docs/2checkout/API-Integration/Webhooks/06Instant_Payment_Notification_\(IPN\)/) **-** **TIMEZONE\_OFFSET:** The time zone you selected or the default GMT+02:00 time zone of the 2Checkout system.

**IDN\_DATE -** If you changed the time zone for the 2Checkout API by editing [system settings](https://secure.avangate.com/cpanel/account_settings.php) under [Account settings](https://secure.avangate.com/cpanel/index_account_settings.php), then the IDN\_DATE will be calculated according to your custom configuration. 2Checkout will use your custom set time zone for the IDN\_DATE when calculating the HASH, and it's important that you also use the same datetime stamp, also per the custom time zone.

**IRN\_DATE -** If you changed the time zone for the 2Checkout API by editing [system settings](https://secure.avangate.com/cpanel/account_settings.php) under [Account settings](https://secure.avangate.com/cpanel/index_account_settings.php), then the IRN\_DATE will be calculated according to your custom configuration. 2Checkout will use your custom set time zone for the IRN\_DATE when calculating the HASH, and it's important that you also use the same datetime stamp, also per the custom time zone.

**Electronic delivery -** **TIMEZONE**: The time zone you selected or the default GMT+02:00 time zone of the 2Checkout system.

### FAQs <a href="#faq" id="faq"></a>

<details>

<summary><strong>Will changing the time zone prolong or shorten the lifetime of subscriptions sold?</strong></summary>

No. Changing the time zone has no impact on the lifecycle of subscriptions you already sold and are used by your customers. Only the datetime stamps reported by the 2Checkout system vary when swapping one time zone for another. Similarly, changing time zones will not impact renewals or expiration deadlines, for example.

</details>

<details>

<summary><strong>Some orders just placed appear with datetime stamps in the future or in the past. How is this possible?</strong></summary>

Such discrepancies occur only in scenarios in which you opted to set a time zone different than the one specific to your geographical location.

If you're based in the UK but use (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna instead of (GMT+00:00) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London, then orders your customers place between 11:00 PM and 12:00 AM (UK time) are reported as being placed the next day.

Similarly, if you're based in the UK but instead of using (GMT+00:00) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London, you change the time zone settings in the 2Checkout Control Panel to (GMT-06:00) Central Time (US & Canada), orders your customers place after 12:00 AM are reported as being placed the previous day.

</details>

## Available time zones <a href="#available-time-zones" id="available-time-zones"></a>

* (GMT-11:00) Midway Island, Samoa
* (GMT-10:00) Hawaii
* (GMT-09:00) Alaska
* (GMT-08:00) Tijuana, Baja California
* (GMT-08:00) Pacific Time (US & Canada)
* (GMT-07:00) Mountain Time (US & Canada)
* (GMT-07:00) Chihuahua, La Paz, Mazatlan - Old
* (GMT-07:00) Chihuahua, La Paz, Mazatlan - New
* (GMT-07:00) Arizona
* (GMT-06:00) Saskatchewan
* (GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
* (GMT-06:00) Guadalajara, Mexico City, Monterrey - New
* (GMT-06:00) Central Time (US & Canada)
* (GMT-06:00) Central America
* (GMT-05:00) Indiana (East)
* (GMT-05:00) Eastern Time (US & Canada)
* (GMT-05:00) Bogota, Lima, Quito, Rio Branco
* (GMT-04:30) Caracas
* (GMT-04:00) Santiago
* (GMT-04:00) Manaus
* (GMT-04:00) La Paz
* (GMT-04:00) Atlantic Time (Canada)
* (GMT-03:30) Newfoundland
* (GMT-03:00) Montevideo
* (GMT-03:00) Greenland
* (GMT-03:00) Georgetown
* (GMT-03:00) Buenos Aires
* (GMT-03:00) Brasilia
* (GMT-02:00) Mid-Atlantic
* (GMT-01:00) Cape Verde Is.
* (GMT-01:00) Azores
* UTC **(this option will only appear in the drop down menu for the 2Checkout API time zone selection)**
* (GMT+00:00) Casablanca
* (GMT+00:00) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London
* (GMT+00:00) Monrovia, Reykjavik
* (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
* (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
* (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
* (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
* (GMT+01:00) West Central Africa
* (GMT+02:00) Amman
* (GMT+02:00) Athens, Bucharest, Istanbul
* (GMT+02:00) Beirut
* (GMT+02:00) Cairo
* (GMT+02:00) Harare, Pretoria
* (GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius
* (GMT+02:00) Jerusalem
* (GMT+02:00) Minsk
* (GMT+02:00) Windhoek
* (GMT+03:00) Baghdad
* (GMT+03:00) Kuwait, Riyadh
* (GMT+03:00) Moscow, St. Petersburg, Volgograd
* (GMT+03:00) Nairobi
* (GMT+03:00) Tbilisi
* (GMT+03:30) Tehran
* (GMT+04:00) Abu Dhabi, Muscat
* (GMT+04:00) Baku
* (GMT+04:00) Caucasus Standard Time
* (GMT+04:00) Port Louis
* (GMT+04:00) Yerevan
* (GMT+04:30) Kabul
* (GMT+05:00) Ekaterinburg
* (GMT+05:00) Islamabad, Karachi
* (GMT+05:00) Tashkent
* (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
* (GMT+05:30) Sri Jayawardenepura
* (GMT+05:45) Kathmandu
* (GMT+06:00) Almaty, Novosibirsk
* (GMT+06:00) Astana, Dhaka
* (GMT+06:30) Yangon (Rangoon)
* (GMT+07:00) Bangkok, Hanoi, Jakarta
* (GMT+07:00) Krasnoyarsk
* (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
* (GMT+08:00) Irkutsk, Ulaan Bataar
* (GMT+08:00) Kuala Lumpur, Singapore
* (GMT+08:00) Perth
* (GMT+08:00) Taipei
* (GMT+09:00) Osaka, Sapporo, Tokyo
* (GMT+09:00) Seoul
* (GMT+09:00) Yakutsk
* (GMT+09:30) Adelaide
* (GMT+09:30) Darwin
* (GMT+10:00) Brisbane
* (GMT+10:00) Canberra, Melbourne, Sydney
* (GMT+10:00) Guam, Port Moresby
* (GMT+10:00) Hobart
* (GMT+10:00) Vladivostok
* (GMT+11:00) Magadan, Solomon Is., New Caledonia
* (GMT+12:00) Auckland, Wellington
* (GMT+12:00) Fiji, Kamchatka, Marshall Is.
* (GMT+13:00) Nuku'alofa


# User roles

## Overview <a href="#overview" id="overview"></a>

User privileges define the access level of your Merchant Control Panel users to specific 2Checkout features and modules.

A collection of privileges is called a **user role**. You can define your own user roles based on specific access levels that you want to grant to your users. You can assign multiple roles to a user.

{% hint style="info" %}
You need to have [two factor authentication](https://verifone.cloud/docs/2checkout/Onboarding/Activate-and-set-up-your-2Checkout-account/Two-factor-authentication/) enabled in order to add or edit information in the Settings area of your Merchant Control Panel.
{% endhint %}

## Add / edit users <a href="#add__002fedit-users" id="add__002fedit-users"></a>

Follow the steps below to add/edit new users:

1. Log in to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel) using your master account.
2. Navigate to the **Settings** cogwheel in the top right corner.
3. Click on **User Management**.<br>

   <div data-with-frame="true"><figure><img src="/files/dsThSP17QKuTIRtLTZXV" alt=""><figcaption></figcaption></figure></div>
4. On the [**User Management**](https://secure.2checkout.com/cpanel/tools_users.php) page, click on **Add user**.<br>

   <div data-with-frame="true"><figure><img src="/files/3NtMjVfmV5Sfe8zk11xE" alt=""><figcaption></figcaption></figure></div>
5. On the [**Add user**](https://secure.2checkout.com/cpanel/tools_users_edit.php) page, fill in the new user account details: Username, Email, First name, Last name, Password, Password lifetime, User status, User role.<br>

   <div data-with-frame="true"><figure><img src="/files/NkZXPhoGtxHGx59kKQPp" alt=""><figcaption></figcaption></figure></div>
6. To edit a user, click on the **Edit** icon on the **Users** page.<br>

   <div data-with-frame="true"><figure><img src="/files/aEKsYtSFtRiinGVAVPK4" alt=""><figcaption></figcaption></figure></div>
7. Click **Save**.

## User management options <a href="#user-management-options" id="user-management-options"></a>

* You can use the strong password generator that complies with the above requirements to make sure you're using a secure password.
* The user is required to change the password after the first login. This option is enabled by default.
* The **reset password** option allows you to disable the old password and the user will receive an e-mail for setting a new password.
* You can set passwords to expire in a number of days of your choosing. By default, passwords expire in 90 days.
* **Passwords never expire** invalidates the password expiration setting. Disabled by default.

## Add / edit user roles <a href="#add__002fedit-user-roles" id="add__002fedit-user-roles"></a>

Follow the steps below to add or edit user roles:

1. Log in to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel) using your master account.
2. Navigate to the **Settings** cogwheel in the top right corner.
3. Click on **User Management**.
4. On the **User Management** page, click on the [**Roles**](https://secure.2checkout.com/cpanel/tools_roles.php) tab.
5. On the **Roles** page, click on **Add role**.<br>

   <div data-with-frame="true"><figure><img src="/files/pTfrT14KabfrMwGNJeWa" alt=""><figcaption></figcaption></figure></div>
6. On the **Add role** page, fill in the role info (Role name, Role description), and then select the **privileges** you want to assign to that specific role.<br>

   <div data-with-frame="true"><figure><img src="/files/LtxwZcyhQOo1ZQIYsQNb" alt=""><figcaption></figcaption></figure></div>
7. To edit a role, click on the **Roles** tab and click on the **Edit** icon next to the role you want to change (see image at Step 5 above).
8. On the **Edit role** page, edit/change the role info (Role name, Role description) and then check or uncheck the privileges you want to assign to the role.<br>

   <div data-with-frame="true"><figure><img src="/files/NdyBAYQ0gZBQNRzvwWYr" alt=""><figcaption></figcaption></figure></div>
9. Click the green **Save** button at the bottom of the page to save/update the changes.

## Assign user roles <a href="#assign-user-roles" id="assign-user-roles"></a>

Follow the steps below to assign roles to the existing users.

1. Log in to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel) using your master account.
2. Navigate to the **Settings** cogwheel in the top right corner.
3. Click on **User Management**.
4. On the [User Management ](https://secure.2checkout.com/cpanel/tools_users.php)page, click on the **Users** tab.
5. Identify the user account that you want to assign a role to and click **Edit**.<br>

   <div data-with-frame="true"><figure><img src="/files/1iNuTxa1NkCTcI4iHmCa" alt=""><figcaption></figcaption></figure></div>
6. On the **Edit User** page, you can update the **User info** and also assign/check a role to the user or change the role already assigned to that particular user. <br>

   <div data-with-frame="true"><figure><img src="/files/mJp2D0ccp8tW6NNRVonG" alt=""><figcaption></figcaption></figure></div>
7. Click **Save** to update changes.

## Privileges <a href="#privileges" id="privileges"></a>

### Setup <a href="#setup" id="setup"></a>

| Privilege name                       | Description                                                                                            |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| Getting started                      | Allows users to access the Getting Started screen on the Dashboard and request the account to Go Live. |
| Add/Edit products                    | Controls access to the Products area.                                                                  |
| Edit product pricing                 | Controls editing privileges of per-product pricing configurations.                                     |
| Gift products                        | Controls access gift product settings.                                                                 |
| Product Upgrade Settings             | Controls access to the product upgrade settings.                                                       |
| Electronic delivery                  | Controls access to product fulfillment settings.                                                       |
| Download Insurance Service           | Controls access to **Download Insurance Service** settings.                                            |
| Shipping                             | Controls access to product shipping options.                                                           |
| Price lists                          | Controls access to product price list settings.                                                        |
| Subscriptions                        | Controls access to subscription renewal settings.                                                      |
| Generate links - eStore              | Controls access to the buy link generation options.                                                    |
| Interface templates - eStore         | Controls access to the cart templates customization options.                                           |
| Order Additional Fields              | Controls access to the additional order fields settings.                                               |
| Ordering options - settings          | Controls access to **Order settings**.                                                                 |
| Ordering options - aftersale message | Controls access to the **After-sale message** settings.                                                |
| Ordering options - web analytics     | Controls access to the **Web analytics** settings.                                                     |
| Metered Billing                      | Controls access to usage billing settings.                                                             |
| Manage Financial Settings            | Controls access to the account's financial settings.                                                   |

### Marketing Tools <a href="#marketing-tools" id="marketing-tools"></a>

| Privilege name                      | Description                                                                                                                                                                                                                     |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Affiliates Management               | Controls access to the 2Checkout Affiliate Network settings.                                                                                                                                                                    |
| Promotions                          | Controls access to promotion settings.                                                                                                                                                                                          |
| Cross-Selling and Up-Selling        | Controls access to cross-selling and up-selling promotion settings.                                                                                                                                                             |
| Email marketing program             | Controls access to email marketing settings.                                                                                                                                                                                    |
| Channel resources - affiliates      | Controls access to affiliate channel resources.                                                                                                                                                                                 |
| Channel resources - partners        | Controls access to partner channel resources.                                                                                                                                                                                   |
| Leads Management                    | Controls access to lead management settings.                                                                                                                                                                                    |
| View Avangate Polls                 | Allows 2Checkout Control Panel polls to be displayed to users whose privileges are governed by the assigned role. Uncheck to hide polls from users.                                                                             |
| Email editor - email viewing rights | Allows users to see emails in the Email editor.                                                                                                                                                                                 |
| Email editor - email editing rights | Allows users to edit emails in the Email editor.                                                                                                                                                                                |
| Retention tools                     | <p>Only accounts that have the Retention tools package enabled can see this privilege displayed.</p><p>Allows users to view and manage retention campaigns, and provides access to Enrollment and Churn prevention reports.</p> |

### Orders & Reports <a href="#orders-__0026-reports" id="orders-__0026-reports"></a>

| Privilege name                        | Description                                                                                                                                                                                       |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Accounting                            | Controls access to **Accounting**, **Vendor 2 Vendor,** and **Purchase Order** settings.                                                                                                          |
| View and search eStore order data     | Controls access to **Order Search.**                                                                                                                                                              |
| Executive Reports                     | <p>Controls access to:</p><ul><li>Financial Reports</li><li>Executive Reports</li><li>Order statistics</li><li>Products report</li><li>Product options</li><li>Additional Fields Report</li></ul> |
| Business Dynamics                     | Controls access to **Custom Reports**.                                                                                                                                                            |
| Promotions Reports                    | Controls access to marketing reports.                                                                                                                                                             |
| A/B Testing                           | Controls access to A/B testing campaign settings.                                                                                                                                                 |
| Aggregate Reports                     | Allows the aggregation of report data from multi-accounts.                                                                                                                                        |
| Customer support - eStore             | Grants limited order search options for customer support agents.                                                                                                                                  |
| Partner order search                  | Allows users to search and view partner orders.                                                                                                                                                   |
| Customer support - partners           | Grants limited partner order search options for customer support agents.                                                                                                                          |
| Delivery confirmations                | Controls access to **Fulfillment confirmation** settings.                                                                                                                                         |
| Proforma payment confirmation         | Allows users to confirm proforma payments for direct partner payments.                                                                                                                            |
| Manage order refunds                  | Allows users to request refunds or order cancelations. Use in conjunction with the **Customer support** privileges to enable access to order data.                                                |
| Access refund requests area           | Allows access to the Refunds section, listing all refund requests. Use in conjunction with **Manage order refunds** and **Customer support** privileges to enable editing privileges.             |
| Customers                             | Controls access to customer management settings.                                                                                                                                                  |
| Blank & partial searches for eStore   | Allows blank and partial order searches.                                                                                                                                                          |
| Affiliates Reports                    | Controls access to Top Affiliates and Affiliate Sales reports.                                                                                                                                    |
| Vendor to Affiliate Payments          | Allows users to make payments to top-performing affiliates.                                                                                                                                       |
| API Logs                              | Controls access to API & webhooks log monitor reports.                                                                                                                                            |
| Enable delivery confirmation approval | Allows users to approve/reverse orders that require vendor delivery confirmation.                                                                                                                 |
| Renewal Authorizations Report         | Allows users to generate, view, and export authorization reports.                                                                                                                                 |
| Restrict export customer details      | Allows users to get every detail in the order search export (using the full option template) when disabled.                                                                                       |
| Cohorts Reports                       | Allows users to generate, view, and export cohort reports.                                                                                                                                        |
| Subscription Management               | Controls access to subscription management settings.                                                                                                                                              |
| Subscription Pricing                  | Controls access to the **Update credit card** and **Change current billing amount** options. Use in conjunction with the **Subscription Management** privilege.                                   |
| Partner Reports                       | Controls access to the **Top Partners** report.                                                                                                                                                   |
| Place orders on behalf of customers   | Allows users to place orders on behalf of customers.                                                                                                                                              |
| Additional fields report              | Controls access to the **Additional fields** report.                                                                                                                                              |
| Users Activity                        | Controls access to the **Users Activity** report.                                                                                                                                                 |
| Delete user comments                  | Allows users to delete their own comments from orders.                                                                                                                                            |

### Account Settings <a href="#account-settings" id="account-settings"></a>

| Privilege name        | Description                                                                               |
| --------------------- | ----------------------------------------------------------------------------------------- |
| Account information   | Controls access to the **Account information** section.                                   |
| User roles management | Controls access to user roles management settings.                                        |
| Users management      | Controls access to user management settings.                                              |
| System settings       | Controls access to system settings, such as time zone, IPN, LCN, and other notifications. |
| Financial information | Allows users to manage bank and payment information.                                      |
| Salesforce settings   | Controls access to Salesforce integration settings.                                       |

### Partner Management <a href="#partner-management" id="partner-management"></a>

| Privilege name                  | Description                                                                                                    |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| Restrict to own partners        | Limits user access to partner accounts where they are assigned as account managers or backup account managers. |
| Proforma invoices               | Controls access to partner invoices.                                                                           |
| Partners management             | Controls access to partner management settings.                                                                |
| Partnership programs management | Controls access to partner programs settings.                                                                  |
| Place order                     | Allows users to place orders on behalf of partners.                                                            |
| Receive order notification      | Allows users to receive notifications from partner orders.                                                     |
| Refund management               | Allows users to manage partner refunds.                                                                        |
| Refund history                  | Allows users to see previous partner refund requests.                                                          |

### Third-Party Apps <a href="#third__002dparty-apps" id="third__002dparty-apps"></a>

| Privilege name          | Description                                   |
| ----------------------- | --------------------------------------------- |
| Use a third-party app   | Allows users to use third-party apps.         |
| Manage third-party apps | Controls access to third-party apps settings. |


# Create users with API roles

## Overview <a href="#overview" id="overview"></a>

Assign API roles to your users, for allowing them to perform a task that requires access to the 2Checkout API.

## Creating API roles <a href="#creating-api-roles" id="creating-api-roles"></a>

1. Login to the 2Checkout Control Panel using your master account.
2. Go to **Account settings**.
3. Click **Manage user access**.
4. Go to the **View roles** tab.
5. Click **Add new role**.
6. Fill in a role name and description.
7. Select the **API access** privileges.
8. Click **Save role**.

Assign the role to the users you want to provide with access to 2Checkout API.

{% hint style="info" %}
If a merchant on the PSP business model (2Sell & 2Subscribe) has multiple 2Checkout accounts, which means they have multiple unique domains processing with 2Checkout, then they must have set up a unique API user per account.
{% endhint %}


# Cookie Management in the Merchant Control Panel

## Overview

A cookie is a small text file that a website places on a user’s computer (including smartphones, tablets, or other connected devices) to store information about the user’s activity. Throughout the world, regulating entities see cookies as a “persistent identifier”, thus falling under the rules applied to protect Internet users' personal information.

Regulatory entities:

* For California – [CCPA](https://oag.ca.gov/privacy/ccpa)
* For EU – [GDPR](https://ec.europa.eu/info/law/law-topic/data-protection/data-protection-eu_en), [ePrivacy](https://ec.europa.eu/digital-single-market/en/news/eprivacy-directive) [Directive](https://ec.europa.eu/digital-single-market/en/news/eprivacy-directive), [Cookies and other tracking technologies](https://wikis.ec.europa.eu/display/WEBGUIDE/04.+Cookies)
* National regulations (per country) on privacy and protection of personal information

## Availability

All merchants have access to the [Merchant Control Panel](https://secure.2checkout.com/cpanel). Consequently, all of them will be seeing the cookie consent displayed (in one form or another, depending on where they are located when they access the portal — see details below).

## Cookie Management in the Merchant Control Panel

For merchants in California (USA), the European Union, and the rest of the world (ROW), 2Checkout uses three types of cookies:

* Security (mandatory) - These cookies help protect merchants' data available during and after logging into their 2Checkout account and cannot be disabled.
* Preference (optional) - These cookies are used to remember customers’ choices during navigation through their 2Checkout accounts, such as pagination selection or list types.
* Statistics (optional) - These cookies help 2Checkout understand the merchants' interaction with their Merchant Control Panel so that our system can identify issues and continuously improve the overall experience merchants have. Data is collected and reported anonymously.

2Checkout collects consent upon the merchants' first access in the Merchant Control Panel through a link at the bottom of the landing page, where the user can:

* Accept all cookies — This will check all the above 3 types of cookies (Security, Preference, Statistics)
* Customize settings / Do not sell my info (for California users only) — This will enable the user to check any cookies other than the mandatory ones
* Access the 2Checkout [cookie policy](https://www.2co.com/privacy.html)

{% hint style="info" %}
For US users with unidentified state locations, 2Checkout will display the rules applied for California users.\
For ROW users with an unidentified location, 2Checkout will display the rules applied for EU users.
{% endhint %}

## Cookie Module Display Based on Merchant Location

The Cookie module will be displayed differently depending on merchants' locations.

**Cookie module displayed for merchants in the European Union**

![EU cookie module screenshot](/files/e2ab9f843ea02e0f91dfd19b1987cd33f33957ce)

![EU cookie customize screenshot](/files/7e72b777031c9304274e91f1d77d88c18c479236)

By clicking on the Customize settings button, the user will be prompted with a separate window where they can choose their preferred settings.

Once the merchant performs an action on the Cookie Settings link in the footer, this will not be shown during any other subsequent accessing of the portal (for a one-year period). A link to Cookie settings will be available (bottom right corner), where the user will be able to change options for the optional types of cookies at any time. After one year, the merchant will be once again prompted to collect consent for the placed cookies.

![EU cookie settings link screenshot](/files/be782ae10a8621dd44319e6702a27f72446d0a02)

### Cookie module displayed for merchants in California

For merchants in California, the cookie module will display the Do not sell my information button. Once merchants click on it they will be prompted with the Cookies Management Center window, where they can enable their preferred cookies.

![California cookie module screenshot](/files/6a445d5abf567f0bff914663399ea7e72789d0bc)

#### Cookie module displayed for merchants in the Rest of the World, including the US (non-EU, non-California)

![ROW cookie module screenshot 1](/files/e9fe527f1ded99512c6e6209745f2d3b487efced)

![ROW cookie module screenshot 2](/files/20015d419be812bb5cf75e1dc27b972a89d477aa)

### Related documentation

* [Products and subscriptions listing query parameters](https://verifone.cloud/docs/2checkout/Documentation/myAccount/Products-and-subscriptions-listing-query-parameters)
* [Subscriber management and self-service](https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/03Subscriber-management-and-self-service)
* [Contracts](https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/01Subscription-Billing-Set-up/03Contracts)


# Merchant PCI Compliance

## What is PCI DSS? <a href="#merchantpcicompliance-generalinformation-whatispcidss" id="merchantpcicompliance-generalinformation-whatispcidss"></a>

The Payment Card Industry Data Security Standard (PCI DSS) is a set of global security standards designed to ensure that ALL companies that accept, process, store or transmit credit/debit card information and/or sensitive authentication data maintain a secure environment and customers and their data are protected no matter where they shop and what channel they use.

Most small merchants can use a self-validation tool to assess their level of cardholder data security.

The PCI DSS is administered and managed by the Payment Card Industry Security Standards Council (PCI SSC) ([www.pcisecuritystandards.org](https://www.pcisecuritystandards.org/)), an independent body created by the major payment card brands (Visa, MasterCard, American Express, Discover and JCB). The payment brands and acquirers are responsible for enforcing compliance, not the PCI council.

## To whom does the PCI DSS apply? <a href="#to-whom-does-the-pci-dss-apply__003f" id="to-whom-does-the-pci-dss-apply__003f"></a>

The PCI DSS applies **only** to merchants that want to place orders via **credit cards**. All other payment methods available via API do not fall under PCI DSS compliance.

The PCI DSS applies to ANY organization, regardless of size or number of transactions, that accepts, processes, transmits or stores any cardholder data. Using a third-party payment processor does not exclude a company from PCI DSS compliance. However, it does lower their risk exposure and consequently reduces the effort to validate compliance. There are four merchant levels (SAQ-A, SAQ-B, SAQ-C, SAQ-D) based on the number of transactions/card schemes (VISA, MasterCard)/most recent 12-month period.

## Are there any penalties for non-compliance? <a href="#merchantpcicompliance-generalinformation-whatarethepenaltiesfornon-compliance" id="merchantpcicompliance-generalinformation-whatarethepenaltiesfornon-compliance"></a>

Yes, there are. The payment card brands may, at their discretion, fine an acquiring bank up to $500,000 per month for PCI compliance violations. The banks will most likely pass this fine along until it eventually hits the merchant. But more devastating than fines, credit card companies can also revoke the right of a merchant to process credit card transactions, providing a “virtual death sentence” for many companies.

## What do 2Checkout merchants need to do to be compliant? <a href="#what-do-2checkout-merchants__00a0need__00a0to-do-to-be-compliant__003f" id="what-do-2checkout-merchants__00a0need__00a0to-do-to-be-compliant__003f"></a>

To be PCI compliant, merchants need to submit self-assessment questionnaires (SAQs) based on their business environment and implementation type.

The PCI DSS Self-Assessment Questionnaires (SAQs) are validation tools for merchants and service providers that are eligible to evaluate and report their PCI DSS compliance via self-assessment. There are a number of different SAQs available that are intended to meet the needs of particular types of environments.&#x20;

## In which category do 2Checkout merchants fall in? <a href="#merchantpcicompliance-generalinformation-inwhichcategorydo2checkoutmerchantsfallin" id="merchantpcicompliance-generalinformation-inwhichcategorydo2checkoutmerchantsfallin"></a>

Based on the type of integration and the overall number of transactions forecasted for a 12-month period, 2Checkout merchants need the following PCI compliance level:

| Integration               | Details     | Required SAQ |
| ------------------------- | ----------- | ------------ |
| Hosted shopping cart      | Hosted Cart | SAQ-A        |
| ConvertPlus shopping cart | Hosted Cart | SAQ-A        |
| InLine shopping cart      | iFrame      | SAQ-A        |
| Payment over API          | API         | SAQ-D        |
| 2Pay.js                   | API         | SAQ-A        |

SAQ A is recommended for merchants with less than 20,000 transactions per year (Level 4) and mandatory for those that transact over this threshold.

Specific questions about compliance validation levels and what you must do to validate your SAQ should be addressed to the acquiring financial institution or payment card brand. Below are the major credit card brand compliance programs:

* American Express: [www.americanexpress.com/datasecurity](http://www.americanexpress.com/datasecurity)
* Discover: [www.discovernetwork.com/fraudsecurity/disc.html](http://www.discovernetwork.com/fraudsecurity/disc.html)
* JCB International: <http://partner.jcbcard.com/security/jcbprogram>
* MasterCard: [www.mastercard.com/sdp](http://www.mastercard.com/sdp)
* Visa Inc: [www.visa.com/cisp](http://www.visa.com/cisp)
* Visa Europe: [www.visaeurope.com/ais](http://www.visaeurope.com/ais)

## VISA and Mastercard compliance validation levels for merchants <a href="#merchantpcicompliance-generalinformation-visaandmastercardmerchantlevels" id="merchantpcicompliance-generalinformation-visaandmastercardmerchantlevels"></a>

| Level no.   | No. of card transactions/12 months | SAQ Requirement                                                  |
| ----------- | ---------------------------------- | ---------------------------------------------------------------- |
| **Level 4** | up to 20K                          | SAQ recommended, not mandatory                                   |
| **Level 3** | 20K - 1M                           | SAQ mandatory                                                    |
| **Level 2** | 1M - 6M                            | SAQ mandatory, signed by a QSA or a trained PCI SSC ISA employee |
| **Level 1** | 6M+                                | SAQ replaced with PCI DSS certification                          |

## Cart type/merchant level  <a href="#merchantpcicompliance-generalinformation-carttype-merchantlevelmatrix" id="merchantpcicompliance-generalinformation-carttype-merchantlevelmatrix"></a>

|                                                          | Required SAQ | Level 4                                                                            | Level 3                                                                                     | Level 2                                                                             | Level 1                                                                                                                                              |
| -------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Hosted shopping cart                                     | SAQ-A        | <p><strong>Recommended:</strong><br><br>Yearly: SAQ-A</p>                          | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p><p> </p> | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p> | <p><strong>Required:</strong><br><br>Yearly: Attestation of Compliance ("AOC") by Qualified Security Assessor ("QSA")<br><br>Quarterly: ASV Scan</p> |
| ConvertPlus  shopping cart                               | SAQ-A        | <p><strong>Recommended:</strong><br><br>Yearly: SAQ-A</p>                          | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p>         | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p> | <p><strong>Required:</strong><br><br>Yearly: Attestation of Compliance ("AOC") by Qualified Security Assessor ("QSA")<br><br>Quarterly: ASV Scan</p> |
| InLine shopping cart                                     | SAQ-A        | <p><strong>Recommended:</strong><br><br>Yearly: SAQ-A</p>                          | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p>         | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p> | <p><strong>Required:</strong><br><br>Yearly: Attestation of Compliance ("AOC") by Qualified Security Assessor ("QSA")<br><br>Quarterly: ASV Scan</p> |
| Shopping cart via Order API (current API implementation) | SAQ-D        | <p><strong>Required:</strong> <br><br>Yearly: SAQ-D<br><br>Quarterly: ASV Scan</p> | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p>         | <p><strong>Required:</strong><br><br>Yearly: SAQ-A<br><br>Quarterly: ASV\* Scan</p> | <p><strong>Required:</strong><br><br>Yearly: Attestation of Compliance ("AOC") by Qualified Security Assessor ("QSA")<br><br>Quarterly: ASV Scan</p> |

\*ASV = approved scanning vendor

{% hint style="info" %}
&#x20; [2Checkout (now Verifone) is PCI Level 1 certified](https://verifone.cloud/sites/default/files/inline-files/2022-07/PCI%20DSS%20Verifone%202Checkout%20AoC%2030%20June%202022.pdf), which is the highest level of certification possible.
{% endhint %}


# Fiscal compliance (for merchants in/selling in US only)

This guide provides an overview of the financial compliance regulations that apply to merchants in the United States. It contains details about the 1099-K, W8 and W9 forms that merchants with a legal entity in the US or selling in the US are required to fill in for submission to the IRS.


# W-8 and W-9 fiscal forms

In order to be compliant with the fiscal regulations in the United States, our merchants need to have the W-8/W-9 forms agreed and digitally signed.

## What is the W-8 form? <a href="#what-is-the-w__002d8-form__003f" id="what-is-the-w__002d8-form__003f"></a>

The W-8 form is an Internal Revenue Service (IRS) form that is used to exempt non-US residents from submitting U.S. tax return reporting. Merchants that are registered outside the United States, but that run financial operations in US dollars are required to fill in and sign this form. These merchants (businesses or individuals) are not subjected to standard taxation practices as their investment income is not taxed.

The W-8 form is submitted by merchants only to financial companies that request it (payment processors like 2Checkout) and not directly to the IRS. Merchants that fail to submit the W-8 form can incur a 30% tax withholding and additional penalties.

## Who does the W-8 form apply to? <a href="#who-does-the-w__002d8-form-apply-to__003f" id="who-does-the-w__002d8-form-apply-to__003f"></a>

The form applies to non-US residents, namely to foreign entities (foreign individuals or corporations) and exempt foreigners who are neither U.S. citizens nor reside in the US.

There are a variety of W-8 forms and if you are not entirely sure which one applies to you, visit the IRS website for more information.

## What is the W-9 form? <a href="#what-is-the-w__002d9-form__003f" id="what-is-the-w__002d9-form__003f"></a>

The W-9 form is an Internal Revenue Service (IRS) form, also known as a Request for Taxpayer Identification Number (TIN) and Certification form, that is used solely to confirm a person’s taxpayer identification number (TIN).

Any corporation that is required to submit a [1099 form](https://verifone.cloud/docs/2checkout/Onboarding/Fiscal-compliance-for-merchants-in-selling-in-US-only/1099-K_Form_Requirements/) with the IRS must obtain and confirm your correct TIN to report any taxable earnings that may require you to submit a federal tax return.

The TIN holder is responsible for paying all the required taxes based on earnings reported in the provided W-9 form unless the taxpayer is subject to backup withholding. If this is the case, the W-9 form will have to include all the related details.

## Who does the W-9 form apply to? <a href="#who-does-the-w__002d9-form-apply-to__003f" id="who-does-the-w__002d9-form-apply-to__003f"></a>

Individuals (merchants) who have US citizenship or reside in the US or entities (corporations and companies) registered in the US are required to fill in and sign this form.

## Signing the W-8/W-9 forms on the 2Checkout platform <a href="#signing-the-w__002d8__002fw__002d9-forms-on-the-2checkout-platform" id="signing-the-w__002d8__002fw__002d9-forms-on-the-2checkout-platform"></a>

All merchants signed under Avangate Inc. or 2Checkout Inc. are required to fill in and digitally sign the W-8/W-9 forms and submit them to 2Checkout. Follow the steps below to sign the fiscal forms.

1. After the onboarding process is completed and your account is approved by the Underwriting team, you (merchant) need to fill in the fiscal compliance form that applies to you (either W-8 or W-9). If your account has not been approved yet by the Underwriting team, you will notice that your account is in RESTRICTED mode until you finalize the submission of the required fiscal forms.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>This form can be filled in only by the master account that belongs to the account holder.</p></div>
2. To sign the W-8/W-9 forms, log in to your master account in the cPanel and click on the **Complete now** link.<br>

   <div data-with-frame="true"><figure><img src="/files/Jidwkzoo2Qz9JRufDrKH" alt=""><figcaption></figcaption></figure></div>
3. Before submitting the W-9 form, make sure that all the personal and company information you provided is correct. If you notice that some of the information is not correct, contact <supportplus@2checkout.com> to help you make the necessary changes. Note that any detail changes in the Control Panel (Access the user settings, Account information, Edit account information) will automatically invalidate the forms.
4. Select the **I certify that I have the capacity to sign for entity identified above** checkbox and then click on the **Accept and submit** button.<br>

   <div data-with-frame="true"><figure><img src="/files/0L4bc9wj8lPrkgkktiYo" alt=""><figcaption></figcaption></figure></div>
5. After submitting the form, a message will be displayed on top of the page informing you that form was successfully submitted, as shown in the image below.<br>

   <div data-with-frame="true"><figure><img src="/files/jISO9I6OKw3Rio0qfeTH" alt=""><figcaption></figcaption></figure></div>
6. To access your W-8/W-9 forms and to verify you have submitted them, navigate to *Settings → Account information → Edit account information → IRS Forms section*.<br>

   <div data-with-frame="true"><figure><img src="/files/mhREUlPuUnTnGvklKOsP" alt=""><figcaption></figcaption></figure></div>
7. After submitting the fiscal compliance form, you will become fiscal compliant and your account will be displayed as ACTIVE.

## FAQs <a href="#faqs" id="faqs"></a>

<details>

<summary><strong>How long will my account be Restricted with reason code 406 Fiscal Sign?</strong></summary>

Your account will be in Restricted mode until you’ve accepted, signed and submitted the fiscal forms.

</details>

<details>

<summary><strong>How many notifications to sign the forms will I receive?</strong></summary>

You will receive a notification once a week.

</details>

<details>

<summary><strong>What happens when the forms expire?</strong></summary>

Your account will be put in Restricted mode with reason code 406 Fiscal Sign and the notification process will restart.

</details>

If you need additional information about this law you can read more details on the [IRS website](https://www.irs.gov/businesses/understanding-your-1099-k).


# 1099-K Form Requirements

## Overview <a href="#overview" id="overview"></a>

The United States Government has enacted a law (Internal Revenue Code Section 6050W) which requires payment processors to send an IRS the 1099-K form annually, to all US sellers starting with 2011.

The 1099-K form, Payment Card and Third Party Network Transactions is an IRS information return used to report certain payment transactions to improve voluntary tax compliance.

Read the instructions below on how to update your 2Checkout account to meet these requirements.&#x20;

{% hint style="info" icon="lightbulb" %}

#### **Recommended resources**

Offload back-office financial operations and let 2Checkout deal with reconciliation, refunds, chargebacks, tax/VAT handling, invoicing, while you focus on growing your business. Find out how you can stay up-to-date with worldwide financial and legal requirements.

<a href="https://www.2checkout.com/lp/2Checkout-Solution-Brief-Global-Tax-Financial-Services.html" class="button primary" data-icon="book-open-lines">Learn more</a>
{% endhint %}

## Availability <a href="#availability" id="availability"></a>

Form 1099-K applies to all US sellers.

## 2Checkout requirements <a href="#id-2checkout-requirements" id="id-2checkout-requirements"></a>

2Checkout will ask affected Sellers/Merchants to confirm and/or update their 2Checkout account by providing a tax ID number and the appropriate corresponding contact information.

Your tax ID number is one of these:

• Your Social Security Number (SSN)

• Your Employer Identification Number (EIN)

• Your Individual Tax Identification Number (ITIN)

Please use the guidelines below to determine which tax ID number to provide.

* Business Entities with an EIN

Provide your company EIN and company name.

* Sole Proprietors with an EIN

Provide your company EIN and your own name.

* Individual Sellers and Sole Proprietors without an EIN

Provide your SSN or ITIN and your own name.

2Checkout will also need affected Sellers/Merchants to confirm that their account name matches the tax ID number provided and to confirm their physical address so that if Form 1099-K is issued, we can report your information accurately to the IRS.

## Updating the 2Checkout account <a href="#updating-the-2checkout-account" id="updating-the-2checkout-account"></a>

Follow these steps to update your 2Checkout account in order to meet the fiscal compliance requirements.

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel) account.
2. Click the **Settings** tab.<br>

   <div data-with-frame="true"><figure><img src="/files/l6UeJLgezI6dniVez5fW" alt=""><figcaption></figcaption></figure></div>
3. In the **Account Settings** page, click on the **Edit Details** tab, under **Account Information**.<br>

   <div data-with-frame="true"><figure><img src="/files/ELpdwLLryPkWxuMh3h0N" alt=""><figcaption></figcaption></figure></div>
4. On the **Account Information** page, edit the necessary details, and confirm your account information is correct.
5. Click **Update** at the bottom of the page to save your new settings.
6. Confirm that the Company Name listed is correct. If your company is incorporated, make sure that the company name listed on your 2Checkout Account is exactly as it is listed on your incorporation documents. If your Company name is incorrect on this page, send an email to <supportplus@2checkout.com> for assistance in updating this field.
7. Confirm that the Business Office E-mail, Mailing Address, and Physical Address listed on the account are correct. Update if necessary. If the physical address listed on this page is incorrect, send an email to <supportplus@2checkout.com> for assistance in updating this field.

## FAQs <a href="#faqs" id="faqs"></a>

<details>

<summary><strong>How do I receive my 1099-K form?</strong></summary>

The platform will automatically generate the PDF for the 1099-K form for all merchants. You will receive an email notification that the file was generated and you will be able to download the file from your Merchant Control Panel, under *Account information → Edit account information*.\
\
Every year 2Checkout will generate a file for the IRS that will contain all your payments from the previous year.

</details>

<details>

<summary><strong>What if I don’t provide my Tax ID number?</strong></summary>

If 2Checkout is unable to verify your information because it is incorrect or incomplete, your account will be put in a **Restricted** status, so you will not be able to receive payouts. The restriction will end once you provide your tax ID number and corresponding contact information, and your information is verified by the IRS matching system.

</details>

If you need additional information about this law you can read more details on the [IRS website](https://www.irs.gov/businesses/understanding-your-1099-k).


# Payouts

## Overview <a href="#overview" id="overview"></a>

To be able to be paid by 2Checkout, you need to have a minimum of 50$/50GBP/50€ in your account, if you have a 2Sell or 2Subscribe account, or a minimum of 100$/100GBP/100€ if you are a reseller on the 2Monetize package.

This minimum amount (or minimum transfer limit) is defined in your payout currency value and can be changed from your [Merchant Control Panel](https://secure.2checkout.com/cpanel). You can also add a new [payout](https://verifone.cloud/docs/2checkout/Onboarding/) option to your account and set the minimum amount to be paid to you by 2Checkout.

{% hint style="info" icon="lightbulb" %}

#### Download this solution brief to discover how the 2Checkout Monetization Platform can maximize your conversion and retention rates.

<a href="https://www.2checkout.com/lp/2Checkout-Monetization-Platform.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

## Availability <a href="#availability" id="availability"></a>

All merchants can receive payouts from 2Checkout as long as their accounts are not in restricted mode.

Payouts are not available in [restricted countries](https://verifone.cloud/docs/2checkout/Onboarding/Get-started-with-your-2Checkout-account/Restricted-countries-and-territories/).

## How to add/edit your payout settings <a href="#how-to-add__002fedit-your-payout-settings" id="how-to-add__002fedit-your-payout-settings"></a>

{% hint style="info" %}
In order to add/edit any merchant information on your payout settings page, you need to have two-factor authentication enabled. Read more details on how to enable it [here](https://verifone.cloud/docs/2checkout/Onboarding/Activate-and-set-up-your-2Checkout-account/Two-factor-authentication/).&#x20;

All requests for modifying or changing the payout details of your account must be approved by the 2Checkout’s Financial department. Once a change request is sent, you need to wait for a response from 2Checkout before submitting another change request. While your request is pending approval from the 2Checkout Financial department, your account will be placed in 'Restricted' mode (which means that you are able to process new sales, but your payouts will be temporarily put on hold).
{% endhint %}

You can edit your existing payout details from your [Control Panel dashboard](https://secure.2checkout.com/cpanel/). Changes are applicable starting with the next Payment Period if approved by 2Checkout. Follow the steps below to add or edit your payout details:

1. Log in to your Merchant Control Panel.
2. In the upper-right corner, click on the drop-down menu and then go to **Settings** (your account settings), as shown in the image below.<br>

   <div data-with-frame="true"><figure><img src="/files/LFdWXT2TEzyyXtOddEEc" alt=""><figcaption></figcaption></figure></div>
3. On the *Account settings* page, scroll down to the *Payout details* section, and click on the **Add details** button, as shown below.<br>

   <div data-with-frame="true"><figure><img src="/files/Ge5pkUPMAeL9pzQTicLM" alt=""><figcaption></figcaption></figure></div>
4. On the *Payout details* page, you'll be able to add or edit the information 2Checkout uses to issue payouts for your account. Once you've selected the **payout method** and the **payout currency** from the drop-down menus shown in the image below, input the rest of the required details (bank name, beneficiary name, bank account, SWIFT, bank address, and bank country) and click the **Edit** button. After submitting your request, 2Checkout will review your payout information update within 2 days from the submission date.<br>

   <div data-with-frame="true"><figure><img src="/files/S5LyYh6bKWSUxHvNQfAb" alt=""><figcaption></figcaption></figure></div>
5. After pressing the **Submit** button, a message will inform you that the changes were successfully submitted. You'll also be notified by email after submitting your new payout details.

## Set your own minimum transfer limit <a href="#set-your-own-minimum-transfer-limit" id="set-your-own-minimum-transfer-limit"></a>

You can set yourself the minimum amount to be paid to you for any active payout options. To change your minimum transfer limit, follow these steps:

1. Log in to your Merchant Control Panel, navigate to *Settings →* [*Payout details*](https://secure.2checkout.com/cpanel/account_financial.php), and click on **Add details**.
2. In your *Defined payout details* section, click on the **Change** button next to the minimum transfer limit amount.<br>

   <div data-with-frame="true"><figure><img src="/files/yyoC9A4QbA2RB8k4NSxy" alt=""><figcaption></figcaption></figure></div>
3. Enter the new minimum transfer limit value (no less than 50 or 100 USD/EUR/GBP) and click **Save**.<br>

   <div data-with-frame="true"><figure><img src="/files/NtOGjbZgmbE0vdbdlmTL" alt=""><figcaption></figcaption></figure></div>
4. If you have a 2Sell or 2Subscribe account, you can update the minimum transfer limit directly from the **Estimated balance** tab. Go to *Accounting → Estimated balance* and click on **Change**.

## Payout & Reporting Periods <a href="#payout-__0026-reporting-periods" id="payout-__0026-reporting-periods"></a>

Payouts are set by default based on the type of package selected. 2Sell and 2Subscribe packages will have weekly payments and 2Monetize will have monthly payments, as default. Any changes will be subject to 2Checkout Finance approval.&#x20;

| Payout interval               | Day of the calendar month                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Sales of the Merchant Products                                                                                                                                                                                                                                                                       |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Weekly**                    | <ul><li><strong>16th day</strong> of the current calendar month (or, if the 16th day is not a business day, on the first business day after the 16th day of such particular calendar month)</li><li><strong>23rd day</strong> of the current calendar month (or, if the 23rd day is not a business day, on the first business day after the 23rd day of such particular calendar month)</li><li><strong>1st day</strong> of the next calendar month (or, if the 1st day is not a business day, on the first business day after the 1st day of such particular calendar month)</li><li><strong>8th day</strong> of the next calendar month (or, if the 8th day is not a business day, on the first business day after the 8th day of such particular calendar month)</li></ul> | <ul><li>from the 1st day to the 7th day of the current calendar month</li><li>from the 8th day to the 15th day of the current calendar month</li><li>from the 16th day to the 22nd day of the previous calendar month</li><li>from the 23rd to the last day of the previous calendar month</li></ul> |
| **Bi-weekly (twice a month)** | <ul><li><strong>1st day</strong> of the next calendar month (or, if the 1st day is not a business day, on the first business day after the 1st day of such particular calendar month)</li><li><strong>16th day</strong> of the next calendar month (or, if the 16th day is not a business day, on the first business day after the 16th day of such particular calendar month)</li></ul>                                                                                                                                                                                                                                                                                                                                                                                      | <ul><li>from the 1st day to the 15th day of the previous calendar month</li><li>from the 16th day to the last day of the previous calendar month</li></ul>                                                                                                                                           |
| **Monthly**                   | <ul><li>16th day of the next calendar month (or, if the 16th day is not a business day, on the first business day after the 16th day of such calendar month)</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | <ul><li>from the previous calendar month</li></ul>                                                                                                                                                                                                                                                   |

## Payout Options and Fees <a href="#payout-options-and-fees" id="payout-options-and-fees"></a>

| Payout method                                       | Details                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | Transfer time       | 2Checkout Fee                                                                                                                                                                            |
| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Wire transfer                                       | Wire transfers give you the assurance that your check-in-hand is as good as cash.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 2 - 5 business days | 15 USD/GBP/EUR (*only for 2Sell and 2Subscribe*)                                                                                                                                         |
| PayPal                                              | Real-time payment and money transfer solutions available globally. More details about PayPal [here](https://verifone.cloud/docs/2checkout/Documentation/03Billing-and-payments/Payment-methods/PayPal/).                                                                                                                                                                                                                                                                                                                                                                         | instant             | no 2Checkout fee (might incur fees from PayPal)                                                                                                                                          |
| Pre-paid 2Checkout MasterCard (powered by Payoneer) | <p>Receive payments from 2Checkout accounts with no 2Checkout transfer fees. Additionally, Payoneer provides direct ATM access to the funds transferred from the 2Checkout account onto the Payoneer account.</p><p>You can register for a Payoneer card from your Merchant Control Panel, by navigating to <a href="https://secure.2checkout.com/cpanel/avangate_mastercard.php">Settings - Payout details</a> and clicking on the <strong>2Checkout MasterCard powered by Payoneer</strong> tab. You will then be directed to Payoneer's website to complete your sign-up.</p> | 1 business day      | <p>no 2Checkout fee (might incur fees from Payoneer, for more details check your Payoneer agreement)</p><p><em><strong>Note:</strong> India does not support pre-paid Payoneer.</em></p> |

### Payout currencies <a href="#payout-currencies" id="payout-currencies"></a>

2Checkout supports three currencies for payouts for all merchants. Only ***one*** currency can be selected from the **Financial details** section of the Control Panel to receive payouts from 2Checkout.\* (See the **Payout destination** section below.) To change your payout currency, follow the steps described in [Payout settings](https://verifone.cloud/docs/2checkout/Onboarding/). The 2Checkout Financial Operations will review the payout information update request within 2 days of the submission date.

Expand table

| Account Type                                             | Payout method                 | Currency |
| -------------------------------------------------------- | ----------------------------- | -------- |
| <p> </p><p> </p><p> </p><p>2Sell</p>                     | <p> </p><p> </p><p>Wire</p>   | USD      |
|                                                          | Wire                          | GBP      |
|                                                          | Wire                          | EUR      |
|                                                          | PayPal                        | USD      |
|                                                          | Pre-Paid 2Checkout MasterCard | USD      |
| <p> </p><p> </p><p> </p><p> </p><p>2Subscribe</p>        | <p> </p><p> </p><p>Wire</p>   | USD      |
|                                                          | Wire                          | GBP      |
|                                                          | Wire                          | EUR      |
|                                                          | PayPal                        | USD      |
|                                                          | Pre-paid 2Checkout MasterCard | USD      |
| <p> </p><p> </p><p> </p><p> </p><p> </p><p>2Monetize</p> | <p> </p><p> </p><p>Wire</p>   | USD      |
|                                                          | Wire                          | GBP      |
|                                                          | Wire                          | EUR      |
| <p> </p><p></p>                                          | PayPal                        | USD      |
|                                                          | PayPal                        | EUR      |
|                                                          | Pre-paid 2Checkout MasterCard | USD      |

### Payout Destination <a href="#payout-destination" id="payout-destination"></a>

You can select one payment destination according to the payment details you set in the platform and that were accepted by 2Checkout. Additional payment destination is based on request and subject to additional charges.

## Deposits <a href="#deposits" id="deposits"></a>

You may have noticed that a percentage of your total sales is held in your account at all times. This amount/deposit may vary for each merchant and corresponds to a set percentage of sales that has been designated to stay in your 2Checkout merchant account on a rolling 90-day basis.

### How Are deposit Rates Determined? <a href="#how-are-deposit-rates-determined__003f" id="how-are-deposit-rates-determined__003f"></a>

Deposit rates are set in proportion to the level of risk of each merchant. While risk can never be entirely eliminated, it can be managed. Merchants who take an active role in preventing fraudulent claims often receive a lower deposit rate as a result.

Managing risk can be inherently more difficult in some industries. For example, intangible goods are much riskier than tangible goods from a fraud perspective, simply due to their nature. It’s much easier to prove that a tangible good was shipped to a customer than to prove that a service was provided or an intangible good was delivered; intangible goods merchants receive many more fraudulent claims because of this reality.

### Why Do deposit levels Rise? <a href="#why-do-deposit-levels-rise__003f" id="why-do-deposit-levels-rise__003f"></a>

Deposit levels can be raised for several reasons: sudden increases in chargebacks or refunds are the leading cause of raised deposit levels. If your deposit level has been raised, the change isn’t necessarily permanent. Our team continuously reviews accounts to ensure each merchant receives an appropriate deposit level and risk assessment. Additionally, merchants may request that their deposit levels be revisited if they’ve updated their business practices.

### Keep Your deposit Level Low <a href="#keep-your-deposit-level-low" id="keep-your-deposit-level-low"></a>

We want our merchants to have access to the largest portion of their funds possible at all times. Here are a few tips to keep your deposit rate as low as possible:

#### Prevent Chargebacks

[Chargebacks](https://verifone.cloud/docs/2checkout/Support-Center/Best_practices/How_to_increase_your_chances_of_winning_a_chargeback/) are the biggest reason why deposit levels are increased. Try to [keep your chargeback rate under 0.5%](https://verifone.cloud/docs/2checkout/Support-Center/Best_practices/How_to_lower_chargeback_rates/). You can achieve this by:

* Keeping an eye out for users who are subscribed to your services but haven’t utilized them in two or more billing cycles. Discontinued use could be an indicator that a buyer has forgotten about his or her purchase, which could result in a chargeback.
* Reviewing your sales frequently for consistency and fraud identification. Look at the number of purchases, the volume of purchases over a set time period, credit cards used, address verification system (AVS), card verification value (CVV), and buyer information like name, email address, billing and shipping addresses, and IP address to identify inconsistencies that may point to fraud.
* Making sure your website is complete and accurate. Describe the product(s) customers will receive, delivery processes, and expected delivery time frame in great detail to avoid surprises. Also, be sure that your refund and privacy policies are conspicuously displayed on your website and up-to-date. If you have the appropriate resources, it’s best to display product information in your customers’ preferred language(s) to prevent surprises and subsequent chargebacks.
* Be proactive with customer issues. This includes all of the following:
  * Make sure your contact information is up to date and allows customers to easily initiate communications through multiple channels (phone, live chat, email, etc).
  * Promptly respond to all inquiries.
  * Provide tracking information for tangible goods.
  * Remove or clearly identify any back-ordered products on your website.
  * Cancel duplicate transactions immediately upon discovery.
  * Cancel orders that were not fulfilled or were requested to be canceled.
  * Offer partial refunds to unhappy customers.
* When it comes to chargeback prevention, reviewing your orders for fraudulent activity or unhappy customers applies to both new sales and existing sales. Review your older sales to see if there are suspicious transactions or upset buyers with orders that require a partial or full refund in order to avoid chargebacks.

#### Prevent Fraud

Fraudulent orders go hand in hand with chargebacks. Take an active role in mitigating your risk of fraud by following these guidelines:

* Review your orders to make sure information is legitimate. For instance, make sure phone numbers are valid and that they match the states and/or countries listed on the billing information. Also, review the IP location to ensure it matches the billing address for each order.
* If you see that information does not match or is not valid, verify the order via phone to ensure its authenticity. If you are not able to do this, cancel the order or contact [2Checkout](https://www.2checkout.com/contact/contact-us-merchants/) for assistance with your fraud review.

## FAQs <a href="#faqs" id="faqs"></a>

<details>

<summary><strong>Why didn’t I receive the payment?</strong></summary>

There are multiple reasons for which your payment might be delayed. Here are the most common:

* The payment was processed but it hasn’t been credited to your account yet. In this case, the merchant must wait for the transfer which might take up to a few days depending on the region.
* The payment was processed but 2Checkout encountered an error. The merchant must contact the 2Checkout financial team to correct the transfer details and a new payment will be attempted manually afterward.
* The payment was not processed, because your account is under verification from the 2Checkout risk department.
* The payment was not processed, because no payment details were available from the merchant's side.

</details>

<details>

<summary><strong>Can you change the minimum transfer limit?</strong></summary>

The [minimum transfer limit](https://verifone.cloud/docs/2checkout/Onboarding/) is the threshold value you need to exceed in order to receive payouts from 2Checkout. This is defined in your payout currency value and can be changed from your [Merchant Control Panel](https://secure.2checkout.com/cpanel/account_financial.php). When adding a new payout option to your account, you can set the minimum transfer limit to be used for the payout option you are adding. Alternatively, you can adjust the transfer limit set for currently active payout options.

</details>

<details>

<summary><strong>How can I withdraw payments to my account?</strong></summary>

Payments are processed automatically by 2Checkout and, depending on your account type and business model, the payments are done [weekly, bi-weekly or monthly](https://verifone.cloud/docs/2checkout/Onboarding/) provided they are within the [minimum transfer limit](https://verifone.cloud/docs/2checkout/Onboarding/). This means you cannot manually withdraw your funds from your 2Checkout/Payoneer/bank account.

</details>

<details>

<summary><strong>What are the deposits? What is the percentage of the retained deposit? When do I receive the deposit held?</strong></summary>

As a merchant using 2Checkout as your online payment processor, you may have noticed that a percentage of your total sales is held in your account at all times. This amount is called a deposit and varies for each merchant; it corresponds to a set percentage of sales that has been designated to stay in your 2Checkout merchant account on a rolling 90-day basis.

</details>

<details>

<summary><strong>How much is the transfer fee for a payout?</strong></summary>

Depending on your payout method, different taxes might apply. Read more details on payout transfer fees [here](https://verifone.cloud/docs/2checkout/Onboarding/).

</details>

<details>

<summary><strong>Can I receive payment in another currency?</strong></summary>

You can receive payments in either USD, EUR, or GBP, but you can choose *only* one currency at a time, and you have the option to enable/disable payout currencies from your [Merchant Control Panel](https://secure.2checkout.com/cpanel/account_financial.php). Keep in mind that any payout details changes submitted by the merchant must be approved by the 2Checkout Financial department.&#x20;

</details>

<details>

<summary><strong>How can I change my payout method?</strong></summary>

You can [change your payout method](https://verifone.cloud/docs/2checkout/Onboarding/) from your 2Checkout Merchant Control Panel. Any payout details changes submitted by the merchant must be approved by the 2Checkout Financial department.

</details>

<details>

<summary><strong>How is the exchange rate applied?</strong></summary>

For details about the calculation of the exchange rate, visit [this page](https://verifone.cloud/docs/2checkout/Documentation/03Billing-and-payments/Payment-operations/Exchange-rate/).

</details>

<details>

<summary><strong>What is the minimum transfer limit value that I can set on my account?</strong></summary>

Based on your 2Checkout package, the minimum value for the transfer limit can be either **50** or **100 USD/EUR/GBP**, regardless of the payout option you use. In case you are paid in a currency different than USD, GBP, or EUR, then your transfer limit will be the converted value of either 50 or 100 USD (based on your package) in your payout currency. Example: 3500 Indian rupees.

</details>

<details>

<summary><strong>Do my Control Panel changes of transfer limit apply instantly?</strong></summary>

Transfer limit changes from Control Panel apply instantly on your account, **with one exception**. If you have a payout that is due the day you make the change or the day after, the transfer limit value will start to apply with the next payout cycle.

Example: You perform a change in your transfer limit on April 24th. You already have some invoices that are due to be paid on April 25th. 2Checkout informs you that your new transfer limit has been set, but this value will become effective after 2Checkout will issue your payment on April 25th.

</details>

<details>

<summary><strong>How can I find out what type of account I have on the 2Checkout platform?</strong></summary>

[Read this article](https://verifone.cloud/docs/2checkout/Onboarding/Activate-and-set-up-your-2Checkout-account/How-do-I-know-what-type-of-2Checkout-account-I-have/) to find out information on how to find out the type of 2Checkout account you have.

</details>

<details>

<summary><strong>How long can 2Checkout keep my money before transferring the amount to me?</strong></summary>

Funds are transferred on payout dates as long as your account is active and the [transfer limit you set](https://verifone.cloud/docs/2checkout/Onboarding/) was reached.&#x20;

</details>

<details>

<summary><strong>Where can I find information about the verification code?</strong></summary>

You can read more information about the two-factor authentication code [here](https://verifone.cloud/docs/2checkout/Onboarding/Activate-and-set-up-your-2Checkout-account/Two-factor-authentication/).

</details>


# Finance and accounting


# Finance documents

## Overview

The **Accounting** menu provides an easy way of keeping tabs on your 2Checkout account's financial activity.

## Availability

All 2Checkout accounts.

## How to run net sales reports

1. Access the **Finance documents** area by opening the corresponding menu in the **Accounting** section.
2. Use the **Period net sales** section to generate reports based on the net sales generated on your account within a specified time period. The report displays by default the net sales due in the last 30 days.
3. Use the **Period net sales search** section to choose the period net sales status, due date and paid date to include in the report.
4. Once you have finished configuring your filters, click **Search**. The report is displayed below and it contains 10 results/page. You can extend the displayed results number to 200 results/page.
5. Export the entire generated report in CSV format by clicking the **Export as CSV** button.
6. Click the **More info** button to see more information about a specific transaction.
7. You can also download the transaction's invoice in either HTML or XML format, by selecting the desired format from the **Actions** column.

The **Paid on** column also shows you the invoice status:

* Not paid
* Partially paid
* Paid
* Canceled

2Checkout allows you to download multiple types of net sales reports for each sale:

* Product overview report
* Orders overview report
* Products Report

Click the corresponding download link for each of these reports to download them.

## How to run disputes balance reports

Use the **Disputes balance** section to generate reports based on the chargebacks opened on your account within a specified time period. The report displays by default the invoices due in the last 30 days.

1. Choose the dispute balance status, due date and paid date to include in the report in the **Disputes balance** **search** section.
2. Once you have finished configuring your filters, click **Search**. The report is displayed below and it contains 10 results/page. You can extend the displayed results number to 200 results/page.
3. Export the entire generated report in CSV format by clicking the **Export as CSV** button.
4. Click the **More info** button to see more information about a specific transaction.
5. Download the transaction's invoice in HTML format, by selecting the desired format from the **Action** column.
6. Download individual reports in CSV format for each transaction by clicking the corresponding download links.

The amounts shown in the CSV reports can have one of two possible statuses:

* **HOLD** = opened chargebacks
* **RELEASE** = closed chargebacks

The **Disputes balance** section also provides you information about your chargeback fund. The chargeback fund is retained by 2Checkout as soon as you sign the contract. 2Checkout uses this fund to settle chargebacks and refunds opened as late as six months after the termination of your 2Checkout contract. Six months after your 2Checkout contract ends, you receive the remaining chargeback fund back into your account.

## How to view accounting services invoices

Generate reports based on the type of accounting services that you use in the **Services** section.

1. Use the **Accounting services** section to filter the invoices based on their type, status, payment date and due date.
2. Once you have finished configuring your filters, click **Search**. The report is displayed below and it contains 10 results/page. You can extend the displayed results number to 200 results/page.
3. Download each invoice in PDF format, by selecting the format from the **Actions** column, or download the entire report in CSV format by clicking **Export as CSV.**

Related:

* <https://verifone.cloud/docs/2checkout/Documentation/myAccount/Products-and-subscriptions-listing-query-parameters>
* <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/03Subscriber-management-and-self-service>
* <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/01Subscription-Billing-Set-up/03Contracts>


# Accounting activity

## Overview

The **Accounting** menu provides an easy way of keeping tabs on your 2Checkout account's financial activity.

## Availability

All 2Checkout accounts.

## Metrics

The **Account status** section gives you an overview of the following metrics:

* **Net sales** = due payments that 2Checkout will pay you after all the taxes, fees and commissions are deducted. Net Profit = Quantity \* (Unit Price - Unit Discount - Affiliate Commission) - Processing Fee - Total VAT + (DIS Profit - DIS Cost)
* **Service invoices** = unpaid charges you incurred for services such as marketing services, chargeback fees.
* **Disputed orders balance** = amounts 2Checkout retained for all open chargebacks at the end of the reporting period.
* **Chargeback funds** = the chargeback fund is retained by 2Checkout as soon as you sign the contract. 2Checkout uses this fund to settle chargebacks and refunds opened as late as six months after the termination of your 2Checkout contract. Six months after your 2Checkout contract ends, you receive the remaining chargeback fund back into your account.
* **Minimum transfer limits** = the minimum payout amount that you must reach before 2Checkout pays you.

## View your accounting summary

To get an overview of your payments, go to the [Payments](https://secure.avangate.com/cpanel/accounting_payments.php) section. The accounting summary page aggregates financial details about your account. You can see details about the last payment received from 2Checkout and generate reports based on your account's financial activity.

#### Last payments

The **Last payments** area shows you the most recent 10 payments that you have received from 2Checkout.

#### More info

If you want to see detailed information about what the total amount includes, click the **More info** button at the right side of the table row. Once you expand the row, you can see what the total amount includes.

#### Export

You can also export detailed transfers lists by clicking the corresponding link.

## Run financial activity reports

1. Use the **Filter transactions** section to choose the type of transactions to be included in the report. You can select the transaction status, the invoice date, when it was paid and the transaction type.
2. Once you have finished configuring your filters, click **Search**. The report is displayed below and it contains 10 results/page. You can extend the displayed results number to 20 results/page.
3. Click the **More info** button to see more information about a specific transaction.
4. You can also download the transaction's invoice in either HTML or XML format, by selecting the desired format from the **Actions** column.

## Payments history

1. Use the **Transfers history** tab to run reports on all the payments that you received from 2Checkout. Configure the filters in the **Transfer history search**section and click **Search** when you're ready to generate the report. The reports include the payment type, date and the amount.
2. Click the **More info** button to see more information about a specific payment, such as the payments that are included in it.
3. Export the report in CSV format by clicking the **Export detailed transfers** link.

## Network cross-sell commissions

1. The Accounting -> Payments section also provides you information related to the commissions that you have earned from network cross-selling campaigns.
2. Go to the **Network cross-sell commissions** tab and use the **Payment date** and **Payment currency** filters to generate reports.
3. Once you have finished configuring your filters, click **Search**. The report is displayed below and it contains 10 results/page. You can extend the displayed results number to 200 results/page.
4. Click the **More info** button to see more information about a specific payment.
5. Download the full report that includes all payments in CSV format by clicking **Export as CSV.** Alternately, you can download reports for each payment by clicking the **Export detailed transfers** link.

### Related

* <https://verifone.cloud/docs/2checkout/Documentation/myAccount/Products-and-subscriptions-listing-query-parameters>
* <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/03Subscriber-management-and-self-service>
* <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing-Set-up/03Contracts>


# Quick payment reports

## Overview

Quick payments allow you to provide extra money to your top affiliates either though a one-time payment or via recurrent payments.

## Availability

All 2Checkout accounts.

## Generate quick payments reports

You can find the **Quick payments** tab in the **Accounting -> Direct payments** menu.

1. Use the **Quick payments search** section to configure the filters used in generating the report. You can filter the results by target affiliate, website or the payment date.
2. Once you have finished configuring your filters, click **Search**. The report is displayed below and it contains 10 results/page. You can extend the displayed results number to 20 results/page
3. To export the entire report as a CSV file you can use the **Export as CSV** button.

The report shows you the payment date, the target affiliate, the amount you paid to your affiliate, 2Checkout's commission and the payment status (**Succeeded** or **Failed**).

Related resources:

* <https://verifone.cloud/docs/2checkout/Documentation/myAccount/Products-and-subscriptions-listing-query-parameters>
* <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/03Subscriber-management-and-self-service>
* <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/01Subscription-Billing-Set-up/03Contracts>


# Help & FAQs

## How to get help

If you are having any difficulty with the onboarding process, our support teams can help you.

In the upper-right side of your Merchant Control Panel, you’ll find a permanent link to our [documentation](https://verifone.cloud/docs/2checkout).

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

If you are still having trouble finding the right answers to your questions, the 2Checkout support team is always ready to assist. You can [submit tickets](https://secure.2checkout.com/cpanel/contact.php) or chat with members of the support team regarding your specific questions.

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

## FAQs <a href="#faq" id="faq"></a>

{% stepper %}
{% step %}

### **How do I know if 2Checkout is available in my country?**

2Checkout is available in most countries, but there are a number of territories and countries that are restricted from doing business with 2Checkout. If you and/or your business are from one of these countries, you cannot use the 2Checkout products and services.

Also, 2Checkout does not accept PSP merchants or businesses (2Sell and 2Subscribe accounts) from several countries (Afghanistan, Algeria, American Samoa, Antigua and Barbuda, Bahamas, Benin, Botswana, Brunei Darussalam, Cambodia, Cameroon, Cote d'Ivoire, Faroe Islands, French Guiana, Gabon, Georgia, Ghana, Greenland, Guadeloupe, Guinea, Guinea-Bissau, Iraq, Jamaica, Lybia, Maldives, Mali, Mozambique, Myanmar, Namibia, New Caledonia, Nicaragua, Northern Mariana Islands, Qatar, Reunion, Rwanda, Senegal, Seychelles, Eswatini, Tajikistan, Tanzania, United Republic of Timor-Leste, Tunisia, Turkmenistan, Uganda, United States Minor Outlying Islands, Venezuela, Yemen). Shopper transactions from these countries are allowed based on internal risk assessment.&#x20;
{% endstep %}

{% step %}

### **What tax identification documents do I need to create an account?**

[Read here about all the documents](https://verifone.cloud/docs/2checkout/Onboarding/Activate-and-set-up-your-2Checkout-account/) and details you need to provide to 2Checkout to create an account.
{% endstep %}

{% step %}

### **Can I add a second website to the 2Checkout account to get the same payment information?**

If you have a 2Sell or 2Subscribe account, you can have more than 1 associated URL. The request to add a new URL on the account requires risk review and approval, and you can submit it to <compliance@2checkout.com>.

If you have a 2Monetize account, this is limited to pointing towards 1 URL for the process of generating sales. Any new website that generates traffic needs to have its own account, and all accounts operated by the same entity can be grouped under one multi-account. Requests for new URLs can be sent to <csmsupport@2checkout.com> or <info@2checkout.com>.
{% endstep %}

{% step %}

### **How can I change the website URL or business name in my account?**

You cannot perform these updates on your own from your account, but you can reach out to us as additional documentation might be required.

If you have a 2Sell or 2Subscribe account, you can send your request to change the website URL/business name to <compliance@2checkout.com>, and our Underwriting team will help you out.

If you have a 2Monetize account, you can request the update to our CSM team's email addresses: <csmsupport@2checkout.com> or <info@2checkout.com>.
{% endstep %}

{% step %}

### **Can I create a 2Checkout account as an individual, without a company?**

Yes, this option is currently available in the application form for any type of account you may choose to apply for.
{% endstep %}

{% step %}

### **How can I cancel/delete my 2Checkout account?**

If you want to delete your account, contact us from the same email address on which your account is registered and our dedicated teams will help you settle and close your account.
{% endstep %}

{% step %}

### **What are the European Economic Area (EEA) Countries?**

| Non-cross border | Cross border  |
| ---------------- | ------------- |
| Austria          | Bulgaria      |
| Belgium          | Croatia       |
| Czech Republic   | Cyprus        |
| Denmark          | Estonia       |
| Finland          | Hungary       |
| France           | Iceland       |
| Germany          | Latvia        |
| Greece           | Liechtenstein |
| Ireland          | Lithuania     |
| Italy            | Malta         |
| Luxembourg       | Slovakia      |
| Netherlands      | Slovenia      |
| Norway           |               |
| Poland           |               |
| Portugal         |               |
| Romania          |               |
| Spain            |               |
| Sweden           |               |
| Switzerland      |               |
| United Kingdom   |               |
| {% endstep %}    |               |
| {% endstepper %} |               |


# Start using 2Checkout

Whether you’re expanding into global markets, improving conversion rates, or managing a subscription business, 2Checkout helps you handle global digital commerce with ease.


# What is 2Checkout? Platform Overview & Key Features

2Checkout (by Verifone) is an all-in-one payment platform that enables businesses to sell digital goods, software, and online services to customers worldwide. 2Checkout provides the infrastructure to accept payments, manage your product catalog, automate billing, and handle compliance — all from a single platform.

## What 2Checkout does

At its core, 2Checkout connects your business to a global payment network. When a customer visits your store and clicks a buy link, 2Checkout handles the entire order flow: presenting a secure hosted checkout page, processing the payment, managing the transaction, and notifying you of the outcome.

Beyond the checkout moment, the platform supports the full lifecycle of a digital business:

* **Product catalog management** - set up a product catalog with electronic or physical products, manage SKUs, and customize pricing and charging scenarios.
* **Buy-link generation** - generate checkout links to embed on your website without complex development work.
* **Subscription and renewal billing** - control the subscriptions that you're selling and provide deeper insight and granularity into their post-sale evolution.
* **Global payments** - accept payments in over 100 display and billing currencies across more than 45 payment methods.
* **Customer account management** — your buyers get their own 2Checkout myAccount portal to view orders, manage subscriptions, and request refunds.
* **Reporting and operations** — manage day-to-day operations including orders, customers, payouts, and analytics.

## Account Types

2Checkout offers three account types, each designed for a different business model. The account type you have determines which features are available to you.

{% tabs %}
{% tab title="2Sell" %}
{% hint style="info" icon="tag" %}

#### Easy and Simple way to Sell Globally

{% endhint %}

Accept mobile and online payments from buyers worldwide, no matter where your business is. 2Sell is suited for merchants who sell digital products, physical goods, or services - using either one-time purchases or recurring billing - and want to be ready for global online sales with minimal setup.

<a href="https://www.2checkout.com/products/2sell/" class="button secondary" data-icon="book-open-lines">2Sell Product</a>
{% endtab %}

{% tab title="2Subscribe" %}
{% hint style="info" icon="arrows-spin" %}

#### Develop & Boost your Subscription Business

{% endhint %}

Everything you need to sell and manage subscriptions globally, prevent churn, and more. 2Subscribe includes all the tools needed to manage recurring billing plans, trials, renewals, and subscription lifecycle events.

<a href="https://www.2checkout.com/products/2subscribe/" class="button secondary" data-icon="book-open-lines">2Subscribe Product</a>
{% endtab %}

{% tab title="2Monetize" %}
{% hint style="info" icon="circle-dollar" %}

#### All-in-one Solution for DIGITAL GOODS Sales

{% endhint %}

The package that helps digital goods businesses maximize conversion and retention rates and grow revenue streams worldwide. 2Monetize offers ready-to-use tools and services that help you increase conversions, keep customers engaged for longer, and grow your average order value.

<a href="https://www.2checkout.com/products/2monetize/" class="button secondary" data-icon="book-open-lines">2Monetize Product</a>
{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Not sure which account type you have?** Log in to your Merchant Control Panel, click the cogwheel icon in the top-right corner, go to **Settings** → **Account Settings** → **Account Information**, and click **Edit details**. Scroll to the **Account documents** section and open the PDF — this is your signed contract with 2Checkout and confirms your account type, along with the margins and fees that apply to your account.

See more information in [Identifying Your Account Type](/get-started/getting-started/activate-your-account/how-do-i-know-what-type-of-2checkout-account-i-have) documentation.&#x20;
{% endhint %}

## Key Platform Features

### Flexible checkout options

2Checkout's **ConvertPlus** checkout enables multiple integration approaches. You can add products to your catalog and generate static buy-links, or pass product information dynamically to the checkout page using URL parameters — useful if you want to avoid maintaining a full product catalog. You can also integrate third-party shopping cart applications, though this option is available only for accounts that handle their own tax and invoice management (2Sell and 2Subscribe).

### Product catalog

The platform supports both **electronic and physical products**. You can add products individually or import them in bulk using XML files. For physical products, you can configure shipping methods to manage costs and delivery options.

### Test environment (Demo mode)

Every new account starts in **demo mode**. In this state, your account is fully functional — you can set up products, configure renewals and fulfillment, generate test links, and place test orders — but no real transactions are processed. Demo mode is designed so you can validate your entire setup before going live. Your dashboard will display sample data until your first real transaction is processed.

### Global selling

2Checkout supports selling to customers in most countries worldwide, with over **45 payment methods** and **100 display and billing currencies**. Note that merchants located in, or selling products originating from, certain restricted jurisdictions — including Cuba, Iran, North Korea, Syria, and the Crimea, Donetsk, and Luhansk regions — are not permitted to use the platform.


# Sign up for a 2Checkout Account

1. To sign up for a 2Checkout account, visit [2Checkout](https://www.2checkout.com/) and click on the **Sign up for free** green tab.<br>

   <div data-with-frame="true"><figure><img src="/files/jGJn86H4FRAM5KRIFbKz" alt=""><figcaption></figcaption></figure></div>
2. Once prompted with the types of accounts in the 2Checkout offer, select the one that suits your business purpose the most, and once again, click the **Sign up for free** button.<br>

   <div data-with-frame="true"><figure><img src="/files/yMZlvAM9PqY7xlvpgxD0" alt=""><figcaption></figcaption></figure></div>
3. Fill in the form with your details and click on **Get started**.<br>

   <div data-with-frame="true"><figure><img src="/files/C6OAoY36h6hlNl7YGXou" alt="" width="417"><figcaption></figcaption></figure></div>
4. Check the type of goods you want to sell with 2Checkout and click on **Create account**.<br>

   <div data-with-frame="true"><figure><img src="/files/K8wKxXmFduiexAKm5u0S" alt=""><figcaption></figcaption></figure></div>
5. Once the creation of your account is confirmed, click on **Login to my account**.<br>

   <div data-with-frame="true"><figure><img src="/files/h1oWbeFhA5MC8OID6ODy" alt=""><figcaption></figcaption></figure></div>
6. Log in to your new 2Checkout account.<br>

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


# Set up your 2Checkout Account

After signing up for an account by filling in the form on the 2Checkout website, you can access the Merchant Control Panel, but before you can start selling with 2Checkout, you need to finalize a few more steps.

{% hint style="info" %}
The steps below apply to all accounts, including those using third-party services to connect to the 2Checkout platform.&#x20;
{% endhint %}

To use your 2Checkout account to sell goods and services, you need to request activation of your live account. To do this, you must first:

* Add a product/plan
* Generate a buy link and place a test order

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

{% stepper %}
{% step %}

## Add your first product or plan

Product catalog management is one of the most important aspects of your online store. [This guide](https://verifone.cloud/docs/2checkout/Documentation/01Product-catalog/02Products_and_subscription_plans/01Mandatory_product_info/) will show you how to add the first product within your 2Checkout Merchant Control Panel. Our platform supports the creation of both electronic and [physical products](https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/02Subscription-Packaging-and-Pricing/02Set-up-subscription-plans-for-physical-products/). Adding [shipping methods](https://verifone.cloud/docs/2checkout/Documentation/01Product-catalog/03Products_with_physical_delivery/Configure_shipping_methods/) will give you more control over your costs and income from tangible products.

You can add your products one by one, or do a [batch import via XML files](https://verifone.cloud/docs/2checkout/Documentation/01Product-catalog/Import-Export-product-and-pricing-data/Import_product_data_using_XML_files/).&#x20;

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

{% hint style="info" %}
You can also receive payments from customers worldwide without the need to add catalog products. [ConvertPlus](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/) enables you to pass the product information dynamically to the checkout page, either by using URL parameters or via your 2Checkout Merchant Control Panel.
{% endhint %}
{% endstep %}

{% step %}

## Generate your first buy-link and place a test order

### Link your website to the 2Checkout ordering process

2Checkout offers different options for linking your website to your secure hosted 2Checkout order flows. The ConvertPlus buy-links trigger different order flows designed to suit a variety of business needs.

To see the different options available, go to **Setup** → [Generate links](https://secure.2checkout.com/cpanel/integration.php). To link your website to your 2Checkout ordering page, copy and paste the checkout links you’ve generated into the web page that will host the purchase button/link.

If you’re aiming to integrate other shopping cart applications with your 2Checkout account and take advantage of an integrated solution in order to provide a superior buying experience and receive worldwide payments, you can check the available options [here](https://verifone.cloud/docs/2checkout/Shopping-cart-integration/). Integrations with other shopping cart applications are available only for 2Checkout accounts that **handle their own tax and invoice management**.&#x20;

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

### Place test orders

No matter what option you choose when setting up your products or subscription plans, or integrating the checkout process within your website, it is important to run tests to make sure the selected settings work flawlessly. Testing is the best way to make sure that the actual user experience is the one you want. It is also a way to test how 2Checkout notifies you about the different types of transactions.

Using the 2Checkout testing system you can replicate new acquisitions and trial purchase scenarios, as well as automatic renewals, trial conversions, manual renewals, and upgrades.

To generate a test link and place a test order using the [test billing information](https://verifone.cloud/docs/2checkout/Documentation/09Test_ordering_system/02Place-test-orders-from-the-Merchant-Control-Panel/), click [here](https://verifone.cloud/docs/2checkout/Documentation/09Test_ordering_system/02Place-test-orders-from-the-Merchant-Control-Panel/).
{% endstep %}

{% step %}

## Request activation of your account

When you log into your account (until your application is approved), you will see a blue banner at the top of your account that says, **“Your account is currently in demo mode”**. Even though your account is in demo mode, everything is completely functional. You can set up products, renewals, and fulfillment or delivery information, as well as test and use all the other available features. This mode allows you to test your setup to make sure everything works as expected, prior to launching your 2Checkout store.

To finalize your account setup, so that your 2Checkout live transactions can be processed, you must **submit your application for approval**, as explained [here](https://verifone.cloud/docs/2checkout/Onboarding/Activate-and-set-up-your-2Checkout-account/).

The 2Checkout's underwriting team will review your application right away and will get in touch with you to either request additional information, if required, or notify you about the resolution.

Once your application is approved, your 2Checkout account is live and you can start using it to process real orders. Your [Dashboard](https://secure.2checkout.com/cpanel/) will continue to display sample data until you register your first real transaction.

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

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


# Activate your 2Checkout Account

After you create your account with 2Checkout, you need to request the activation of your live account by completing a form and providing information that will help us verify the business and identity of the individuals involved in your business.

Your activation request will be analyzed manually by 2Checkout’s Underwriting team and it is a mandatory step before you can start selling. Do make sure you check your email for any requests you may get from 2Checkout that are needed to finish the activation process.

## How to activate your account <a href="#activate-your-2checkout-account" id="activate-your-2checkout-account"></a>

{% stepper %}
{% step %}

### Start the activation process

Activate your 2Checkout account by clicking on the **Start activation** button, as shown below. Upon clicking on the *Start activation* button you'll be prompted with an application form that you need to fill out to provide information about your business.

{% hint style="info" %}
If you haven't started the account activation, you will see an orange button that displays the text *Demo mode* at the top of your Merchant Control Panel and asks you to *Add information about your business to activate your account and start selling*.
{% endhint %}

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

{% hint style="warning" %}
All application fields are mandatory. It will take you about 5–10 minutes to complete the form. In case you don’t have all the information at hand, you can always **save the application** and continue at a later stage.
{% endhint %}

If you are on the PSP business model (2Sell or 2Subscribe accounts), the Start selling steps in the drop-down will look like this:

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

{% step %}

### Fill in the application form

After hitting the *Start activation* button as described above, you'll need to fill out the activation form in order to be able to sell with us.&#x20;

**Before you start** filling out the form, you'll be prompted with a page that:

* informs you about your pricing plan
* states the purpose of the form
* explains the activation process

{% hint style="info" %}
Make sure that you have the following documents are ready to upload during the application process:

* A **company registration** document (chamber of commerce extract or articles of incorporation)
* A **valid passport** or official **identity card** (not a driver’s license) of the person signing the contract and of shareholders who, directly or indirectly, have 10% or more of the shares or voting rights. (Note that the [MRZ code](https://en.wikipedia.org/wiki/Machine-readable_passport) needs to be clearly visible.)
  {% endhint %}

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

Once you click **Next**, you can see all the required info and also how to fill out the form.
{% endstep %}

{% step %}

### About your business

Tell us the basics of your business.

1. Let us know what is the **Trade name** of your business. This can be your business registered name or your full name as seen in your National ID if your business is not registered yet. The name of your business will be displayed to your customers during checkout.
2. Select the **Business type** for your company from the drop-down list:
   * **Individual or Sole proprietorship** – your business is unincorporated and you are the only person responsible and liable for all your company’s profit and debts
   * **Partnership** – your company’s profit and debts are owned and/or shared by two or more individuals
   * **Private corporation** – your company’s shares are not publicly traded and are held by a small number of stockholders (shareholders)
   * **Public corporation** – your company’s shares are publicly traded and are held by a large number of stockholders (shareholders)
   * **Limited Liability Corporation (LLC)**
   * **Non-profit** – your company serves the public interest and runs charitable activities or is raising funds from the public
   * Other<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><h4>Keep in mind!</h4><ul><li><input type="checkbox">If you select the business type as <strong>Individual</strong>, you need to add your <strong>personal details</strong> (date of birth, ID number as printed on your national identification documents, such as ID-card, passport or residents permit, and your phone number), and your <strong>fiscal address</strong> <strong>details</strong> (country, city, address, ZIP/postal code). In the unlikely event that we need to contact you, a phone number is our preferred alternative to email. Verifone will not spam you.</li><li><input type="checkbox">If you select any of the other business types, you need to provide the <strong>company registration date</strong> (date when your business was established) and the <strong>Registered business address</strong> (country, city, address, ZIP/postal code). The company address cannot be from a Virtual Box or a P.O. Box.</li></ul></div>

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

Click **Next** to continue with the **Financial details** of your business.

#### Financial details

Verifone needs this information to assess your company financially from a risk standpoint. You need to provide the following details:

* **Company Registration ID**
* **Tax registration number** – Same with company registration ID in some cases. Depending on your country, the tax registration can have different names (Tax ID in USA, VAT in EU, GST in India, etc.). The Tax or Value Added Tax number (VAT) is issued by the Tax Office at the moment of registration of the business. You can provide your Tax or Employer Identification Number, or, in case you use your Social Security Number for business tax purposes, you can provide that instead.
* **Annual online transacted volumes** (in US dollars) – for start-ups with no processing history, we recommend entering $10,000 - $30,000 or less, unless you have some special circumstances around your launch. Otherwise, use your current processing statements as a guide.
* **Average order value** (in US dollars)
* **Chargeback rate** for the past 12 months and an estimation for the next 12 months

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

Click **Next** to provide details about the **Stakeholders.**

#### **Stakeholders**

To be compliant with financial regulations and anti-money-laundering laws, 2Checkout is required to know the identity of the individuals who substantially control or own your company. &#x20;

Click **Add stakeholder** to provide details either about yourself and/or about any beneficiary having 10% or more voting rights, shares, or other direct or indirect control in your company.

* First name
* Last name
* Stakeholder type – Owner/Legal representative or both
* Role – The position/role the stakeholder has within your company.
* Ownership share – Share percentage that the stakeholder has in the company.
* Email
* Phone
* Country
* City
* Address
* ZIP/Postal code
* Date of birth
* National identification number – This is your [national identification number](https://en.wikipedia.org/wiki/National_identification_number) and depending on your country it can have different names. This will be used for identity verification and soft credit check that will not affect your credit score.

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

{% step %}

### About your products

Tell us more about the products and services you provide. The information you provide will help us to verify and understand what your customers will receive.

You need to add information about:

* **Product or services category**
  * Online services – Selling access to online services without physical or digital delivery, either software as a service such as hosting or access to educational content
  * Digital goods/software – Selling digitally deliverable goods, such as software licenses or access to files (such as PDF) downloads
  * Offline services – Offline services such as yoga classes
* **Have you processed online transactions before for this type of business?**
* **Product access instruction for review**
  * We need access to your product in order to understand what you sell and to test your product for compliance purposes. For most popular product types, access can mean:
    * Username & password (for SaaS products)
    * Download URL + username & password and license key if applicable (for products that can be downloaded)

{% hint style="info" %}
Your business must operate within the permitted use of Verifone services outlined in our [Acceptable Use Policy](http://www.2checkout.com/legal/acceptance.php).
{% endhint %}

<figure><img src="/files/JVHZQPl2wZw2XyFqpBFI" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Account settings

Select the payout method you would like Verifone to use for issuing your transfers. These are the possible values:

* **Wire Transfer** – requires bank information such as bank name, city, currency, and bank account number
* **PayPal** – requires a payout currency and PayPal address
* **Payoneer** – requires a payout currency and a [Payoneer ID](https://payouts.payoneer.com/partners/lp.aspx?token=6a85cf5ecb4148829ab10ee5daacd62fADDC62AAF5). You can apply for a [2Checkout MasterCard](https://secure.2checkout.com/cpanel/avangate_mastercard.php) powered by Payoneer right from your Merchant Control Panel.

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

{% step %}

### Documents

After saving your account settings you can proceed with uploading the necessary documents to prove your identity and thus, be able to sell with us. For this, you need to upload a a copy for each of the below document types:

{% hint style="info" %}
Accepted formats for documents to be uploaded are: .docx, .jpg, .png, .pdf, and .gif (<10MB).
{% endhint %}

* **Valid government-issued ID** – This can ID card, passport. Make sure the uploaded file includes your photo.
* **Valid proof of address** – Name, full residential address, and date of issue should appear on the document to be acceptable. Utility bills and bank statements should not be older than 3 months.
* **Business documents**
  * **Company ownership documents** – Certified Certificate of Incorporation or equivalent registration document
  * **Tax identification documents** – For Europe, [TIN](https://ec.europa.eu/taxation_customs/business/tax-cooperation-control/administrative-cooperation/tax-identification-numbers-tin_en), or other relevant documentation, and for the United States, [SSN/TIN/PTIN](https://www.irs.gov/individuals/international-taxpayers/taxpayer-identification-numbers-tin) or other relevant documentation.
  * **Valid proof of address** – This can be an electricity bill or telephone bill that states your name, full residential address, and date of issue. Utility bills and bank statements should be not older than 3 months.

You can also upload any other valid and relevant documents that can prove your identity and offer proof of ownership for your company.

<figure><img src="/files/zKyj9E7wqiUZyi7sUvUu" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Summary

Once you upload the required documents and before hitting **Submit**, you can have a look at your application form and update/edit the missing details or modify the incorrect or incomplete information highlighted in red.&#x20;

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

## Application review process <a href="#application-review-process" id="application-review-process"></a>

After filling in your information, you can submit the application for review. If there are any empty fields or missing information, you will not be able to click the Submit button.

Once submitted, Verifone's Underwriting team will review your application and will contact you, in case additional more details are needed or notify you about the resolution.

If additional information is required:

* You will receive an email notification
* The **first activation step** on your [Dashboard](https://secure.2checkout.com/cpanel/) will display the message **“Action required"**
* You can update your request and provide the additional information requested by Verifone's underwriting team by clicking on the **Add required information** button

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

Upon submitting the required information, your Dashboard will clearly display messages that your application is currently **"In review"**, and you can view it by clicking on the **View application** button.

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

## Sign the contract and go live! <a href="#sign-the-contract-and-go-live__0021" id="sign-the-contract-and-go-live__0021"></a>

By submitting the application for review you will also acknowledge and accept the [Terms and Conditions](https://www.2checkout.com/legal/terms/) and Services Agreement that will become your binding contract as soon as the application is approved by Verifone's underwriting team.

Once your application is approved, your account is live and can be used for real transactions. Verifone strongly recommends that you test your integration one last time before you publish your buying links and start processing live payments.

Your [Dashboard](https://secure.2checkout.com/cpanel/) will continue to display sample data until you process your first real transaction.

{% hint style="info" icon="lightbulb" %}

#### Want to sell worldwide? Learn how Verifone can help with over 45  payment methods and 100 display and billing currencies.

<a href="https://www.2checkout.com/lp/2checkout-payment-method-coverage.html" class="button primary" data-icon="books">Read more</a>
{% endhint %}


# Identifying Your Account Type

If you are not sure or you don't remember what type of account you have on the 2Checkout platform, you can find this information in your Merchant Control Panel.

## Availability

The information about the account type is available for all merchants who signed a contract with 2Checkout.

## How to find your 2Checkout account type

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the cogwheel in the top-right corner and click on **Settings**, as shown below.<br>

   <figure><img src="/files/Zx8Er8Xjsng1mmT22Qfn" alt=""><figcaption></figcaption></figure>
3. On the **Account Settings** page, scroll down to the **Account Information** section and click on the **Edit details** button.<br>

   <figure><img src="/files/pSFhXQCef3Tbs78bcE1R" alt=""><figcaption></figcaption></figure>
4. On the [Account Information](https://secure.2checkout.com/cpanel/account.php) page, scroll down to the **Account documents** section and click on the **PDF** to open/download it. The PDF is the contract you signed with 2Checkout and includes the information about your account type, as well as details about margins and fees that apply to your account.<br>

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

{% hint style="info" icon="lightbulb" %}

#### Want to see our products? You can switch between them, or use flexible add-ons depending on your needs.

<a href="/pages/2nkXCCp3KqFcs7tg3kmz#account-types" class="button primary" data-icon="books">Read more</a>
{% endhint %}


# Verifying Your Identity and Business Information

2Checkout complies with regulatory obligations worldwide and is committed to providing a secure platform for all our customers. This is why we are asking you to confirm your identity and provide proof of ownership of your company.

Account identity verification is a process referred to as [Know Your Customer](http://en.wikipedia.org/wiki/Know_your_customer) (KYC). We have simplified the process of supplying all valid, relevant documents, which should take you only a few minutes, and we appreciate your cooperation when it comes to verifying your information and reducing risk.

{% hint style="warning" %}
Provide scanned copies of valid, relevant documents (do not include expired documents).
{% endhint %}

## For new accounts

When you activate your account, navigate to the [Know your customer](https://secure.2checkout.com/cpanel/manage_documents.php) (KYC) area and upload scanned copies of relevant documents from the checklist in this article. This will accelerate the review process and you can start selling and accepting transactions from customers worldwide.

{% hint style="info" %}
Newly created 2Checkout accounts undergo a review. Work with the 2Checkout underwriting team to help validate your information.
{% endhint %}

For more detailed steps check our [Activate your 2Checkout Account](/get-started/test-getting-started/start-using-2checkout/activate-your-2checkout-account#documents) documentation.

## For existing accounts

1. Log in to your Merchant Control Panel account.
2. Navigate to **Settings** in the upper right corner of your Dashboard, as shown below.<br>

   <div data-with-frame="true"><figure><img src="/files/PsK73NRj8bLVxXpE9WCm" alt=""><figcaption></figcaption></figure></div>
3. In the *Account Settings* window, scroll down to the **Account Information** section and click on the **Business Details** link, as the image below shows.<br>

   <div data-with-frame="true"><figure><img src="/files/q3MKxoBCF3riT3C7iFv2" alt=""><figcaption></figcaption></figure></div>
4. In the [Know your customer documents](https://secure.2checkout.com/cpanel/manage_documents.php) window, scroll down to the **Upload documents** field and select the type/types of documents you want to upload. <br>

   <figure><img src="/files/UTzO2IAb0DETjC47X71Y" alt=""><figcaption></figcaption></figure>
5. After adding your scanned copies of documents, click on the **Upload** button.<br>

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

{% hint style="warning" %}
As regulatory and compliance obligations change over time, 2Checkout can request additional valid, relevant documents to verify your identity and proof of ownership of your company.
{% endhint %}

## KYC documents checklist

The document checklist is different for individuals and for businesses/companies.

#### Individuals <a href="#individuals" id="individuals"></a>

* **Valid government-issued ID** such as a passport or national identity card
* Valid address proof, such as electricity bill, telephone bill (no older than two months from the date when you upload the scanned copies)
* Any other valid, relevant documents that can prove your identity (in addition to the government-issued ID)

#### Companies/Business Entities <a href="#companies__002fbusiness-entities" id="companies__002fbusiness-entities"></a>

* **Company ownership documents** (such as Articles of Incorporation or Organization, showing beneficial ownership)
* **Tax identification documents**
  * Europe - [TIN](https://ec.europa.eu/taxation_customs/business/tax-cooperation-control/administrative-cooperation/tax-identification-numbers-tin_en) or other relevant documentation
  * US - [SSN / TIN / PTIN](https://www.irs.gov/individuals/international-taxpayers/taxpayer-identification-numbers-tin) or other relevant documentation
* **Valid government-issued ID** such as a passport or national identity card. Include DOB, for anybody with 10% or more ownership in the company
* Any other valid, relevant documents that can prove your identity and offer proof of ownership for your company.


# Securing Your Account

## Password and login

You can change your login details, including password and email from your 2Checkout Merchant Control Panel.&#x20;

2Checkout assigns your email address to a single account. To use the same email address for multiple accounts, contact 2Checkout.&#x20;

### Login settings <a href="#login-settings" id="login-settings"></a>

To set or edit your login details, follow these steps:

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel).
2. Navigate to the **Settings** cogwheel in the top right corner.
3. Click on **My details**.<br>

   <div data-with-frame="true"><figure><img src="/files/1xTD2HBKLZ8L72ZOY0TQ" alt=""><figcaption></figcaption></figure></div>
4. On the [login information](https://secure.2checkout.com/cpanel/login_information.php) page, you can edit your login details:&#x20;
   * First name&#x20;
   * Last name&#x20;
   * Username
   * Email.
5. After editing your login details, click on the **Update** button to save them.<br>

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

### Password Settings <a href="#password-settings" id="password-settings"></a>

{% hint style="info" icon="lock-keyhole" %}

#### Password requirements

2Checkout requires you to set a strong password:

* Must have at least 8 characters.
* Must have at least 3 out of the following 4 sets of characters: small letters, capital letters, numbers, and special characters.
* Must be different from the last 4 passwords.
* The password will never expire.
  {% endhint %}

#### Set up your password <a href="#set-up-your-password" id="set-up-your-password"></a>

To set a password for your 2Checkout account, follow the steps below.

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel).
2. Navigate to the **Settings** cogwheel in the top right corner and click on **My details**.
3. On the [login information](https://secure.2checkout.com/cpanel/login_information.php) page, you can set up the password for your account.
4. Input your old password, the input the new password. You can click on the **Generate** button to make sure you use a strong password.
5. Confirm the new password.
6. Select the password lifetime. For security reasons, we recommend setting up a password expiration date. Master account users can set passwords to **never expire**. Contact the master user of your account to perform this change on your user account.
7. Click on the **Save** button to update the password.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>In case you forgot your account password, use the password recovery functionality and a link for generating a new password will be sent to the e-mail address you use to log in to the Merchant Control Panel.</p></div>

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


# Setting Up Two-Factor Authentication

Two-factor authentication (2FA) is a method of computer access control that grants users access to their account after validating two criteria:

* Knowledge - represented by a security aspect the user has knowledge of, such as the username and password.
* Possession - represented by an item that only exists in the possession of that specific user, such as a smartphone, tablet, phone number, or email address.

Through two-factor authentication, users can access the 2Checkout Merchant Control Panel using their username, password, and a security token provided either by the **Google Authenticator** app or sent via **email** (associated with their Merchant Control Panel account).

{% hint style="info" %}
For security reasons, **master account** users can enable two-factor authentication for their own accounts **only via Google Authenticator**.&#x20;
{% endhint %}

2Checkout allows you to manage user access to specific features by creating and assigning user roles. This extra layer of security enables you to restrict access to the Merchant Control Panel to specific users, based on unique tokens.

## Availability <a href="#availability" id="availability"></a>

All 2Checkout accounts.

## Supported methods <a href="#two__002dfactor-authentication-types" id="two__002dfactor-authentication-types"></a>

2Checkout supports two types of two-factor authentication:

**Google Authetication Application**

* Two-factor authentication powered by **Google Authenticator**. Authentication codes are delivered through the Google Authenticator app for Android and iOS.

**Email**

* Two-factor authentication via **email**. Particular cases where users do not have access to their smartphones, such as environments that adhere to a "clean desk" policy, require authentication codes to be sent via email. In these situations, two-factor enrollment is done by the master account. Users enrolled by the master account cannot disable two-factor authentication on their own.

## Enabling two-factor authentication <a href="#requirements" id="requirements"></a>

* Two-factor authentication through **Google Authenticator** requires a compatible mobile device running Android 2.3.3 or newer, or iOS 7.0 or newer.
  * ### Google Authenticator for Android <a href="#google-authenticator-for-android" id="google-authenticator-for-android"></a>
    * You can download the Google Authenticator app for Android [here](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) or by accessing Google Play Store from your Android device.
  * ### Google Authenticator for iOS <a href="#google-authenticator-for-ios" id="google-authenticator-for-ios"></a>
    * You can download the Google Authenticator app for iOS [here ](https://itunes.apple.com/us/app/google-authenticator/id388497605)or by accessing the App Store from your iOS device.
* Two-factor authentication via **email** requires the user to have access to his or her email account.

## Setup two-factor authentication <a href="#two__002dfactor-authentication-via-google-authenticator" id="two__002dfactor-authentication-via-google-authenticator"></a>

### Via Google Authenticator <a href="#two__002dfactor-authentication-via-google-authenticator" id="two__002dfactor-authentication-via-google-authenticator"></a>

Follow the steps below to enable two-factor authentication for your account.

1. Log in to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the **Settings** cogwheel in the upper right corner and click on **My details**.<br>

   <div data-with-frame="true"><figure><img src="/files/THDPL6lMPJUbVHy0KyLg" alt=""><figcaption></figcaption></figure></div>
3. Go to the **Two-factor authentication** tab.
4. Scan the QR code using your smart device or enter the **Authentication secret** in the Google Authenticator app. The app will provide an authentication code.
5. Enter the authentication code in the dedicated field in the 2Checkout Merchant Control Panel and click **Activate**.

From this point on, every login attempt will require an authentication code provided by Google Authenticator.

### Via email

{% hint style="warning" %}
&#x20;Two-factor enrollment via email is done by the master account. Users enrolled by the master account cannot disable two-factor authentication on their own.
{% endhint %}

Follow the steps below to enable two-factor authentication via email.

1. Login to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel/) with a master account.
2. Navigate to the **Settings** cogwheel in the upper right corner and click on **User management**.
3. Identify the user you wish to enable two-factor authentication for and click **Edit**.
4. Check the **Two-factor authentication by email** option and click **Save**.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>If you wish to disable the two-factor authentication for a user, uncheck the <em>Two-factor authentication by email</em> option and save the changes.</p></div>

Once you enable two-factor authentication for a user, 2Checkout notifies them about the change and sends an authentication code to their email address each time a login attempt is detected.

## Disable two-factor authentication <a href="#disable-two__002dfactor-authentication" id="disable-two__002dfactor-authentication"></a>

Follow the steps below to disable two-factor authentication, Via Google Authenticator.

1. Login to the [2Checkout Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the **Settings** cogwheel in the upper right corner.
3. Click on **My details**.
4. Go to the **Two-factor authentication** tab.
5. Click **Deactivate**.


# Restricting Merchant Control Panel Access by IP

Restrict access to the Merchant Control Panel only for specific IPs or IP ranges and increase the security of your account. By default, 2Checkout account users can access the Merchant Control Panel from any IP.

## Availability <a href="#availability" id="availability"></a>

All 2Checkout accounts.

## How to restrict access <a href="#how-to-restrict-access-to-the-merchant-control-panel" id="how-to-restrict-access-to-the-merchant-control-panel"></a>

1. Log in to your [Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Navigate to the **Settings** cogwheel in the upper right corner and click on **User Management**.<br>

   <div data-with-frame="true"><figure><img src="/files/5FVevdoZURvoqRl022b2" alt=""><figcaption></figcaption></figure></div>
3. On the **User Management** page, click on the **Restrict access** tab.<br>

   <div data-with-frame="true"><figure><img src="/files/K2mP4xroHUzyJrx9EL3q" alt=""><figcaption></figcaption></figure></div>
4. On the **Restrict access** page, click on the **Add IP filter** button.
5. Specify a static IP address or a range of IP addresses in the iFrame window. Apply the restriction to **all** or only to **selected** Merchant Control Panel users.&#x20;
6. Click on the **Add filter** button to save the setting.<br>

   <div data-with-frame="true"><figure><img src="/files/IoOYU9V8AlZrKeQ2vfQY" alt=""><figcaption></figcaption></figure></div>
7. On the **Restrict access** page, click on the **Activate** button to enable the IP filtering system.<br>

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

&#x20;


# Restricting API Access by IP Address

Restrict API calls based on request IP address and increase the security of your account by preventing unauthorized API usage. By default, you can call the 2Checkout API from any IP.

{% hint style="info" %}
Currently, the 2Checkout systems do not support IPv6 for customer IP.
{% endhint %}

## Availability <a href="#availability" id="availability"></a>

All 2Checkout accounts.

## Set up <a href="#set-up" id="set-up"></a>

1. Navigate to Settings > Users > [Firewall](https://secure.2checkout.com/cpanel/ip_tools.php).
2. Specify a static IP address or a range of IP addresses.&#x20;
3. In the **Selected Users** area, apply the restriction to API (Special).&#x20;
4. Add the IP filter.&#x20;
5. Activate the IP filtering system.


# ConvertPlus


# 2Checkout ConvertPlus

## Overview

ConvertPlus simplifies the process of collecting payments from shoppers using major credit/debit cards, PayPal, Apple Pay, GooglePay, Alipay, Boleto/Pix, bank/wire transfer, iDEAL, and SEPA Direct Debit. We are building and adding new features continually.

{% hint style="info" icon="lightbulb" %}

#### Recommended resources

ConvertPlus is a full-stack solution that enables you to increase conversion rates with faster loading time and optimized flows. Download this solution brief to learn more!

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=ZFfUJZ1JGqI>" %}

## Availability

ConvertPlus is available to all 2Checkout accounts.

To enable ConvertPlus on your merchant account, contact the [2Checkout Support Team](mailto:supportplus@2checkout.com).

## Requirements

2Checkout merchants who already have the new shopping cart enabled can generate buy links for the optimized purchase flow from the 2Checkout Control Panel.

## Generate buy links

Follow the steps below to generate buy links for your products using the new shopping cart.

1. Login to the [2Checkout Control Panel](https://secure.2checkout.com/cpanel/).
2. Go to **Setup** > [Generate links](https://secure.2checkout.com/cpanel/integration.php).
3. Click the **ConvertPlus** tab in the *Checkout Links* area.
4. Select the products you want to generate checkout links for. In case you are using dynamic products, read the instructions from [this](/orders/orders/orders-with-dynamic-product-information/dynamic-products-via-convertplus) article.
5. Choose the product quantity.
6. Click on **Generate link**.
7. Copy the generated link and add it to your website.

## Test buy-links

You can test the link before adding it to your website in multiple ways:

* Copy the link and paste it into your browser’s address bar.
* Click on the **Test link** to open it in a new browser tab.
* Scan the QR code with a smartphone app to view the checkout page on a mobile device.

## Supported payment methods

2Checkout ConvertPlus supports the following payment methods:

* Credit / debit card
  * Visa
  * Visa Electron
  * MasterCard
  * Maestro
  * American Express
  * JCB
  * Discover
  * UnionPay
* PayPal Express
* Bank/Wire transfers
* SEPA Direct Debit
* iDEAL
* Boleto/Pix
* Credit cards with installments
* Apple Pay
* Alipay
* GooglePay

ConvertPlus is optimized to display popular payment methods based on shopper location. This makes it easier for customers to complete a purchase using their favorite payment method, which will result in a higher conversion rate for you.

## Purchase flow

The checkout experience is ensured by a one-page checkout flow that enables shoppers to quickly finalize their purchases without spending too much time in the shopping cart.

1. Shoppers add the products to their cart.
2. Once they reach the shopping cart they can select product options/plans and add a coupon code (if applicable).
3. They select the payment method.
   * If they choose to pay by card, they enter the billing and card information and finish the payment.
   * If they choose to pay through PayPal, 2Checkout automatically takes them to PayPal’s login page where they have to agree and continue with the payment. Afterwards, the shoppers will be redirected to the 2Checkout shopping cart to complete the purchase.
   * If they choose to pay through bank/wire transfer, 2Checkout provides them with the required payment details so they can complete the transfer.
   * If they choose to pay through iDEAL, 2Checkout automatically takes them to the iDEAL page and they can complete the payment there.
   * If they choose to pay through Apple Pay, an Apple Pay payment sheet opens on top of the checkout page on their Apple device.
   * If they choose to pay through Alipay, they enter the billing information and then 2Checkout automatically takes them to the Alipay page where they can complete the payment.
4. 2Checkout redirects them to the *Finish* page.

## ConvertPlus Cart Editor

The Cart Editor module allows you to perform simple customizations to ConvertPlus cart themes, to make the shopper payment experience unique.

Click [here](/shopping-carts/convertplus/convertplus-cart-editor) to learn how to use the ConvertPlus Cart Editor.

## Supported features

Given the continuously developing nature of this project, the new 2Checkout shopping cart currently supports a limited feature subset of the current shopping cart.&#x20;

Refer to the feature list below to confirm the availability of the features you are interested in.

| Feature                                                                  | Supported/Not supported                                                                                                                                                                                                                                                                                             |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 3-D Secure Ordering                                                      | Supported                                                                                                                                                                                                                                                                                                           |
| Available cart languages                                                 | 29 languages                                                                                                                                                                                                                                                                                                        |
| Billing currencies                                                       | All the billing currencies that are currently enabled for your 2Checkout account                                                                                                                                                                                                                                    |
| Payment methods                                                          | Credit card-based payment methods, [Orders with installments](https://docs.2checkout.com/get-started-with-the-2checkout-api/), PayPal, bank/wire transfer, iDEAL, SEPA Direct Debit, [Boleto/Pix](/payments/payments/payment-methods/boleto-pix), [Apple Pay](/payments/payments/payment-methods/apple-pay), Alipay |
| Promotions                                                               | <p>Supports regular and special price promotions: </p><ul><li>Coupon based</li><li>Automatically applied</li></ul>                                                                                                                                                                                                  |
| Order promotions                                                         | Supported                                                                                                                                                                                                                                                                                                           |
| Compact shopping card fields                                             | Supported                                                                                                                                                                                                                                                                                                           |
| Automatic renewal                                                        | Supported                                                                                                                                                                                                                                                                                                           |
| Geolocation                                                              | Supported                                                                                                                                                                                                                                                                                                           |
| Pricing options                                                          | Supported                                                                                                                                                                                                                                                                                                           |
| Pricing configuration                                                    | Supported                                                                                                                                                                                                                                                                                                           |
| Volume discounts                                                         | Supported                                                                                                                                                                                                                                                                                                           |
| Dynamic ordering                                                         | <p>Supported</p><p>ConvertPlus allows you to receive orders without having catalog products defined, by passing the product information through the buy link parameters.</p>                                                                                                                                        |
| [URL parameters](/shopping-carts/convertplus/convertplus-url-parameters) | <p>Supports product code and quantity URLs.</p><ul><li>Example: <strong>\&prod=code1;code2\&qty=5;2</strong></li></ul>                                                                                                                                                                                              |
| Tax collection and VAT Information Exchange System                       | Supported                                                                                                                                                                                                                                                                                                           |
| US B2B Tax Exemption                                                     | Supported                                                                                                                                                                                                                                                                                                           |
| Template customization                                                   | Supported via [Cart Editor](/shopping-carts/convertplus/convertplus-cart-editor)                                                                                                                                                                                                                                    |
| Manual renewal                                                           | Supported (only for catalog products)                                                                                                                                                                                                                                                                               |
| Additional checkout fields                                               | Supported via [Additional checkout fields](/shopping-carts/default-flows/additional-checkout-fields)                                                                                                                                                                                                                |
| On-the-fly pricing for catalog products                                  | Supported via [Override configured product prices](/payment-link/checkout-links-and-options/override-configured-product-prices)                                                                                                                                                                                     |
| Physical product & Shipping                                              | Supported                                                                                                                                                                                                                                                                                                           |
| Tax validation display                                                   | Supported                                                                                                                                                                                                                                                                                                           |
| Testing options                                                          | Supported                                                                                                                                                                                                                                                                                                           |
| Lead management                                                          | <p>Supported</p><p>Unfinished payments and cart abandons.</p>                                                                                                                                                                                                                                                       |
| Dunning                                                                  | Supported                                                                                                                                                                                                                                                                                                           |
| Checkout flow with/without review                                        | Supported                                                                                                                                                                                                                                                                                                           |
| One-step/multi-step inline                                               | Supported                                                                                                                                                                                                                                                                                                           |
| Express flow                                                             | Supported                                                                                                                                                                                                                                                                                                           |
| Cart analytics                                                           | <p>Supported</p><p>Google Analytics and Google Tag Manager.</p>                                                                                                                                                                                                                                                     |
| Simple customization                                                     | Supported                                                                                                                                                                                                                                                                                                           |
| Advanced customization (via Professional Services)                       | Supported                                                                                                                                                                                                                                                                                                           |
| Cross-selling campaigns in Checkout page                                 | Supported                                                                                                                                                                                                                                                                                                           |
| Cross-selling campaigns in Thank you page                                | Not supported                                                                                                                                                                                                                                                                                                       |
| Affiliate network (merchant website links)                               | Supported                                                                                                                                                                                                                                                                                                           |
| Affiliate network (product links)                                        | Not supported                                                                                                                                                                                                                                                                                                       |
| Tracking script                                                          | Not supported                                                                                                                                                                                                                                                                                                       |
| Purchase orders                                                          | Not supported                                                                                                                                                                                                                                                                                                       |
| Trial products                                                           | Supported                                                                                                                                                                                                                                                                                                           |
| Bundles                                                                  | Not supported                                                                                                                                                                                                                                                                                                       |
| Upgrades                                                                 | Not supported                                                                                                                                                                                                                                                                                                       |
| Up-selling campaigns                                                     | Not supported                                                                                                                                                                                                                                                                                                       |
| Download Insurance Service                                               | Not supported                                                                                                                                                                                                                                                                                                       |
| Gift orders                                                              | Not supported                                                                                                                                                                                                                                                                                                       |
| Custom cart variables                                                    | Not supported                                                                                                                                                                                                                                                                                                       |


# ConvertPlus URL parameters

## Overview

Use 2Checkout ConvertPlus to provide your customers with a swift and safe payment experience. Depending on your desired workflow, you can either create ordering interface links using our dedicated interface ([C](https://secure.avangate.com/cpanel/integration.php)[onvertPlus](https://secure.avangate.com/cpanel/integration.php?flow=ConvertPlus)) or generate the parameters dynamically, in your own system.

2Checkout enables you to use ConvertPlus with both catalog products and with products generated dynamically via buy-link parameters.

{% hint style="info" icon="lightbulb" %}

#### ConvertPlus is a full-stack solution that enables you to increase conversion rates with faster loading time and optimized flows. Download this solution brief to learn more!

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

## Availability

Eligible 2Checkout accounts. Contact 2Checkout to inquire about ConvertPlus.

## Requirements

To use **ConvertPlus** dynamic ordering, pass the **dynamic** parameter with **TRUE** or **1** value. When creating orders with catalog products, the **prod** parameter should contain the **product code** of your catalog item. For dynamic ordering, the **prod** parameter should contain the **name** of your dynamic product. &#x20;

## How to create dynamic ConvertPlus buy-links

1. Start from the **base** ConvertPlus buy-link:

   ```
   https://secure.2checkout.com/checkout/buy/?
   ```
2. Add your merchant code to the buy-link, so that 2Checkout links the sale to your account. Your merchant code can be found in your Control Panel, in the [Account Information area](https://secure.2checkout.com/cpanel/account.php). Example: merchant=2COLRNC.
3. Set the **dynamic** parameter to **TRUE** or **1**.
4. Add product information such as **product type**, **name**, **price,** and **quantity**.
5. Include additional product information, such as recurring options or customer redirect URL.

### Sample ConvertPlus buy-link for dynamic product information

The following buy-link reproduces a dynamic ordering experience:

```
https://secure.2checkout.com/checkout/buy/?merchant=2COLRNC&dynamic=1&prod=2CheckoutSubscription&type=PRODUCT&qty=1&price=10&test=1
```

## Buy-link parameters

When you generate a checkout link, 2Checkout automatically includes some of the parameters in the list below in the URL, depending on a number of variables, such as the products, discounts, currency, and more. You can use these query parameters to generate checkout links in your own system, without having to rely on the functionality in your account.

<table><thead><tr><th width="191.9998779296875">Parameter</th><th width="172">Required / Optional</th><th>Description</th></tr></thead><tbody><tr><td><strong>Billing information</strong></td><td></td><td>Use these parameters to control the billing information displayed in the shopping cart. By adding these parameters in the buy-link, you can pre-fill the customer information and minimize the customer effort in the ordering process.</td></tr><tr><td>email</td><td>Optional</td><td>Send customer email</td></tr><tr><td>name</td><td>Optional</td><td>Send full customer name. Ex: "John Steward Doe".</td></tr><tr><td>phone</td><td>Optional</td><td>Send customer phone number</td></tr><tr><td>country</td><td>Optional</td><td>Send customer country code. Two-digits code. Ex: "UK".</td></tr><tr><td>state</td><td>Optional</td><td>Send customer state code. Two-digits code. Ex: "CA".</td></tr><tr><td>city</td><td>Optional</td><td>Send customer city.</td></tr><tr><td>address</td><td>Optional</td><td>Send customer address</td></tr><tr><td>address2</td><td>Optional</td><td>Send customer additional address information</td></tr><tr><td>zip</td><td>Optional</td><td>Send customer zip code</td></tr><tr><td>company-name</td><td>Optional</td><td><p>Send <strong>Company name</strong>.</p><p>When sending the Company name, the Company checkout flow will be triggered. Otherwise, the default checkout flow for ConvertPlus is the individual flow.</p></td></tr><tr><td>fiscal-code</td><td>Optional</td><td><p>Send <strong>company Fiscal code</strong>.</p><p>When sending the Fiscal code, the Company checkout flow will be triggered only if also another company flow relevant parameter will be also sent (Company name and/or Tax office). Otherwise, the default checkout flow for ConvertPlus is the individual flow.</p></td></tr><tr><td>tax-office</td><td>Optional</td><td><p>Send company <strong>Tax office</strong>.</p><p>When sending the Tax office, the Company checkout flow will be triggered. Otherwise, the default checkout flow for ConvertPlus is the individual flow.</p></td></tr><tr><td><strong>Delivery information</strong></td><td></td><td>Use these parameters to control the billing information displayed in the shopping cart. By adding this parameters in the buy-link, you can pre-fill the customer information and minimize the customer effort in the ordering process.</td></tr><tr><td>ship-name</td><td>Optional</td><td>Send customer delivery name. Ex: "John Steward Doe".</td></tr><tr><td>ship-country</td><td>Optional</td><td>Send customer delivery country code. Two-digits code. Ex: "UK".</td></tr><tr><td>ship-state</td><td>Optional</td><td>Send customer delivery state code. Two-digits code. Ex: "CA".</td></tr><tr><td>ship-address</td><td>Optional</td><td>Send customer delivery address</td></tr><tr><td>ship-address2</td><td>Optional</td><td>Send customer additional delivery address information</td></tr><tr><td>ship-zip</td><td>Optional</td><td>Send customer delivery zip code</td></tr><tr><td><strong>Product information</strong></td><td></td><td>Use the parameters to create products with dynamic information, skipping the need of handling a product catalog in your 2Checkout Control Panel</td></tr><tr><td>dynamic</td><td>Required for <strong>dynamic</strong> products</td><td>Boolean. <strong>Set TRUE for dynamic products.</strong></td></tr><tr><td>prod</td><td>For <strong>catalog</strong> products</td><td><p>Product codes added to checkout, separated by a semicolon.</p><p>Do not use spaces or blanks. <strong>Example: prod</strong><em><strong>=</strong></em><strong>46CC15F39;7488E17CC0</strong>. Product codes are assigned by you at the moment you are adding new products.</p><p>In the Control Panel, click to edit a product, and select the <strong>Information</strong> tab. The Product code of the item you're editing is available at the top of the <strong>General</strong> area under <strong>Information</strong>.</p><p><strong>Warning</strong>: Changing a product code already used in active buy-links will completely break the checkout flow for those links. If you change a product code, make sure all your buy-links for that product are replaced with new links generated with your current product code. </p><p>For buy-links with on-the-fly and trial pricing, this parameter is mandatory and has to be included in the signature.</p></td></tr><tr><td>prod</td><td>For <strong>dynamic</strong> products</td><td><p>Set the <strong>dynamic</strong> parameter <strong>TRUE</strong> to use dynamic products in the ordering process.</p><p>When using dynamic products, the <strong>prod</strong> parameter contains as value the <strong>name</strong> of the dynamic product. For multiple products, send them separated by a semicolon.</p><p>Example: name1;name2;name3.</p></td></tr><tr><td>item-ext-ref</td><td>For <strong>dynamic</strong> products</td><td>Set product identifier for your dynamic products. When included, the parameter needs to be signed.</td></tr><tr><td>type</td><td>Required for <strong>dynamic</strong> products</td><td><p>The type of the dynamic product. Possible values:</p><ul><li>PRODUCT</li><li>SHIPPING</li><li>TAX</li></ul><p>For multiple dynamic items, send the values separated by a semicolon.</p></td></tr><tr><td>qty</td><td>Required</td><td><p>The number of units (quantity) for each product in checkout, separated by a semicolon <strong>;</strong>. Do not use spaces or blanks. Example: <strong>qty=2;1</strong>.</p><p><strong>qty</strong> works in conjunction with <strong>prod</strong>, based on their respective order. The first value of the <strong>qty</strong> parameter controls the number of units for the products whose identifier is in the first position of the <strong>prod</strong> parameter. </p><p>Example: <a href="https://secure.2checkout.com/checkout/buy/?merchant=2COLNC&#x26;">https://secure.2checkout.com/checkou...rchant=2COLNC&#x26;</a><strong>prod=6FD08E61B5;E2932D0DE2&#x26;qty=4;3</strong></p><ul><li>For buy-links with on-the-fly pricing, this parameter is required and has to be included in the signature.</li><li>For trials, <strong>qty</strong> parameter can only be 1 and it is not required.</li></ul></td></tr><tr><td>price</td><td>Required for <strong>catalog</strong> products with on-the-fly pricing</td><td><p>For catalog products with on-the-fly pricing, custom price and currency must be included in the buy-link.</p><p>For multiple products with on-the-fly pricing, send the values separated by a semicolon.</p><p>Example: price=currency1:val1;currency2:val2;currency3:val3.</p><p>For buy-links with multiple prices per each product in a catalog product with on-the-fly pricing scenario, there are multiple use cases:</p><ol><li>The values of separate products (qty=1;2;3) are separated by a semicolon. This means that the first product will have quantity 1, the second product will have quantity 2, and the third product will have quantity 3.</li><li>The pair values for different products: price=EUR:10;EUR:11;EUR:12. Each pair of currency-price is separated by a semicolon and the pairs of products itself are separated by a colon. This means that the first product will have a custom price of 10EUR, the second product will have a custom price of 11EUR, and the third product will have a price of 12EUR.</li><li>The pair values for the same product: price=EUR:10,USD:11,RON:12. Each pair of currency-price is separated by a comma, while the values inside each pair are separated by a colon. This means that this price definition is for a single product with custom prices of 10EUR, 11USD and 12RON.</li><li>The pair values for multiple products: price=EUR:10,USD:11,RON:12,EUR:20,USD:21,RON:22. Use a colon to separate the custom prices for multiple products. Each pair of currency-price is separated by a comma and the values of each pair are separated by a colon. This means that the price definition for the first product will be 10EUR, 11USD and 12RON and the price definition for the second product will be 20EUR, 21USD, and 22RON.</li></ol><p>For buy-links with on-the-fly pricing, this parameter is mandatory and has to be included in the signature.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><ul><li>Values of parameters that relate to separate products are separated with a <strong>semicolon</strong>.</li><li>Parameters that are configured to support multiple values, like <strong>price</strong> or <strong>opt</strong>, should have their values separated by a <strong>comma</strong> if those values refer to the same product.</li><li>Pair values should be separated by a <strong>colon</strong>.</li></ul></div></td></tr><tr><td>price</td><td>Required for <strong>dynamic</strong> products</td><td>For dynamic products, enter the product price. For multiple dynamic items, send the values separated by a semicolon. Example: price1;price2;price3.</td></tr><tr><td>tprices</td><td>Required for <strong>catalog</strong> product with trial pricing</td><td><p>For catalog products with trial pricing, the <strong>currency</strong> must be included in the buy-link.</p><p>Multiple products not supported:</p><ul><li>The pair values for the same product: price=EUR:10,USD:11,RON:12. Each pair of currency-price is separated by a comma, while the values inside each pair are separated by a colon. This means that this price definition is for a single product with custom prices of 10EUR, 11USD and 12RON.</li></ul><p>For buy-links with trial pricing, this parameter is mandatory and must be included in the signature.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><ul><li>Parameters that are configured to support multiple values, like <strong>opt</strong>, should have their values separated by a <strong>comma</strong> if those values refer to the same product.</li><li>Pair values should be separated by a <strong>colon.</strong></li><li><strong>tprices</strong> and <strong>tperiod</strong> are incompatible with custom price, as <strong>tprices</strong> and <strong>tperiod</strong> go hand in hand. </li></ul></div></td></tr><tr><td>tperiod</td><td>Required for <strong>catalog</strong> product with trial pricing</td><td>The minimum <strong>tperiod</strong> number is 7 days. </td></tr><tr><td>currency</td><td>Required for <strong>catalog</strong> product with trial pricing</td><td>E.g.: currency=USD</td></tr><tr><td>tangible</td><td>Required for <strong>dynamic</strong> products</td><td><p><strong>Boolean.</strong></p><p>Send <strong>TRUE</strong> or <strong>1</strong> for products that require physical delivery.</p></td></tr><tr><td>opt</td><td>Optional</td><td><p>Defines the product pricing options.</p><p><strong>URL formating rules:</strong></p><p>":" is considered a pair separator</p><ul><li><p>1 product with 1 price option with 1 value (includes scale option type)</p><ul><li>prod=code1&#x26;opt=gr1:val1</li></ul></li><li><p>1 product with 1 price option with multiple values</p><ul><li>prod=code1&#x26;opt=gr1:val1:val2</li></ul></li></ul><p>"," is considered a value separator</p><ul><li><p>1 product with 2 price options with 1 value each</p><ul><li>prod=code1&#x26;opt=gr1:val1,gr2:val2</li></ul></li><li><p>1 product with 2 price options with multiple values each</p><ul><li>prod=code1&#x26;opt=gr1:val1:val2,gr2:val3:val4</li></ul></li></ul><p>";" is considered a parameter separator between products</p><ul><li><p>2 products with 1 price option containing 1 value</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1;gr2:val2</li></ul></li><li><p>2 products with 1 price option containing multiple values</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1:val2;gr2:val3:val4</li></ul></li><li><p>2 products with 2 price options containing 1 value each</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1,gr2:val2;gr3:val3,gr4:val4</li></ul></li><li><p>2 products with 2 price options containing multiple values each</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1:val2,gr2:val3:val4;gr3:val5:val6,gr4:val7:val8</li></ul></li></ul><p>For buy-links with on-the-fly and trial pricing, this parameter is mandatory and has to be included in the signature.</p></td></tr><tr><td>description</td><td>Optional for <strong>dynamic</strong> products</td><td>For dynamic products, set a description that is displayed in the checkout page. The description field is displayed only for the 'One column with payment buttons' template. The description will not be visible in the default template.</td></tr><tr><td>recurrence</td><td>Required for dynamic products</td><td>For dynamic products, set product recurring options. Send multiple dynamic items separated by a semicolon. Example: period1:unit1;period2:unit2;. Possible values for units: DAY, WEEK, MONTH, YEAR, FOREVER. This parameter is conditioned by two other parameters: duration and renewal-price.</td></tr><tr><td>duration</td><td>Required for dynamic products</td><td>For dynamic products, set the duration of the recurrence. Send multiple dynamic items separated by a semicolon. Example: period1:unit1;period2:unit2;. Possible values for units: DAY, WEEK, MONTH, YEAR, FOREVER. This parameter is conditioned by two other parameters: recurrence and renewal-price.</td></tr><tr><td>renewal-price</td><td>Required for dynamic products</td><td>For dynamic products, set the price that should be applied to the renewal order.</td></tr><tr><td>product-additional-fields</td><td>Optional (only for new acquisitions, manual renewal, and custom prices)</td><td>For LISTBOX additional fields the value must be a valid value from the dropdown.</td></tr><tr><td><strong>Cart behavior</strong></td><td></td><td>Use the parameters below to control the purchasing flow. You can add a success URL for your finalized orders, change the cart template, add a source parameter or choose to place test orders..</td></tr><tr><td>merchant</td><td>Required</td><td>Your merchant identification code. The merchant code is available in Settings > Edit system settings, under the System settings tab.</td></tr><tr><td>subscription</td><td>Required for the manual renewal of catalog products</td><td>Unique system-generated identifier of your subscriptions. The subscription reference is available on Orders and customers → Subscriptions → Edit subscription details.</td></tr><tr><td>expiration</td><td>Optional</td><td>Buy-link expiry date. The link becomes invalid after the date from this parameter. Send as a UTC timestamp. Example: 1537549421</td></tr><tr><td>return-url</td><td>Optional</td><td>URL to which customers are redirected after their finalized purchase. Learn more about Redirect URL on this article: https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/Set-a-redirect-URL-for-ConvertPlus-ordering-flows/</td></tr><tr><td>return-type</td><td>Optional</td><td>The return method used for redirecting your customers after a successful sale. Possible values: Link, Redirect. Read more about redirect URL: https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/Set-a-redirect-URL-for-ConvertPlus-ordering-flows/</td></tr><tr><td>coupon</td><td>Optional</td><td>Promotion coupon code discounting the price of a product added to checkout. You can send multiple values separated by semicolon when standalone coupons discount different products added to checkout. Example: &#x26;coupon=voucher1;voucher2. If this parameter is added to the buy-link, it has to be included in the signature.</td></tr><tr><td>src</td><td>Optional</td><td>Use this parameter to identify the source of your sales (which links are performing better). Example: src=prodpage or src=dldpage.</td></tr><tr><td>tpl</td><td>Optional</td><td>Cart template used for the checkout experience. Possible values: default, one-column. Use the style parameter to send ConvertPlus cart themes customized via Cart Editor.</td></tr><tr><td>currency</td><td>Optional</td><td>Preselected billing currency 2Checkout uses to charge your customers.</td></tr><tr><td>empty-cart</td><td>Optional</td><td>1 or 0. Use for resetting cart contents.</td></tr><tr><td>back-url</td><td>Optional</td><td>Use this parameter behind the 'Back to Shopping' link in the shopping cart to redirect your customers to a website of your choice.</td></tr><tr><td>order-ext-ref</td><td>Optional</td><td>Use this parameter to set an external reference to the order.</td></tr><tr><td>language</td><td>Optional</td><td>Defines the language for the order interface. English is the default language. Available values for language codes are displayed in this article: https://verifone.cloud/docs/2checkout/Documentation/07Commerce/Checkout-links-and-options/2Checkout-supported-languages/</td></tr><tr><td>origin-url</td><td>Optional</td><td>Set an origin URL for the purchase.</td></tr><tr><td>style</td><td>Optional</td><td>Use style for setting a customized cart template for the checkout experience. The parameter can be populated with the styling code assigned to each of your customized ConvertPlus cart themes. Contact 2Checkout to learn how to retrieve the styling code for your customized themes.</td></tr><tr><td>test</td><td>Optional</td><td>Use test=1 to place test orders. Exclude for regular order. Dummy credit card details are provided so you can test the entire order placing process. Guidance on the 2Checkout test ordering system is available here: https://verifone.cloud/docs/2checkout/Documentation/Test_ordering_system</td></tr><tr><td>customer-ref</td><td>Optional</td><td>The 2Checkout system generates default customer numerical (integer) IDs automatically for all orders of products that feature subscriptions. Can be used for new acquisitions aggregating new subscriptions under an existing Customer account.</td></tr><tr><td>customer-ext-ref</td><td>Optional</td><td>The external customer reference</td></tr><tr><td>lock</td><td>Optional (only for catalog products)</td><td>You can define customized packages or products for your shoppers and increase consistency and reconciliation between internal reporting, considering the details available at checkout and the ones valid when placing the order. Use the lock buy-link parameter which must be included in the signature along with other parameters that could impact the price: coupon, currency, lock, prod, qty, opt. When the cart is locked, the coupon field will not be visible anymore and the shoppers will not be able to add coupons to the cart. To enable, add the lock parameter to the generated buy-link, set it to 1 (lock='1') and sign it.</td></tr><tr><td>order-additional-fields</td><td>Optional (only for new acquisitions and manual renewal)</td><td>For LISTBOX additional fields the value must be a valid value from the dropdown. Example: order-additional-fields=field_identifier:value1,field_identifier2:value2</td></tr></tbody></table>

### ConvertPlus parameters to be included in the signature

1. General parameters included in the signature, regardless of the type of checkout (catalog products, dynamic products, renewal, unfinished payment): return-url, return-type, back-url, expiration, order-ext-ref, customer-ref, customer-ext-ref.
2. Parameters to be included in the signature for dynamic products buy-links: currency, prod, price, qty, tangible, type, opt, description, recurrence, duration, renewal-price, item-ext-ref.
3. Parameters to be included in the signature for manual renewal buy-links: prod, qty, opt.
4. Parameters to be included for on-the-fly pricing for catalog products: prod, price, qty, opt, coupon, currency.
5. Parameters to be included for trial pricing for catalog products: prod, tprices, tperiod, opt, currency.
6. Parameters to be included in order to lock the cart for catalog products: lock.
7. Parameters to be included when an approved URL is set: in this case, all parameters will be included in the signature, when redirected after successful completion of a sale.

Related:

* Generate a Buy-Link using the ConvertPlus and InLine Checkout: <https://verifone.cloud/docs/2checkout/Documentation/07Commerce/Checkout-links-and-options/Generate-a-Buy-Link-using-ConvertPlus-and-InLine-Checkout>
* Products and subscriptions listing query parameters: <https://verifone.cloud/docs/2checkout/Documentation/myAccount/Products-and-subscriptions-listing-query-parameters>
* Subscriber management and self-service: <https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/03Subscriber-management-and-self-service>

### Need help?

<details>

<summary>Contact support or get help</summary>

Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

Get in touch: <https://verifone.cloud/need-help>

</details>

### Not yet a Verifone customer?

<details>

<summary>Contact sales</summary>

We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

Contact sales: <https://www.verifone.com/en/global/contact-sales> Get Started: <https://www.verifone.com/en/global/contact-sales>

</details>


# ConvertPlus cart editor

## Overview

You are now able to customize the payment experience of your customers by adding your own vision to the display of the shopping cart pages. The new ConvertPlus Cart Editor module gives you control over shopping cart elements, by providing an easy-to-use visual interface for your customizations. Cart Editor allows you to define new styles for texts displayed in the shopping cart, add new designs for buttons, select new colors for different cart elements, and many others.

{% hint style="info" icon="lightbulb" %}

#### Related links

ConvertPlus is a full-stack solution that enables you to increase conversion rates with faster loading time and optimized flows. Download this solution brief to learn more!

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Learn more</a>
{% endhint %}

## Availability

Cart Editor is available on all accounts that have ConvertPlus enabled. Contact [2Checkout](https://secure.2checkout.com/cpanel/contact.php) for more details on ConvertPlus activation.

## Cart themes

You can edit the following themes using ConvertPlus Cart Editor. Make a copy of the theme you want to edit, and add your own style and vision to the future shopping cart pages.

### One column with payment buttons

This template can be used by all companies looking to increase their conversion rates by using a smart display of the billing and payment information fields in the cart. The short form helps you increase conversion rates, as only mandatory billing fields are displayed. Billing details and card information are presented in one column, making the payment experience smoother for your shoppers.

The display order of the payment methods in the cart reflects their popularity based on the selected billing country.

The input of card information is easier and clearer as the cart auto-detects the card type after typing the first digits of the card. The theme has a responsive design on devices such as desktop, tablet, and smartphone.

### ConvertPlus default

The ConvertPlus default template is designed to help you increase conversion rates by embedding the industry’s best practices. Billing details and card information are displayed inline, offering customers a fast and secure checkout. To improve the payment experience for your shoppers, the cart contains a short billing form, having only the mandatory fields displayed.

Shopper’s country/state is detected and pre-filled based on geo-location. The input of card information is easier and clearer as the cart auto-detects the card type after typing the first digits of the card. The display order of the payment methods in the cart reflects their popularity based on the selected billing country.

We're building and adding new features continually, check out the [full list](/shopping-carts) of supported functionalities and the current limitations.

## Edit a cart theme

Follow the steps below to edit and publish a customized theme:

1. Log in to the [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel/).
2. Go to **Setup** > [Interface templates](https://secure.2checkout.com/cpanel/cart_editor_gallery.php).
3. Click on **ConvertPlus** located right near the **Default flows** tab.
4. Select the theme you want to edit and click **Make a copy**.
5. Once redirected in the editing visual interface, use the menu from the left side to customize the theme selected. You can apply general customizations on the cart template by changing the properties of different elements, such as links, buttons, panels, messages, logos from the **Branding** drop-down list. You can also edit specific sections of the cart by using the **Cart items**, **Billing details**, **Payment details,** and **Footer** drop-down sections.
6. Rename your customized theme by clicking on the current theme title and by adding a new text in the edit box. Save the changes by clicking on the **save** icon.
7. You can preview and apply any customization made to the cart by using the **Preview** and **Apply** buttons from the menu.
8. From the drop-down list located in the top right corner, you can change the page you are customizing (checkout or landing page/retry page/finish page). Add consistency to your work by editing all the pages.
9. Check how your customized theme would look on different devices, by switching between the different device icons displayed in the top right corner.
10. After you apply the changes, click on **Save changes** to save your customizatio&#x6E;**.**
11. Click **Close** to return to the Interface templates page, or **Publish**, to make your customization available for creating links in the [Generate Links](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/Checkout-links-and-options/Generate-a-Buy-Link-using-the-Default-Flows-cart/) are&#x61;**.**

## General customizations

ConvertPlus Cart Editor allows you to customize different elements of the shopping cart pages, leading to a personalized payment experience for your shoppers. You can apply general styling to your cart pages by editing the following elements:

* **Body** - Personalize the properties from the page body by adding your own styling to the font and colors used. Go to **Branding** > **Body** to make the desired changes on body attributes.
* **Logo -** You can easily add your own logo to the shopping cart page, while also reserving the option of hiding the logo image. Click on **Branding** > **Logo** drop-down list to control the display of your logo.
* **Fields -** You have advanced control over the fields display, with the ability to customize the field properties such as background color, border type, label and input colors. You can also control the display of the error messages that might be triggered on cart fields, by adding style to error background/border and label. Click on **Branding** > **Fields** to customize your fields.
* **Links -** You can personalize the display of the links from your shopping cart pages. Select a new color, or choose a different text-decoration for the cart links from **Branding** > **Links.**
* **Panels -** Customize the display of the shopping cart panels from **Branding** > **Panels**. You have total control over the text properties, while also being able to make advanced customizations on the padding, color and border attributes of your panels.
* **Buttons -**  You can change how buttons are displayed in the cart from **Branding** > **Buttons**. You have access to a variety of properties for buttons customization, such as: setting default/primary/success colors, adding new border types or setting new text properties.
* **Messages -** Change the font properties of the messages displayed in the shopping cart pages, both success and error-related, from **Branding** > **Messages**.
* **Trust logo -** Select a display type for the trust logo shown in the cart page by clicking on **Branding** > **Trust logo**.

### Advanced customizations

In case you want to apply advanced customizations to a cart theme, you can add a different styling to each shopping cart section. ConvertPlus Cart Editor allows you to customize each segment of the cart in a different way, as part of your goal of giving customers a personalized payment experience.

Advanced customizations have priority over the changes made from the Branding menu. For instance, if you edit the color of the links from the **Branding** menu to red, all the links from the page you are editing will be red. However, by setting the link color from the **Cart items** section to blue, you are overwriting the customization for **this section**, and the links color from the Cart items segment will be blue.

Cart Items

Add a different styling to the cart items section from the shopping cart page, by clicking on the **Cart items** drop-down list. Customize the display of product title, image, quantity and price in the cart by editing the properties of these elements. You are able to add a detailed styling to the coupon box by clicking on **Promotion**, and you can do advanced customizations to the **Delete button**, **Cart total,** and **Taxes** elements.

Billing details

You can customize the second section of the checkout page by clicking on the **Billing details** drop-down list. Add your own design to the text properties, background color and border types that compose the environment into which shoppers enter their billing information.

Payment details

You can apply different styling to the payment details section by editing the properties from the **Payment details** drop-down list. Add a different design to this section by customizing properties such as border type, background color, font size and type to give shoppers a unique experience when they are adding their payment information.

Footer

Click on the **Footer** drop-down list to start customizing the footer element. You can apply different styling to properties such as border, text and background color.

#### Related documentation

* [Products and subscriptions listing query parameters](https://verifone.cloud/docs/2checkout/Documentation/myAccount/Products-and-subscriptions-listing-query-parameters)
* [Subscriber management and self-service](https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/03Subscriber-management-and-self-service)
* [Contracts](https://verifone.cloud/docs/2checkout/Documentation/Subscription-Billing/01Subscription-Billing-Set-up/03Contracts)

Rate this article:

<details>

<summary>Need help?</summary>

Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our [Support](https://verifone.cloud/support) teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

[Get in touch](https://verifone.cloud/need-help)

</details>

<details>

<summary>Not yet a Verifone customer?</summary>

We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

[Contact sales](https://www.verifone.com/en/global/contact-sales) [Get Started](https://www.verifone.com/en/global/contact-sales)

</details>


# ConvertPlus trials flow

In order to generate a ConvertPlus trial link, it’s mandatory to have the following parameters in the buy link URL.

## Mandatory parameters for all types of buy links (trials included)

* **Merchant ID** (merchant=ID)
* **Template** (tpl=default)
* **Catalogue Product** ID (prod=ID)

## Mandatory parameters for the trials flow

* **Signature**: for building a Trial buy link it is required to generate a signature - [ConvertPlus Buy-Link Signature for Catalog Products](/shopping-carts/convertplus/convertplus-buy-link-signature-for-catalog-products)
* **Price** (define trial price for the corresponding currency - 0 for free trial, higher than 0 for paid trial); **example**: tprices=USD%3A10%2CEUR%3A0
* **Period** (define period – not less than 7 days); **example**: tperiod=7
* **Currency** (define currency); **example**: currency=USD
* **Quantity** (define quantity – 1 is the only value supported); **example**: qty=1

How your URL should look like:

```
https://store.checkout.com/checkout/buy?merchant=merchant&tpl=default&prod=productiD&qty=1¤cy=USD&tprices=USD%3A10%2CEUR%3A0&tperiod=7&signature=e9xe3a3cf015a3ff4ad687b02ba55207de20abb1d24194dcfc53a140d882fc4b
```

For more details on parameters setup, check [ConvertPlus URL parameters](/shopping-carts/convertplus/convertplus-url-parameters).

{% hint style="warning" %}
**Limitations**:

* The trial period/price applies to a single product.
* The trial period can be a minimum of 7 days.
* 2Checkout uses the custom prices and ignores the per-product pricing configuration.
* Supported payment methods: credit and debit cards, PayPal, and Direct Debit.
* 2Checkout automatically converts the trial to a paid subscription when the trial interval expires by charging shoppers based on the payment-on-file information. Customers can opt-out at any time using their myAccount.
  {% endhint %}


# ConvertPlus renewal flow

## Overview

Enable your customers to order on-demand renewals for their subscriptions using custom **Buy-Links** on ConvertPlus ordering flow.

{% hint style="info" icon="lightbulb" %}

#### Recommended resources

ConvertPlus is a full-stack solution that enables you to increase conversion rates with faster loading time and optimized flows. Download this solution brief to learn more!

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Learn more</a>
{% endhint %}

## Availability

ConvertPlus renewal flow is available only to 2Checkout merchants that have activated ConvertPlus in their accounts. Contact [2Checkout](https://secure.avangate.com/cpanel/contact.php) for activation.

## Requirements

Custom on-demand renewals buy links can be generated manually, and they work for active and past-due subscriptions (excluding trials and non-recurring/lifetime subscriptions). They can also be set from the Subscription page in Control Panel (*Orders and customers* > *Subscriptions* > *Edit subscription details* > *Renew subscription*).

Subscriptions can be renewed automatically ahead of their expiry deadline with 90 to 3000 days. The default platform renewal option is 370 days. Contact [2Checkout](https://secure.avangate.com/cpanel/contact.php) directly if you wish to customize this limitation.

## Scenarios covered

* Renew **Subscription A** belonging to **Product A** (source product) keeping it under **Product A** (target product).
* Renew **Subscription A** belonging to **Product A** (source product) and moving/upgrading the customer to **Product B** (target product).

## Workflow

Use this feature to enable your customers to renew their active and past-due subscriptions on demand, bypassing the upcoming renewal operation scheduled in the 2Checkout system.

Custom on-demand subscription renewals are performed:

1. From the moment when the items were scheduled to renew/expire. For example, let's assume that **Subscription A** (a monthly subscription), scheduled to expire June 30th, 2019, is renewed through the use of an on-demand link with a period of 10 days on June 22nd. **Subscription A's** lifetime will be prolonged with 10 days starting with June 30th, and the renewal/expiry deadline moved to July 10th. Moving forward, **Subscription A** will be renewed a month after the July 10threnewal, per its monthly renewal cycle.
2. By overriding the subscription billing cycle settings. However, following the custom on-demand renewal, the subscription will be governed by the renewal settings and pricing configuration of the product it's associated with.

## Create a custom renewal link

Use the following parameters to generate ConvertPlus renewal links.

<table><thead><tr><th width="130">Parameter</th><th width="154">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>merchant</code></td><td>Required</td><td>Your merchant identification code. The merchant code is available in Settings → Edit system settings, under the <strong>System settings</strong> tab.</td></tr><tr><td><code>subscription</code></td><td>Required</td><td>Unique system-generated identifier of your subscriptions. The subscription reference is available on Orders and customers → Subscriptions → Edit subscription details.</td></tr><tr><td><code>prod</code></td><td>Optional</td><td><p>Identifier of the product used in the renewal process. The product code is available on Setup → Products → Column code in the product listing.<br>By default, the renewal process uses the product from the original order. Use a different product code to renew a subscription to a different target product.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>When included in renewal links, this parameter needs to be <a href="/pages/b67ce4637670029d1cbe97a61caeec07bfd207f7">signed</a> as well.</p></div></td></tr><tr><td><code>qty</code></td><td>Optional</td><td>The number of units (quantity) for the renewed product.</td></tr><tr><td><code>opt</code></td><td>Optional</td><td><p>Control the pricing option used in the renewal process.</p><ul><li><p>1 product with 1 price option with 1 value (includes scale option type)</p><ul><li>prod=code1&#x26;opt=gr1:val1</li></ul></li><li><p>1 product with 1 price option with multiple values</p><ul><li>prod=code1&#x26;opt=gr1:val1;val2</li></ul></li></ul></td></tr><tr><td><code>language</code></td><td>Optional</td><td>Control the language used in the renewal process. Available values for language codes are displayed in <a href="/spaces/CbqTuG2SOk3yrkX5eirC/pages/ff5533634451b368de09054d417a00499c544c47">this</a> article.</td></tr><tr><td><code>recurrence</code></td><td>Optional</td><td>The interval of time that will be added to the subscription lifetime starting with the current renewal/expiry deadline. For example 10:day</td></tr></tbody></table>

## Examples

#### Renew the subscription with the same product and a specific pricing option

For this example, let's assume that we need a custom on-demand renewal link for **Subscription A** (monthly subscription expiring on June 30th, 2019 with the reference **9E0BAD7B5C**) associated with **Product A** with the **code product\_a**.

Use the following parameters to generate the renewal link:

* **merchant=2COTEST**
* **subscription=9E0BAD7B5C**
* **prod=product\_a**
* **opt=group\_name:option\_value**

The resulting renewal link is:

```
https://secure.2checkout.com/checkout/renew/?merchant=2COTEST&subscription=9E0BAD7B5C&prod=product_a&opt=group_name:option_value
```

#### Renew a subscription with a different product

For this example, let's assume that we need a custom on-demand renewal link for **Subscription A** (monthly subscription expiring on June 30th, 2019 with the reference **9E0BAD7B5C**) associated with **Product A** with the **code product\_a**. In the renewal process, the customer will also be upgraded from **Product A** to **Product B** ( **code product\_b**).

Use the following parameters to generate the renewal link:

* **merchant=2COTEST**
* **subscription=9E0BAD7B5C**
* **prod=product\_b**

The resulting renewal link is:

```
https://secure.2checkout.com/checkout/renew/?merchant=2COTEST&subscription=9E0BAD7B5C&prod=product_b
```

## Domain use

* **secure.2checkout.com** domain - If your account is using the 2Checkout's **secure.2checkout.com** domain, then this is what you need to include in your custom on-demand renewal links served to your customers, namely [**https://secure.2checkout.com/renewal/**](https://secure.avangate.com/renewal/)**?**.
* Custom domains such as **store.YourDomain.com -** If your account is using a custom domain such as **store.YourDomain.com**, then this is what you need to include in your custom on-demand renewal links served to your customers, namely [**https://store.YourDomain.com**](https://store.yourdomain.com/) **/renewal/?**

## Control the ordering experience

You can control some aspects of the ordering experience for customers using early renewal links by appending the following parameters to the buy link created.

<table><thead><tr><th width="140.99993896484375">Parameter</th><th width="171">Required / Optional</th><th>Description</th></tr></thead><tbody><tr><td><code>order-ext-ref</code></td><td>Optional</td><td>Use this parameter to set an external reference to the order.</td></tr><tr><td><code>src</code></td><td>Optional</td><td><p>Control the order source identifier.</p><p>You can track the source page by entering the following parameters: </p><p>src=prodpage for the product page or src=dldpage for the link on the download page <br><br>(dldpage and prodpage are example strings only, you can use any combination).</p></td></tr><tr><td><code>coupon</code></td><td>Optional</td><td>Promotion coupon code discounting the price of a product added to checkout. You can send multiple values separated by a semicolon when standalone coupons discount different products added to checkout. <br><br><em>For example [...]&#x26;coupon=voucher1;voucher2[...]</em></td></tr><tr><td><code>style</code></td><td>Optional</td><td><p>Control the cart template used during the renewal process.</p><p>Each template defined in the <a href="https://secure.avangate.com/cpanel/design.php">Interface</a><a href="https://secure.avangate.com/cpanel/design.php"> Templates area</a> of the Control Panel has a unique identifier associated which is visible in the browser address bar when previewing the shopping cart.</p></td></tr></tbody></table>


# Upgrade orders

Through upgrade orders, your shoppers can update their subscriptions by changing their product or by selecting a different quantity or pricing option for their existing product.

## Availability

ConvertPlus upgrade orders are available only to 2Checkout merchants that have activated ConvertPlus in their accounts, for subscriptions that were initially purchased through ConvertPlus / Inline cart templates. Contact [2Checkout](https://secure.avangate.com/cpanel/contact.php) for activation.

## How shoppers can access an upgrade link

After the [upgrade options are set up for a product](https://docs.2checkout.com/subscriptions/subscriptions/packaging-and-pricing/set-up-subscription-updates#upgrade-scenarios), shoppers can access the upgrade order links in the following ways:

1. Self service, by using the **Upgrade** button available next to their subscription in ther 2Checkout myAccount shopper support portal.
2. By using an upgrade link available in Control Panel on the subscription page or custom built by you and made available to the shopper (in an email campaign, inside your product, via direct email / chat, etc).

## Upgrade link use cases

{% stepper %}
{% step %}

#### **One upgrade option preselected in the link**

The upgrade option is preselected in the buy link and the shopper lands on the *Upgrade* checkout.

Link example:

{% code overflow="wrap" %}

```
https://secure.2checkout.com/checkout/upgrade?merchant=MERCHANT_CODE&subscription=SUBSCRIPTION_REFERENCE&prod=PRODUCT_CODE
```

{% endcode %}

Landing page: Upgrade checkout

<div data-with-frame="true"><figure><img src="/files/gDIbzhm4OgkKexoA96j4" alt="Upgrade option preselected and included in the Upgrade link"><figcaption><p>Upgrade option preselected and included in the Upgrade checkout</p></figcaption></figure></div>

{% endstep %}

{% step %}

#### **Two or more upgrade options included**

Shoppers will land on the *Upgrade* page, where they will need to choose from one of the displayed option.

Link example:

{% code overflow="wrap" %}

```
https://secure.2checkout.com/checkout/upgrade?merchant=MERCHANT_CODE&subscription=SUBSCRIPTION_REFERENCE&prod=PRODUCT_CODE1%3BPRODUCT_CODE2
```

{% endcode %}

Landing page: Upgrade page

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

{% step %}

#### **All upgrade options displayed**

The shopper will land either on the *Upgrade* checkout, if only one upgrade product is set up or on the *Upgrade* page, if more than 1 upgrade option is set up on the product associated with the initial subscriptionn.

Link example:

{% code overflow="wrap" %}

```
https://secure.2checkout.com/checkout/upgrade?merchant=MERCHANT_CODE&subscription=SUBSCRIPTION_REFERENCE
```

{% endcode %}

Landing page: Upgrade page or Upgrade checkout

{% tabs %}
{% tab title="Upgrade page (mobile)" %}

<figure><img src="/files/Aw1JpOBKQgXOj95CXIGy" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Upgrade checkout" %}

<figure><img src="/files/t1vxUeSXf559Om5X7SqP" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}
{% endstep %}
{% endstepper %}

## Upgrade orders parameters

Here is a list of relevant parameters that might be useful to add in the Upgrade order link, to the base Upgrade URL on ConvertPlus.

Base URL

{% code overflow="wrap" %}

```
https://secure.2checkout.com/checkout/upgrade?
```

{% endcode %}

<table><thead><tr><th width="159">Parameter</th><th width="174.9998779296875">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>merchant</code></td><td>Required</td><td>Your merchant code to identify your account.</td></tr><tr><td><code>subscription</code></td><td>Required</td><td>Identifies the subscription that is being upgraded. Can be lifetime or recurring.</td></tr><tr><td><code>prod</code></td><td>Optional</td><td><p>Adds a product as an upgrade option to the link (needs to be set up as a valida upgrade option for the initial product). </p><p></p><p>Use separator %3B between 2 products e.g.</p><p><code>prod=PRODUCT_CODE1%3BPRODUCT_CODE2</code></p></td></tr><tr><td><code>opt</code></td><td>Optional</td><td>Preselects the specified pricing option group&#x26;option for the selected product. e.g. opt=gr1:val1. Works only with preselected product (1 product per link). <a href="https://docs.2checkout.com/shopping-carts/convertplus/convertplus-url-parameters">See more on this parameter.</a></td></tr><tr><td><code>tpl</code></td><td>Optional</td><td>Checkout template code. Defaults to the template ID used in the previous order for the subscription.</td></tr><tr><td><code>qty</code></td><td>Optional</td><td>The quantity of the product offered as upgrade offer. Defaults to the minimum quantity set per product.</td></tr></tbody></table>


# ConvertPlus checkout with review page

## Overview

ConvertPlus offers support for multiple checkout options with/without a review page. As a merchant, you have the possibility to define your own purchase flows with/without review and offer your shoppers the optimal checkout experience. By including a review page before your shoppers finalize their purchase you give them the opportunity to review their order and go back to update their checkout details.

## Availability

Available to merchants using the ConvertPlus shopping cart, only for default and one-column templates.

## Benefits

* According to our research, the [checkout with review is currently among the best converting shopping flows](https://blog.2checkout.com/the-importance-of-cart-flow-in-ecommerce/) on the 2Checkout platform
* It can increase your conversion rate in some countries
* Shoppers can review all the information in their shopping cart on an all-in-one page (shopping cart, billing form, and credit card form)

## Workflow

To implement the checkout with review follow these steps:

1. Log in to your [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel) account.
2. Navigate to *Setup →* [*Generate links*](https://secure.2checkout.com/cpanel/integration.php).
3. On the **Checkout links** page, click on the **ConvertPlus** tab.
4. In the **ConvertPlus flows** section, select the **Checkout with review** option.<br>

   <div data-with-frame="true"><figure><img src="/files/GjPLlpp6iPPD6tbjE4lt" alt=""><figcaption></figcaption></figure></div>
5. Continue with the selection of one or more products from the drop-down list.
6. Scroll down to the **Checkout link** section and click on **Generate link**.
7. After you generate a buy-link in with the review flow enabled, the buy-link contains the **review=1** parameter and the checkout page will look like in the image below. At this point, the shopper can click on **Continue to review** before they place the order.<br>

   <div data-with-frame="true"><figure><img src="/files/axHg5bkAMkNmzer1Nazd" alt=""><figcaption></figcaption></figure></div>
8. On the **Review** page, before hitting the **Place order** button, the shopper can edit the **order details**, the **billing details**, and/or the **card details** by clicking on the **Edit** links, as shown below.
   * When clicking on the Edit link in the Order summary section, the shopper is redirected to the Secure Checkout page to edit the order details
   * When clicking on the Edit link in the Billing information section, the shopper is redirected to the Secure Checkout page to edit his details
   * When clicking on the Edit link in the Payment information section (card no. and security code obfuscated), the shopper is prompted with the Payment details form to edit CC details
   * When clicking on the Edit link in the Delivery information section, the shopper is redirected to the Secure Checkout page to edit the delivery details
   * When selecting a different payment method from the review page, the shopper is redirected to the checkout page with the new payment method<br>

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


# ConvertPlus Buy-Link signature for catalog products

## Overview

Use signed buy-links to override the configured price of a catalog product at checkout. The signature prevents tampering with the price and other parameters passed as query strings.

The buy link signature is an HMAC-SHA256 hash computed from a subset of URL parameters using your **\*\*Buy Link Secret Word\*\*** (you can find this in the Merchant Control Panel) as the key. Any parameter listed as *\*signed\** below must be included in the hash if it is present in the URL.&#x20;

{% hint style="info" %}
The `merchant` parameter is never signed.
{% endhint %}

## Buy-link URL format

The buy-link URL should have the following format:

```markdown
https://secure.2checkout.com/checkout/buy?merchant=MERCHANT_CODE&prod=PRODUCT_CODE&qty=QTY&price=CURRENCY:AMOUNT&currency=CURRENCY&signature=SIGNATURE
```

## Parameters

<table><thead><tr><th width="165">Parameter</th><th width="131.00006103515625">Required / Optional</th><th width="104">Signed</th><th>Description</th></tr></thead><tbody><tr><td><code>merchant</code></td><td>Required</td><td>No</td><td>Your merchant code.</td></tr><tr><td><code>prod</code></td><td>Required</td><td>Yes</td><td>Catalog product code. Multiple products: semicolon-separated (`prod=CODE1;CODE2`).</td></tr><tr><td><code>qty</code></td><td>Required</td><td>Yes</td><td>Quantity. Multiple products: semicolon-separated (`qty=1;2`).</td></tr><tr><td><code>price</code></td><td>Required</td><td>Yes</td><td>Price override. See <a href="#price-format">Price Format</a> below.</td></tr><tr><td><code>currency</code></td><td>Required</td><td>Yes</td><td>ISO 4217 currency code (e.g. `USD`, `EUR`).</td></tr><tr><td><code>opt</code></td><td>Optional</td><td>Yes</td><td>Pricing option codes, semicolon-separated.</td></tr><tr><td><code>coupon</code></td><td>Optional</td><td>Yes</td><td>Coupon code.</td></tr><tr><td><code>lock</code></td><td>Optional</td><td>Yes</td><td>Set to `1` to prevent the customer from modifying the cart.</td></tr><tr><td><code>return-url</code></td><td>Optional</td><td>Yes</td><td>Redirect URL after a successful purchase. Use the <strong>unencoded</strong> URL when computing the signature.</td></tr><tr><td><code>return-type</code></td><td>Optional</td><td>Yes</td><td>Redirect method: `redirect` (header redirect) or `link` (link on thank-you page).</td></tr><tr><td><code>expiration</code></td><td>Optional</td><td>Yes</td><td>UTC Unix timestamp after which the link is no longer valid.</td></tr><tr><td><code>order-ext-ref</code></td><td>Optional</td><td>Yes</td><td>External order reference.</td></tr><tr><td><code>customer-ref</code></td><td>Optional</td><td>Yes</td><td>Numeric customer ID.</td></tr><tr><td><code>customer-ext-ref</code></td><td>Optional</td><td>Yes</td><td>External customer reference (e.g. email).</td></tr><tr><td><code>customer-lock</code></td><td>Optional</td><td>Yes</td><td><p>Set to "1" to lock all pre-filled billing/delivery information and route shoppers directly to the order review page. When set to "1", the following parameters need to also be included in the signature: </p><p><code>customer-ref</code></p><p>or</p><p><code>customer-ext-ref</code></p><p>or</p><p></p><p>billing fields</p><p><code>email</code></p><p><code>name</code></p><p><code>phone</code></p><p><code>country</code></p><p><code>state</code></p><p><code>city</code></p><p><code>address</code></p><p><code>address2</code></p><p><code>zip</code></p><p><code>company-name</code></p><p><code>fiscal-code</code></p><p><code>tax-office</code></p><p></p><p>delivery fields</p><p><code>ship-email</code></p><p><code>ship-name</code></p><p><code>ship-phone</code></p><p><code>ship-country</code> </p><p><code>ship-state</code></p><p><code>ship-city</code></p><p><code>ship-address</code></p><p><code>ship-address2</code></p></td></tr></tbody></table>

## Price format

For catalog products, the \`price\` parameter must embed the currency code as a prefix: price=USD:100

For multiple currencies on the same product, separate pairs with a comma: price=USD:100,EUR:90,GBP:80.

For multiple products, separate per-product price definitions with a semicolon: price=USD:100,EUR:90;USD:50,EUR:45.

{% hint style="warning" %}
Using a plain numeric value (e.g. \`price=100\`) without the currency prefix will result in an **Empty cart** error.

`renewal-price` is not a valid parameter for catalog products. It is only available for dynamic products (`dynamic=1`). To set a renewal price for a subscription catalog product, you must configure it in the product settings in the Merchant Control Panel.
{% endhint %}

## Signature algorithm

Follow these steps to generate the signature:

1. Collect signed parameters - Take only the parameters marked as \*Signed\* that are present in your URL. Skip any that you are not using.
2. Sort alphabetically by parameter name: currency, expiration, lock, opt, order-ext-ref, price, prod, qty, return-type, return-url, etc.
3. Serialize each value by prepending the character length of the value to the value itself:<br>

   | Value      | Serialized   |
   | ---------- | ------------ |
   | USD        | 3USD         |
   | USD:100    | 7USD:100     |
   | VQHKBLQNXW | 10VQHKBLQNXW |
   | 1          | 11           |
4. Concatenate all serialized values by joining them into a single string (no separator).
5. Compute HMAC-SHA256 by using your Buy Link Secret Word as the key.
6. Append to URL - Add the resulting 64-character hex string as the \`signature\` parameter.

## Example

### Parameters

| Parameter  | Value      | Signed |
| ---------- | ---------- | ------ |
| `merchant` | 2COLRNC    | No     |
| `prod`     | E2932D0DE2 | Yes    |
| `qty`      | 1          | Yes    |
| `price`    | USD:100    | Yes    |
| `currency` | USD        | Yes    |

### Step-by-step

1. Signed parameters, sorted alphabetically:\
   \
   **currency = USD**\
   **price = USD:100**\
   **prod = E2932D0DE2**\
   **qty = 1**
2. Serialized values:\
   \
   **USD → 3USD**\
   **USD:100 → 7USD:100**\
   **E2932D0DE2 → 10E2932D0DE2**\
   **1 → 11**
3. Concatenated string: **3USD7USD:10010E2932D0DE211**
4. HMAC-SHA256 (with secret word \`secret\_word\`): **<64-character hex signature>**.
5. Final URL:

```markdown
https://secure.2checkout.com/checkout/buy?merchant=2COLRNC&prod=E2932D0DE2&qty=1&price=USD:100&currency=USD&signature=<signature> 
```

## Example with general parameters

| Parameter       | Value                     | Signed |
| --------------- | ------------------------- | ------ |
| **merchant**    | 2COLRNC                   | No     |
| **prod**        | E2932D0DE2                | Yes    |
| **qty**         | 1                         | Yes    |
| **price**       | USD:100                   | Yes    |
| **currency**    | USD                       | Yes    |
| **return-url**  | <https://www.example.com> | Yes    |
| **return-type** | redirect                  | Yes    |
| **expiration**  | 1893456000                | Yes    |

Sorted signed parameters: currency, expiration, price, prod, qty, return-type, return-url.

Concatenated serialized string: 3USD101893456000 7USD:10010E2932D0DE2118redirect22[https://www.example.com](https://www.example.com/).

{% hint style="info" %}
For \`return-url\`, use the raw, unencoded URL in the signature even if it is percent-encoded in the final URL.
{% endhint %}

### Code sample

#### Python

````python
```python
import hmac
import hashlib

merchant = "YOUR_MERCHANT_CODE"
secret   = "YOUR_BUY_LINK_SECRET_WORD"

# Add only the parameters you are using
params = {
    "currency": "USD",
    "price":    "USD:100",   # must use CURRENCY:AMOUNT format
    "prod":     "YOUR_PRODUCT_CODE",
    "qty":      "1",
    # "return-url":  "https://yoursite.com/thank-you",
    # "return-type": "redirect",
    # "expiration":  "1893456000",
}

# Sort alphabetically, serialize, concatenate
serialized = "".join(str(len(v)) + v for _, v in sorted(params.items()))

# HMAC-SHA256
signature = hmac.new(
    secret.encode("utf-8"),
    serialized.encode("utf-8"),
    hashlib.sha256
).hexdigest()

url = (
    f"https://secure.2checkout.com/checkout/buy"
    f"?merchant={merchant}"
    f"&prod={params['prod']}"
    f"&qty={params['qty']}"
    f"&price={params['price']}"
    f"&currency={params['currency']}"
    f"&signature={signature}"
)
````

#### Javascript - (Browser — Web Crypto API)

```javascript
javascript
async function generateBuyLink({ merchant, secret, prod, qty, price, currency }) {
  const params = { currency, price, prod, qty };

  const sorted = Object.entries(params).sort(([a], [b]) => a.localeCompare(b));
  const serialized = sorted.map(([, v]) => String(v.length) + v).join("");

  const enc = new TextEncoder();
  const key = await crypto.subtle.importKey(
    "raw", enc.encode(secret),
    { name: "HMAC", hash: "SHA-256" },
    false, ["sign"]
  );
  const sig = await crypto.subtle.sign("HMAC", key, enc.encode(serialized));
  const signature = Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, "0")).join("");

  const query = new URLSearchParams({ merchant, prod, qty, price, currency, signature });
  return `https://secure.2checkout.com/checkout/buy?${query}`;
}
```

## Validating your signature

Use the [Signature Generation API endpoint](/shopping-carts/convertplus/how-to-use-2checkout-signature-generation-api-endpoint) to generate a signature server-side and compare it against your own implementation. The API uses the Buy Link Secret Word configured in your merchant account.

````bash
```bash
curl -X POST https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H "Content-Type: application/json" \
  -H "merchant-token: YOUR_JWT" \
  -d '{
    "merchant": "YOUR_MERCHANT_CODE",
    "currency": "USD",
    "products": [
      {
        "code": "YOUR_PRODUCT_CODE",
        "quantity": 1,
        "custom-price": { "USD": 100 }
      }
    ]
  }'
````

## Troubleshooting

| Error                 | Cause                                         | Fix                                                |
| --------------------- | --------------------------------------------- | -------------------------------------------------- |
| Empty cart            | Invalid signature                             | Verify serialized string.                          |
| Empty cart            | Wrong price format (\`price=100\`)            | Use \`price=USD:100\`.                             |
| Empty cart            | \`renewal-price\` used with a catalog product | Remove it; set it in the Merchant Control Panel    |
| Empty cart            | Wrong secret key                              | Use Buy Link Secret Word, not API/INS key.         |
| Wrong price displayed | Currency mismatch                             | Match \`currency\` param with prefix in \`price\`. |


# ConvertPlus Buy-Links signature for dynamic products

## Overview

You can generate links for dynamic products outside the Merchant Control Panel, using the ConvertPlus parameters explained in [this](/shopping-carts/convertplus/convertplus-url-parameters) article. Some of the ConvertPlus buy-link parameters require a signature, to prevent any interference in the ordering process. Optional parameters also require a signature if they are included in the generated buy-link.

{% hint style="info" icon="lightbulb" %}

#### ConvertPlus is a full-stack solution that enables you to increase conversion rates with faster loading time and optimized flows. Download this solution brief to learn more!

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

## ConvertPlus parameters that require a signature

<table><thead><tr><th width="184">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>return-url</code></td><td>URL to which customers are redirected after their finalized purchase. Learn more about Redirect URL on <a href="/pages/176f15b833b9311d6f352514eb3f1aa3e1a3f188">this</a> article.</td></tr><tr><td><code>return-type</code></td><td><p>The return method used for redirecting your customers after a successful sale. Possible values:</p><ul><li>Link in the Thank You page</li><li>Header Redirect</li></ul></td></tr><tr><td><code>expiration</code></td><td><p>Buy link expiry date. The link becomes invalid after the date from this parameter. Send as a UTC timestamp.</p><p>Example: 1537549421 </p></td></tr><tr><td><code>order-ext-ref</code></td><td>Use this parameter to set an external reference to the order.</td></tr><tr><td><code>item-ext-ref</code></td><td>Set product identifier for your dynamic products. You can send multiple values separated by semicolon ;.</td></tr><tr><td><code>customer-ref</code></td><td>The 2Checkout system generates default customer numerical (integer) IDs automatically for all orders of products that feature subscriptions. Can be used for new acquisitions aggregating new subscriptions under an existing Customer account.</td></tr><tr><td><code>customer-ext-ref</code></td><td>The external customer reference.</td></tr><tr><td><code>currency</code></td><td>Preselected <strong>billing currency</strong> 2Checkout uses to charge your customers.</td></tr><tr><td><code>prod</code></td><td><p>The name of the dynamic product. For multiple products, send them separated by a semicolon. </p><p>Example: name1;name2;name3.</p></td></tr><tr><td><code>price</code></td><td><p>For dynamic products, enter the product price. For multiple dynamic items, send the values separated by a semicolon. </p><p>Example: price1;price2;price3.</p></td></tr><tr><td><code>qty</code></td><td><p>The number of units (quantity) for each product in checkout, separated by a semicolon;. Do not use spaces or blanks. Example: <strong>qty=2;1</strong>.</p><p><strong>qty</strong> works in conjunction with <strong>prod</strong>, based on their respective order. The first value of the <strong>qty</strong> parameter controls the number of units for the products whose identifier is in the first position of the <strong>prod</strong> parameter. </p><p>Example: <a href="https://secure.2checkout.com/checkout/buy/?merchant=2COLNC&#x26;">https://secure.2checkout.com/checkou...rchant=2COLNC&#x26;</a><strong>prod=6FD08E61B5;E2932D0DE2&#x26;qty=4;3</strong></p></td></tr><tr><td><code>type</code></td><td><p>The type of dynamic product. Possible values:</p><ul><li>digital</li><li>physical</li><li>shipping</li><li>tax</li></ul><p>If type is empty or not send, the default line item is considered <strong>product</strong>.</p><p>For multiple dynamic items, send the values separated by a semicolon.</p></td></tr><tr><td><code>opt</code></td><td><p>Defines the product pricing options.</p><p><strong>URL formating rules:</strong></p><p>":" is considered a pair separator</p><ul><li><p>1 product with 1 price option with 1 value (includes scale option type)</p><ul><li>prod=code1&#x26;opt=gr1:val1</li></ul></li><li><p>1 product with 1 price option with multiple values</p><ul><li>prod=code1&#x26;opt=gr1:val1:val2</li></ul></li></ul><p>"," is considered a value separator</p><ul><li><p>1 product with 2 price options with 1 value each</p><ul><li>prod=code1&#x26;opt=gr1:val1,gr2:val2</li></ul></li><li><p>1 product with 2 price options with multiple values each</p><ul><li>prod=code1&#x26;opt=gr1:val1:val2,gr2:val3:val4</li></ul></li></ul><p>";" is considered a parameter separator between products</p><ul><li><p>2 products with 1 price option containing 1 value</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1;gr2:val2</li></ul></li><li><p>2 products with 1 price option containing multiple values</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1:val2;gr2:val3:val4</li></ul></li><li><p>2 products with 2 price options containing 1 value each</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1,gr2:val2;gr3:val3,gr4:val4</li></ul></li><li><p>2 products with 2 price options containing multiple values each</p><ul><li>prod=code1;code2&#x26;opt=gr1:val1:val2,gr2:val3:val4;gr3:val5:val6,gr4:val7:val8</li></ul></li></ul></td></tr><tr><td><code>description</code></td><td>For dynamic products, set a description that is displayed in the checkout page. The description field is displayed only for the 'One column with payment buttons' template. The description will not be visible in the default template.</td></tr><tr><td><code>recurrence</code></td><td><p>For dynamic products, set product recurring options.</p><p>Send multiple dynamic items separated by a semicolon.</p><p>Example: period1:unit1;period2:unit2;</p><p>Possible values for units:</p><ul><li>DAY</li><li>WEEK</li><li>MONTH</li><li>YEAR</li><li>FOREVER</li></ul><p>*This parameter is conditioned by two other parameters: <strong>duration</strong> and <strong>renewal-price</strong>.</p></td></tr><tr><td><code>duration</code></td><td>For dynamic products, set the duration of the recurrence.</td></tr><tr><td><code>renewal-price</code></td><td>For dynamic products, set the price that should be applied to the renewal order.</td></tr></tbody></table>

## ConvertPlus parameters to be included in the signature - general rules

1. General parameters included in the signature, regardless of the type of checkout (catalog products, dynamic products, renewal, unfinished payment): **return-url**, **return-type**, **expiration**, **order-ext-ref**, **customer-ref**, **customer-ext-ref.**
2. Parameters to be included in the signature for dynamic products buy-links: **currency**, **prod, price**, **qty**, **type**, **opt**, **description**, **recurrence**, **duration**, **renewal-price,** **item-ext-ref**.
3. Parameters to be included in the signature for manual renewal buy-links: **prod**, **qty**, **opt.**
4. Parameters to be included for on-the-fly pricing for catalog products: **prod**, **price**, **qty**, **opt, coupon.**
5. The parameter to be included in order to lock the cart for catalog products: **lock**.
6. Parameters to be included when an approved URL is set: in this case, **all parameters** will be included in the signature, when redirected after successful completion of a sale.

## Build the ConvertPlus signature

To sign a ConvertPlus buy-link, you need to follow these steps:

1. Sort the parameters that require a signature alphabetically.
2. Serialize the parameters and append to them the length of their values.
3. Concatenate the resulting values.
4. The serialized value is then encrypted with your Buy Link [Secret Word](https://docs.2checkout.com/get-started-with-the-2checkout-api/) using the HMAC method (algorithm sha256).
5. The resulting value is added to the buy link under the **signature** parameter

### Example

Let's consider the following parameters:

* &#x20;   **merchant** = 'MCODE'
* &#x20;   **dynamic** = '1'
* &#x20;   **prod** = 'Software'
* &#x20;   **price** = 10
* &#x20;   **currency** = 'USD'
* &#x20;   **qty** = 1
* &#x20;   **type** = 'digital'
* &#x20;   **expiration** = 1893456000

The regular buy-link will have the following structure:

```
https://www.2checkout.com/checkout/buy?merchant=2COLRNC&dynamic=1&prod=Software&price=10currency=USD&qty=1&type=digital&expiration=1893456000
```

This link is missing one last parameter, a signature.

Let's take a look at the list of parameters that require a signature:

* &#x20;   **merchant** = '2COLRNC'
* &#x20;   **dynamic** = '1'
* &#x20;   **prod** = 'Software' <-- SIGNATURE REQUIRED
* &#x20;   **price** = 10        <-- SIGNATURE REQUIRED
* &#x20;   **currency** = 'USD'        <-- SIGNATURE REQUIRED
* &#x20;   **qty** = 1             <-- SIGNATURE REQUIRED
* &#x20;   **type** = 'digital'         <-- SIGNATURE REQUIRED
* &#x20;   **expiration** = '1893456000' <-- SIGNATURE REQUIRED

We extract only those parameters:

* &#x20;   **prod** = 'Software'
* &#x20;   **price** = 10
* &#x20;   **currency** = 'USD'
* &#x20;   **qty** = 1
* &#x20;   **type** = 'digital'
* &#x20;   **expiration** = 1893456000

#### Sort the parameters alphabetically

* &#x20;   **currency** = 'USD'
* &#x20;   **expiration** = 1893456000
* &#x20;   **price** = 10
* &#x20;   **prod** = 'Software'
* &#x20;   **qty** = 1
* &#x20;   **type** = 'digital'

#### Serialize the values

To serialize a value, you need to prepend to it the number of letters or digits a value has. For example, the **currency** parameter has the 'USD' value that will be serialized as '3USD', where 3 is the number of letters that make up the value. The value of the **price** parameter is '10', so the serialized value will be '210', where 2 is the number of digits that make up the value.

In case a value uses special characters, to serialize it, you need to prepend to it the number of bytes in the string, also known as the UTF-8 string length. To count the bytes in the string, you can use an online bytes counter. For example, if the **prod** parameter has the 'ελληνικά' value, this will be serialized as '16ελληνικά' and ***not*** as '8ελληνικά', due to the use of special characters, where '16' is the number of bytes in the string.

* &#x20;   **currency** = '3USD'
* &#x20;   **expiration** = 101893456000 &#x20;
* &#x20;   **price** = 210
* &#x20;   **prod** = '8Software'
* &#x20;   **qty** = 11
* &#x20;   **type** = '7digital'

#### Concatenate the values

'3USD1018934560002108Software117digital'

#### Encrypt using your Secret Word

The serialized value is then encrypted using the HMAC method.

* the algorithm used is sha256
* the key used when encrypting is the merchant secret word (in this example, the secret word is 'secret\_wordbuylink')

This outputs a 64 character string:

```
c2225743f22e3b698b2f31052e35ec7602b787c804eaac1e0cd127a9a06b5762
```

#### Add the string in the buy-link

```
https://secure.2checkout.com/checkout/buy?merchant=2COLRNC&dynamic=1&prod=Software&price=10&currency=USD&qty=1&type=digital&expiration=1893456000&signature=c2225743f22e3b698b2f31052e35ec7602b787c804eaac1e0cd127a9a06b5762
```


# How to generate a JSON Web Token (JWT) for the signature generation API endpoint

## Overview

In order to pass the identity of the merchant to the 2Checkout Signature Generation API endpoint, you need to generate a valid JSON Web Token (JWT). This is an Internet standard for creating JSON-based access tokens that assert some number of claims.

The <https://jwt.io/> website allows you to decode, verify, and generate JSON Web Tokens.

{% hint style="info" icon="lightbulb" %}

#### Recommended resources

Want to simplify the process of collecting payments from your customers, while offering them a straightforward and unique buying experience? Check out ConvertPlus, our newest ordering engine, built with the latest technologies and continuously optimized based on CRO tests and benchmarks.

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Learn more</a>
{% endhint %}

{% hint style="warning" %}
JWTs are credentials, which can grant access to resources. Be careful where you paste them!
{% endhint %}

## Generate a merchant JWT

To generate a merchant JWT, follow the steps below:

1. Before generating a JWT, you need to copy the Buy-link Secret Word from your Merchant Control Panel. Log in to your Control Panel and navigate to *Integrations > Webhooks & API >* [*Secret word*](https://secure.2checkout.com/cpanel/webhooks_api.php) *section*.
2. Copy the string from the Buy-link Secret Word field to the clipboard.
3. Navigate to the [https://jwt.io](https://jwt.io/) website and start generating the JWT token.
   * In the **Debugger** section, you need to input data into the sections highlighted in this image.<br>

     <div data-with-frame="true"><figure><img src="/files/Svxh9GxlbjlnkvMk9bQZ" alt=""><figcaption></figcaption></figure></div>
   * The data in the **HEADER** section identifies which algorithm and token type are used to generate the signature. For your JWT token, use **HMAC-SHA-512 (HS512)** and token type **JWT**:
     * alg: HS512 (string, required) - encryption algorithm;
     * typ: JWT (string, required) - token type;<br>

       ```java
       {
        "alg" : "HS512",
        "typ" : "JWT"
       }
       ```
   * The **PAYLOAD** section contains a set of claims. The JWT specification defines seven Registered Claim Names which are the standard fields commonly included in tokens. For your JWT, use the following claims:
     * sub: MERCH\_CODE (string, required) - subject, the merchant code whom the token refers;
     * iat: 1580915730 (string, required) - issued at, must be current timestamp since the UNIX epoch;
     * exp: 1580915730 (string, optional) - expiration time, must be in UNIX timestamp format from future.\
       \
       If the expiration time (exp) is not provided, the JWT token expiration time will be calculated from **iat + 30 minutes**.

       All the other fields/claims will be ignored.<br>

       ```java
       {
         "sub": "MERCH_CODE",
         "iat": 1580912768,
         "exp": 1580916205
       }
       ```
   * In the **VERIFY SIGNATURE** section, you calculate the signature. This is calculated by encoding the **header** and **payload** using **Base64url** encoding and concatenating the two values with a period separator. Then run the resulting string through the cryptographic algorithm specified in the header, which in this case is **HMAC-SHA512**.
   * For your JWT token, replace the **\<Buy link secret word>** from the example below with your **Buy-link Secret Word** from step 1.<br>

     ```java
     HMACSHA512(
       base64UrlEncode(header) + "." +
       base64UrlEncode(payload),
       <Buy link secret word>
     )
     ```
   * You will get the JWT token:<br>

     ```java
     eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJz...z0ZY6L6T1GvlOHiptgOQ
     ```
4. Use this JWT token in the future to pass your identity as a merchant to the 2Checkout Signature Generation API endpoint.


# Set up redirect URLs for ConvertPlus ordering flow

## Overview

Redirect your customers together with the sale parameters to a page or script after a successful sale on the **ConvertPlus** cart. You can specify the redirect URL at the account, product, and buy-link level.

Specifying an approved URL at the account level will direct all buyers to the same URL after a successful ConvertPlus checkout.

{% hint style="info" icon="lightbulb" %}

#### Recommended resources

ConvertPlus is a full-stack solution that enables you to increase conversion rates with faster loading time and optimized flows. Download this solution brief to learn more!

<a href="https://www.2checkout.com/lp/2checkout_convertplus_cart.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

## Requirements

Available only for merchants that have [ConvertPlus](/shopping-carts) cart enabled on their account. [Contact](https://secure.avangate.com/cpanel/contact.php) us for ConvertPlus activation.

Applicable only to online payment methods (ex: Credit cards and PayPal).

To learn how to set a redirect URL on 2Checkout default ordering flows, read [this](/payment-link/checkout-links-and-options/set-a-redirect-url-for-default-checkout-flows) article.

## Return methods

2Checkout provides three methods in which the buyer and sale parameters can be returned to your approved URL.

You may send the buyer to our order processed page which displays a **Click Here to Finalize your Order** button to redirect the buyer, you may bypass the order processed page using a header redirect or you can immediately display your approved URL to the buyer while they remain on our server. You can set your return method and Approved URL at different levels of granularity:

* Set the return method and Approved URL at order level (apply to individual sales) from the **Generate Links** area, after enabling the **Enable return after sale** checkbox.
* Set the return method and Approved URL at product level (apply to all successful sales of this product) from the **Fulfillment** area of the product page, after enabling the **Enable return after sale** checkbox.
* Set the return method and Approved URL at account level (apply to all successful orders, irrespective of the product ordered) from your [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel) by navigating to *Dashboard → Integrations → Webhooks & API → Redirect URL,* and select the **Enable return after sale** checkbox.

### Links IN thank you page

The shopper is sent to the **Thank You Page**, which will display a **link** that will act as a redirect to the Approved URL.

With the return method set to **Link in Thank You Page**, the shopper will be taken to the Thank You Page after completing a successful purchase. This page will feature a **redirect link**. When clicked, the shopper (and collected sale parameters if the case) is directed to the provided Approved URL via GET.

### HEADER REDIRECT

Set the return method to **Header Redirect** to have the Approved URL immediately displayed to the shoppers, while they still remain on our server.

The shopper will be immediately redirected to your Approved URL. Using this method, the sale parameters will be returned along with the shopper (in case of product/order URL).

### DIRECT RETURN

{% hint style="info" %}
Direct return is available **only** to clients upgraded from previous 2Checkout Admin Area.
{% endhint %}

With the return method set to **Direct Return**, sale parameters will be posted automatically to the approved URL while fetched by our server and displayed to the buyer. When using this return method, the Approved URL will be masked to the customer, while the experience provided would be that of a 2Checkout domain.

This method can be used with redirects as long as each page outputs more than 255 characters of content to the browser. If **Direct Return** encounters a page that redirects without outputting content the process will fail and the customer will be sent to our standard Order Processed page. This generally occurs with a header redirect from your Approved URL when that URL outputs less than 255 characters of content to the browser.

## Approved URL priority

Depending on the cPanel URL settings and the return methods you have in place, the priority of the approved URL will be the following:

* **Priority I**: Order level – with corresponding Approved URL set at order level.
* **Priority II**: Product level – with corresponding return method; has priority if there is no order level return URL and there is only one product with product level Approved URL set.
* **Priority III**: Account level – with corresponding return method set at vendor account level is applied in any of the following situations:
  * There are more than one products in the cart that have approved URLs set, and there is no order level approved URL.
  * None of the products have approved URL set and there is no order level URL set.


# Signature validation for return URL via ConvertPlus

## Overview

To start, you need to have the buy-link with the return-URL and return-type parameters defined and signed. Read [here](/shopping-carts/convertplus/convertplus-buy-link-signature-for-catalog-products) how to create such a link and sign its parameters.

After opening the buy-link in the browser, the shopper will be redirected to the 2Checkout page. During the booting of the cart, the signature is checked against the buy-link query parameters.

In case of an invalid signature, the buy-link parameter is disregarded and the shopper will see the 'Thank You' page instead of a redirect.

In case of a valid signature for the buy-link parameters and successful order placing, the shopper is redirected to the page you have defined in the return parameters. The return-URL is appended with all buy-link parameters and with some extra parameters, all of them are signed and their signature should be present in the query parameters.&#x20;

In the backend, you need to gather all these parameters and validate the parameter's hash you generate with the new signature appended to the return-URL.

To generate the hash and validate the return URL, follow the steps below.&#x20;

## Build the ConvertPlus Signature

To sign a ConvertPlus buy-link, you need to follow these steps:

1. Sort the parameters that require a signature alphabetically.
2. Serialize the parameters and append to them the length of their values.
3. Concatenate the resulting values.
4. The serialized value is then encrypted with your Buy-Link Secret Word using the HMAC method (algorithm sha256).
5. The resulting value is added to the buy-link under the signature parameter.

In order to generate a valid ConvertPlus signature, you should include all the parameters from the return URL, except the signature.

### Example

{% hint style="info" %}
When encrypting the values to generate the signature for the return-URL parameter, use an URL with the following structure: https\://..... Do not use an encoded URL.
{% endhint %}

1. Let's consider the following parameters:
   * **return-url** = '[https://www.yourbackend.com](https://www.yourbackend.com/)'
   * **return-type** = 'redirect'
   * **merchant** = 'YOUR\_VENDOR\_CODE' (this is the merchant code)
   * **prod** = 'TEST\_PROD'  (this is the product code)
   * **qty** = 1
   * **price** = 29
   * **tpl** = default
   * **refno** = 11606896
   * **total** = 29
   * **total-currency** = USD
   * **currency** = USD\
     \
     The regular return link will have the following structure:<br>

     ```
     https://www.yourbackend.com/?merchant=YOUR_VENDOR_CODE&currency=USD&return-url=https%3A%2F%yourbackend.com%2F&return-type=redirect&tpl=default&prod=TEST_PROD&price=29&qty=1&refno=11606896&total=29&total-currency=USD&signature=95052ee0c558b53040e97d7d81add2e0f1400ca0936a558910c68ddc8301fc63
     ```
2. Sort the parameters alphabetically: currency, merchant, price, prod, qty, refno, return-type, return-url, total, total-currency, tpl.
3. Serialize the values. To serialize a value, you need to append before it the number of letters or digits a value has. For example, the return-type parameter has the 'redirect' value that will be serialized as '8redirect'', where 8 is the number of characters that make up the value.
   * **currency** - 3USD
   * **merchant** - 16YOUR\_VENDOR\_CODE
   * **price** - 229
   * **prod** - 9TEST\_PROD
   * **qty** - 11
   * **refno** - 811606896
   * **return-type** - 8redirect
   * **return-url** - 24<https://yourbackend.com/>
   * **total** - 229
   * **total-currency** - 3USD
   * **tpl** - 7default
4. Concatenate the values:<br>

   ```
   3USD16YOUR_VENDOR_CODE2299TEST_PROD118116068968redirect24https://yourbackend.com/2293USD7default'
   ```
5. Encrypt using your Buy-Link Secret Word that can be found in your Merchant Control Panel, under *Integrations → Webhooks & API →* [*Secret word section*](https://secure.2checkout.com/cpanel/webhooks_api.php)*.*\
   \
   The serialized value is then encrypted using the HMAC method.
   * the algorithm used is sha256
   * the key used when encrypting is the merchant secret word (in this example, the secret word is 'vendor-secret-key')\
     \
     This outputs a 64 character string:<br>

     ```
     3598511a17b038b9a0f5579f26bb51a17a8e78ac99a2f6b833714a88a6bbb0c4
     ```

Also, you can use HashValidationTool:

```php
<?php

class HashValidationTool
{

    const SHA_256 = 'sha256';
    private $params;
    private $signature;
    private $key;

    /**
     * HashValidationTool constructor.
     *
     * @param string $key
     */
    public function __construct(string $key)
    {
        $this->key = $key;
    }

    /**
     * @return string
     */
    private function encrypt(): string
    {
        $serialized = $this->serializeParameters($this->params);

        if (strlen($serialized) > 0) {
            echo 'Success: serialized params - ' . $serialized . PHP_EOL;

            return bin2hex(hash_hmac(self::SHA_256, $serialized, $this->key, true));
        } else {
            echo 'Error: serialization parameters are empty' . PHP_EOL;

            return '';
        }
    }

    /**
     * @param string $url
     *
     * @return bool
     */
    public function validate(string $url): bool
    {
        $this->setUrl($url);

        return $this->encrypt() === $this->signature;
    }

    /**
     * @param array $array
     *
     * @return string
     */
    private function serializeParameters(array $array): string
    {
        ksort($array);

        $serializedString = '';

        foreach ($array as $value) {
            if (is_array($value)) {
                $serializedString .= $this->serializeParameters($value);
            } else {
                $serializedString .= strlen($value) . $value;
            }
        }

        return $serializedString;
    }

    /**
     * @param string $url
     */
    private function setUrl(string $url): void
    {
        $urlParts = parse_url($url);
        parse_str($urlParts['query'], $this->params);
        $this->signature = $this->params['signature'];
        unset($this->params['signature']);
    }
}

$hashValidationTool = new HashValidationTool('vendor-secret-key');
if ($hashValidationTool->validate('https://www.yourbackend.com/?merchant=YOUR_VENDOR_CODE&currency=USD&return-url=https://yourbackend.com/&return-type=redirect&tpl=default&prod=TEST_PROD&price=29&qty=1&refno=11606896&total=29&total-currency=USD&signature=95052ee0c558b53040e97d7d81add2e0f1400ca0936a558910c68ddc8301fc63')) {
    echo 'valid';
} else {
    echo 'invalid';
}
```

## Diagrams

The successful order with a valid signature for the default theme is described in the following diagram.

<div data-with-frame="true"><img src="/files/9a5f8a812a441832bcdf0b8c06c711119816bb7d" alt=""></div>

The successful order with an invalid signature for the default theme is described in the following diagram.

<div data-with-frame="true"><img src="/files/adef1ed9e05dd0e5710e2b12281c3662f97fc003" alt=""></div>


# How to use 2Checkout signature generation API endpoint

## Overview

Before starting to use the 2Checkout Signature Generation API endpoint make sure you read about how to [generate a JSON Web Token (JWT)](/shopping-carts/convertplus/how-to-generate-a-json-web-token-jwt-for-the-signature-generation-api-endpoint) and you have generated your merchant token.

To connect to the 2Checkout Signature Generation API endpoint you need to pass the merchant token to request headers and add the JSON formatted product payload.

## Catalog Products use cases

### Catalog products with lock

Signature parameter(s):

* lock: 1 (boolean, required) – Set TRUE or "1" to lock products.
* products: \[] (array, required) – The products array.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        },
        {
            "code": "PRODUCT_CODE_2"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        },
        {
            "code": "PRODUCT_CODE_2"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with expiration date and lock

Signature parameter(s):

* lock: 1 (boolean, required) – Set TRUE or "1" to lock products.
* expiration: 1581003962 (string, optional) – Buy-link expiry date. The link becomes invalid after the date of this parameter. Send as a UTC UNIX timestamp.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "expiration": "1893456001",
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "expiration": "1893456001",
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with expiration date and custom price

Signature parameter(s):

* currency: USD (string, required) – Pre-selected billing currency is used to charge your customers.
* expiration: 1581003962 (string, optional) – Buy-link expiry date. The link becomes invalid after the date of this parameter. Send as a UTC UNIX timestamp.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[custom-price]: {} (object, required) – The products prices for different currencies.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "expiration": "1893456001",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "custom-price": {
                "EUR": 10,
                "USD": 8
            }
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "expiration": "1893456001",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "custom-price": {
                "EUR": 10,
                "USD": 8
            }
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with trial and expiration

Signature parameter(s):

* lock: 1 (boolean, required) – Set TRUE or "1" to lock products.
* expiration: 1581003962 (string, optional) – Buy-link expiry date. The link becomes invalid after the date of this parameter. Send as a UTC UNIX timestamp.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[trial-prices]: PRODUCT\_CODE\_1 (string, required) – The trial price for the corresponding currency.
* products\[]\[trial-period]: PRODUCT\_CODE\_1 (string, required) – The trial period.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "currency": "USD",
    "expiration": "1893456001",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "trial-prices": {"USD":10},
            "trial-period": 7
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "currency": "USD",
    "expiration": "1893456001",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "trial-prices": {"USD":10},
            "trial-period": 7
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with return method parameter

Signature parameter(s):

* return-method\[url]: <https://www.example.com> (string, optional) – URL to which customers are redirected after their finalized purchase.
* return-method\[type]: link (string, optional) – The return method used for redirecting your customers after a successful sale. Possible values: link, header.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

Learn more about the redirect URL in [this article](/shopping-carts/convertplus/set-up-redirect-urls-for-convertplus-ordering-flow).

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "return-method": {
        "url": "https:\/\/www.example.com",
        "type": "link"
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "return-method": {
        "url": "https:\/\/www.example.com",
        "type": "link"
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with order external reference

Signature parameter(s):

* reference\[external]\[order]: ref-1 (string, required) – Use this parameter to set an external reference to the order.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "reference": {
        "external": {
            "order": "order_external_reference"
        }
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "reference": {
        "external": {
            "order": "order_external_reference"
        }
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with customer reference

Signature parameter(s):

* reference\[customer]: ref-1 (string, required) – Customer numerical (integer) identifier/reference.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

It can be used for new acquisitions aggregating new subscriptions under an existing Customer account.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "reference": {
        "customer": "customer_reference"
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "reference": {
        "customer": "customer_reference"
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with external customer reference

Signature parameter(s):

* reference\[external]\[customer]: ref-1 (string, required) – The external customer reference.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "reference": {
        "external": {
            "customer": "customer_external_reference"
        }
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "reference": {
        "external": {
            "customer": "customer_external_reference"
        }
    },
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with custom parameters

Signature parameter(s):

* custom-parameters: \[] (array, required) – The name field for all custom parameters is mandatory.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "custom-parameters": [
        {
            "name": "custom_param_name",
            "value": "custom_param_value"
        }
    ],
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "custom-parameters": [
        {
            "name": "custom_param_name",
            "value": "custom_param_value"
        }
    ],
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with coupons and lock parameter

Signature parameter(s):

* lock: 1 (boolean, required) – Set TRUE or "1" to lock products.
* coupons: \[] (array, required) – An array of coupon codes.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "coupons": [
        "COUPON-CODE"
    ],
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "coupons": [
        "COUPON-CODE"
    ],
    "products": [
        {
            "code": "PRODUCT_CODE_1"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with coupons and custom price

Signature parameter(s):

* currency: USD (string, required) – Pre-selected billing currency is used to charge your customers.
* coupons: \[] (array, required) – An array of coupon codes.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[custom-price]: {} (object, required) – The products prices for different currencies.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "coupons": [
        "COUPON-CODE"
    ],
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "custom-price": {
                "EUR": 1
            }
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "coupons": [
        "COUPON-CODE"
    ],
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "custom-price": {
                "EUR": 1
            }
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with quantity and lock parameters

Signature parameter(s):

* lock: 1 (boolean, required) – Set TRUE or "1" to lock products.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[quantity]: integer (integer, required) – The number of units (quantity) for each product in checkout.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "quantity": 1
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "quantity": 1
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with quantity and custom price parameters

Signature parameter(s):

* currency: USD (string, required) – Pre-selected billing currency is used to charge your customers.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[quantity]: integer (integer, required) – The number of units (quantity) for each product in checkout.
* products\[]\[custom-price]: {} (object, required) – The products prices for different currencies.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "quantity": 1,
            "custom-price": {
                "EUR": 1
            }
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "quantity": 1,
            "custom-price": {
                "EUR": 1
            }
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with custom options and lock

Signature parameter(s):

* lock: 1 (boolean, required) – Set TRUE or "1" to lock products.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[options]: {} (object, required) – The product options.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "options": [
                {
                    "name": "option_name_1",
                    "value": "option_value2"
                }
            ]
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "lock": 1,
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "options": [
                {
                    "name": "option_name_1",
                    "value": "option_value2"
                }
            ]
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with custom options and custom price

Signature parameter(s):

* currency: USD (string, required) – Pre-selected billing currency is used to charge your customers.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[options]: {} (object, required) – The product options.
* products\[]\[custom-price]: {} (object, required) – The products prices for different currencies.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "options": [
                {
                    "name": "option_name_1",
                    "value": "option_value2"
                }
            ],
            "custom-price": {
                "EUR": 1
            }
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "options": [
                {
                    "name": "option_name_1",
                    "value": "option_value2"
                }
            ],
            "custom-price": {
                "EUR": 1
            }
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Catalog product with custom price

Signature parameter(s):

* currency: USD (string, required) – Pre-selected billing currency is used to charge your customers.
* products\[]\[code]: PRODUCT\_CODE\_1 (string, required) – The product code.
* products\[]\[price]: {} (object, required) – The product prices for different currencies.
* products\[]\[custom-price]: {} (object, required) – The product custom prices for different currencies.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "custom-price": {
                "EUR": 10,
                "USD": 8
            }
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "currency": "USD",
    "products": [
        {
            "code": "PRODUCT_CODE_1",
            "custom-price": {
                "EUR": 10,
                "USD": 8
            }
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

## Dynamic Products Use Cases

### Dynamic products

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Pre-selected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME_1",
            "price": 10
        },
        {
            "name": "PRODUCT_NAME_2",
            "price": 8
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME_1",
            "price": 10
        },
        {
            "name": "PRODUCT_NAME_2",
            "price": 8
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with product quantity

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[quantity]: 1 (integer, required) - The number of units (quantity) for each product in checkout.
* products\[]\[price]: 10 (integer, required) - The products prices value.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME_1",
            "quantity": 1,
            "price": 10
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME_1",
            "quantity": 1,
            "price": 10
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with options

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.
* products\[]\[options]: \[] (array, required) - The product options.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME_1",
            "price": 10,
            "options": [
                {
                    "name": "option_name_1",
                    "value": "option_value_1",
                    "surcharge": 3
                }
            ]
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME_1",
            "price": 10,
            "options": [
                {
                    "name": "option_name_1",
                    "value": "option_value_1",
                    "surcharge": 3
                }
            ]
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with price

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with product type

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.
* products\[]\[type]: product (string, required) - The type of dynamic product. Possible values: product, shipping, tax.

If the type parameter is empty or not send, the default line item is considered product.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "TAX_VALUE",
            "price": 10,
            "type": "tax"
        },
        {
            "name": "SHIPPING_NAME",
            "price": 10,
            "type": "shipping"
        },
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "type": "product"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "TAX_VALUE",
            "price": 10,
            "type": "tax"
        },
        {
            "name": "SHIPPING_NAME",
            "price": 10,
            "type": "shipping"
        },
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "type": "product"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with tangible parameter

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[type]: product (string, required) - The type of dynamic product. Possible values: product, shipping, tax.
* products\[]\[price]: 10 (integer, required) - The products prices value.
* products\[]\[tangible]: 1 (boolean, required) - Send TRUE or 1 for products that require physical delivery.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "EUR",
    "products": [
        {
            "name": "TAX_VALUE",
            "type": "tax",
            "quantity": 1,
            "price": 1
        },
        {
            "name": "SHIPPING_NAME",
            "type": "shipping",
            "quantity": 1,
            "price": 1
        },
        {
            "name": "PRODUCT_NAME",
            "type": "product",
            "quantity": 1,
            "price": 1,
            "tangible": 1
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "EUR",
    "products": [
        {
            "name": "TAX_VALUE",
            "type": "tax",
            "quantity": 1,
            "price": 1
        },
        {
            "name": "SHIPPING_NAME",
            "type": "shipping",
            "quantity": 1,
            "price": 1
        },
        {
            "name": "PRODUCT_NAME",
            "type": "product",
            "quantity": 1,
            "price": 1,
            "tangible": 1
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with description

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.
* products\[]\[description]: text... (string, required) - Description is displayed in the checkout page.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "dynamic": "1",
    "currency": "USD",
    "merchant": "MERCHANT_CODE",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "description": "product description"
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "dynamic": "1",
    "currency": "USD",
    "merchant": "MERCHANT_CODE",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "description": "product description"
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with recurrence, duration and renewal price

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.
* products\[]\[recurrence]\[length]: 1 (integer, required) - Set product recurring period.
* products\[]\[recurrence]\[unit]: day (string, required) - Set product recurring unit. Example: day
* products\[]\[duration]\[length]: 1 (integer, required) - Set the duration of the recurrence period.
* products\[]\[duration]\[unit]: day (string, required) - Set the duration of the recurrence unit. Example: day
* products\[]\[renewal-price]: 20 (integer, required) - Set the price that should be applied to the renewal order. This parameter is conditioned by two other parameters: duration and renewal-price.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "recurrence": {
                "length": 1,
                "unit": "day"
            },
            "duration": {
                "length": 1,
                "unit": "day"
            },
            "renewal-price": 20
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "recurrence": {
                "length": 1,
                "unit": "day"
            },
            "duration": {
                "length": 1,
                "unit": "day"
            },
            "renewal-price": 20
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```

***

### Dynamic product with item external reference

Signature parameter(s):

* dynamic: 1 (boolean, required) - Set TRUE or "1" for dynamic products.
* currency: USD (string, required) - Preselected billing currency is used to charge your customers.
* products\[]\[name]: PRODUCT\_NAME\_1 (string, required) - The name of the dynamic product.
* products\[]\[price]: 10 (integer, required) - The products prices value.
* products\[]\[reference]\[external]\[item]: ref-1 (string, required) - Set product identifier for your dynamic products. You can send multiple values separated by semicolon.

#### cURL

```bash
curl -X POST \
  https://secure.2checkout.com/checkout/api/encrypt/generate/signature \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg' \
  -d '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "reference": {
                "external": {
                    "item": "item_external_reference"
                }
            }
        }
    ]
}'
```

#### PHP

```php
$curl = curl_init();
$payload = '{
    "merchant": "MERCHANT_CODE",
    "dynamic": "1",
    "currency": "USD",
    "products": [
        {
            "name": "PRODUCT_NAME",
            "price": 10,
            "reference": {
                "external": {
                    "item": "item_external_reference"
                }
            }
        }
    ]
}';
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://secure.2checkout.com/checkout/api/encrypt/generate/signature",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'content-type: application/json',
        'merchant-token: eyJhbGciOiJIUz.............oXW6ykmEMx7XjGQPTMFg',
    ],
]);
$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response . PHP_EOL;
}
```

#### Result

```json
{"signature":"ffff1f2daef1.....................f771ac345efff"}
```


# Returning customers order flow (SSO in Cart)

## Overview

2Checkout supports a streamlined order flow for returning customers (SSO in Cart) using ConvertPlus and Inline Cart. When a vendor generates a signed checkout link that includes a customer identifier, 2Checkout automatically retrieves the customer's billing details and saved payment methods, allowing them to complete a purchase with minimal effort.

Optionally, the cart and customer details can also be **locked**, so the shopper cannot edit the cart, billing, or delivery information during an SSO session.

{% hint style="info" %}
It is compatible with new acquisition, manual renewal, trial and retry order flows, for catalogue products.
{% endhint %}

## Availability

The returning customers order flow(SSO in Cart) must be enabled on your merchant account before it can be used. Contact 2Checkout Support or your account manager to enable the setting.

## How it works

When a returning customer accesses a checkout link that meets all the conditions below (see Requirements), 2Checkout:

1. Retrieves and prefills the customer's billing details from their 2Checkout account.
2. Presents the saved payment methods as selectable options in the payment area, along with other available payment methods.
3. If the checkout link also includes the `lock` and `lock-customer` parameters, the cart, billing, and delivery details are presented as read-only instead of editable.

## Requirements

The returning customers order flow is activated when all of the following conditions are satisfied:

<table><thead><tr><th width="190" valign="top">Requirement</th><th valign="top">Details</th></tr></thead><tbody><tr><td valign="top">Feature enabled</td><td valign="top">The SSO in Cart setting is active on your merchant account.</td></tr><tr><td valign="top">Customer identifier</td><td valign="top">The buy-link includes either <code>customer-ref</code> (2Checkout customer reference) or <code>customer-ext-ref</code> (external customer reference).</td></tr><tr><td valign="top">Valid expiration</td><td valign="top">The buy-link includes an expiration parameter set to a UTC Unix timestamp in the future.</td></tr><tr><td valign="top">Valid signature</td><td valign="top">The buy-link is signed with a valid HMAC-SHA256 signature using your Buy Link Secret Word and includes all needed parameters.</td></tr></tbody></table>

## Checkout link setup

### Parameters

The following parameters are relevant to returning customer checkout links. Parameters marked as *Signed* must be included in the signature calculation.

<table><thead><tr><th width="164" valign="top">Parameter</th><th width="136" valign="top">Required</th><th width="99" valign="top">Signed</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>customer-ref</code></td><td valign="top">One of the two</td><td valign="top">Yes</td><td valign="top">The numerical 2Checkout customer reference ID.</td></tr><tr><td valign="top"><code>customer-ext-ref</code></td><td valign="top">One of the two</td><td valign="top">Yes</td><td valign="top">The external (vendor-side) customer reference.</td></tr><tr><td valign="top"><code>expiration</code></td><td valign="top">Yes</td><td valign="top">Yes</td><td valign="top">UTC Unix timestamp indicating when the buy-link expires.<br>e.g. <code>expiration=1893456001</code></td></tr><tr><td valign="top"><code>signature</code></td><td valign="top">Yes</td><td valign="top">—</td><td valign="top">HMAC-SHA256 hash generated from your signed parameters. See <a href="#signature-generation">Signature generation</a>.</td></tr><tr><td valign="top"><code>lock</code></td><td valign="top">No</td><td valign="top">Yes</td><td valign="top">When present, locks all cart content and thus makes it non-editable.</td></tr><tr><td valign="top"><code>lock-customer</code></td><td valign="top">No</td><td valign="top">Yes</td><td valign="top">When present, locks all customer, billing delivery and shopping information and takes the user directly to the Review step of the Checkout flow. Compatible with new acquisition orders.</td></tr></tbody></table>

{% hint style="info" %}
A Unix timestamp is just a count of seconds that have elapsed since a fixed reference point in time — 00:00:00 UTC on January 1, 1970 (called "the Unix epoch"). It's a single integer, with no timezone info attached to it at all - that's actually the point of it.
{% endhint %}

#### Signature generation

See also [ConvertPlus Buy-Link signature for catalog products](/shopping-carts/convertplus/convertplus-buy-link-signature-for-catalog-products).

1. Collect all parameters that require signing. The signature must include all parameters marked *Signed* above, plus any other buy-link parameters you are signing (such as `return-url`, `return-type`, `order-ext-ref`, `product parameters`, etc.).
2. Sort them alphabetically by parameter name.
3. Serialize each value by prefixing it with its character length.
4. Concatenate the serialized values without separators.
5. Hash the resulting string using HMAC-SHA256 with your Buy Link Secret Word.
6. Append the hash as the signature parameter to your buy-link URL.

#### Buy link with SSO in Cart example:

{% code overflow="wrap" %}

```
https://secure.2checkout.com/checkout/buy?merchant=MERCHANT_CODE&prod=PRODUCT_CODE_1&customer-ref=CUSTOMER_REFERENCE&expiration=1893456001&signature=GENERATED_SIGNATURE
```

{% endcode %}

#### How to test the link

Open the link and confirm:

* Billing details prefill from the matched customer.
* Saved, non-expired cards show up in the payment area, with the CVV field blank.
* Apple Pay / Google Pay / PayPal (if enabled) and other payments methods are still selectable.
* Placing an order with the prefilled card completes successfully.

### What shoppers see

{% stepper %}
{% step %}

#### Editable SSO in Cart use case

* Billing fields prefilled with shoppers' account information (name, email, phone, billing address), based on the customer reference. Shoppers can review and edit these details before placing the order.
* A dedicated **Card details** section on the right displaying the credit and debit cards associated with their 2Checkout account from previous transactions.

<div data-with-frame="true"><figure><img src="/files/RMbglxLKBGvZvjvaehIK" alt="Prefilled checkout with editable fields and saved cards"><figcaption><p align="center">Variant 1 — Editable checkout with pre-filled billing details and saved cards.<br>The Card details section shows saved cards with an empty Security code field.</p></figcaption></figure></div>
{% endstep %}

{% step %}

#### Non-editable checkout flow

If you want to guarantee that a pre-configured cart and customer record stay unchanged all the way through payment - regardless of how the shopper authenticated - combine `lock-customer` with the existing `lock` parameter alongside your SSO parameters (`customer-ref`/`customer-ext-ref`, `expiration`, `signature`).

* `lock` - for locking the cart content and
* `lock-customer` for locking the customer billing/delivery details. In this case, shoppers who land on the **Review** page need to enter only the CVV of the saved card and place the order.

<div data-with-frame="true"><figure><img src="/files/pNqlc8luSl00mGXaBLfg" alt=""><figcaption><p align="center">Variant 2 — Locked checkout with pre-filled billing details and saved cards.<br>The Card details section shows saved cards with an empty Security code field.</p></figcaption></figure></div>
{% endstep %}
{% endstepper %}

### Saved payment methods behavior

* Only valid, non-expired cards are displayed.
* CVV required: The Security code (CVV) field is empty for all saved cards. Shoppers must enter their CVV to confirm their intention to use the selected card. This is required because the transaction is treated as a Customer Initiated Transaction (CIT).
* If the shopper does not enter a CVV, they cannot proceed with the saved card.
* Shoppers can also choose to pay with a new card or use an available alternative payment method (e.g. Apple Pay, Google Pay, PayPal Express) instead of a saved card.

**What is not prefilled:**

* B2B US 2Checkout tax-exempt ID
* Shipping details (for PSP accounts) - merchants can still use shipping parameters to pre-populate these fields.

**Fallback:** If no valid saved cards are found for the customer, or the customer reference does not match any account, the saved cards section is not displayed. The checkout loads normally with a standard payment form.

## Supported templates

<table><thead><tr><th valign="top">Cart type</th><th valign="top">Supported templates</th></tr></thead><tbody><tr><td valign="top">ConvertPlus</td><td valign="top">All templates</td></tr><tr><td valign="top">Inline Cart</td><td valign="top">All templates</td></tr></tbody></table>

## Troubleshooting quick reference

| What you see                                   | Likely cause                                                                                                                                                |
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Standard, non-prefilled checkout               | Merchant setting disabled, missing/invalid signature, expired link, or missing (valid, active)customer reference                                            |
| Empty cart                                     | `customer-ref` / `customer-ext-ref` doesn't match any customer on the account                                                                               |
| Checkout loads but no saved card shown         | Customer exists but has no valid (non-expired) card on file — billing details may still prefill                                                             |
| Pre-filled checkout instead of the review page | Not all mandatory billing and/or delivery details are available on the customer saved in the 2Checkout system or the `lock-customer` parameter not applied. |


# InLine


# InLine Checkout Guide

## Overview

The InLine Checkout is a simple and straightforward interface that follows the latest conversion optimization best practices, removing any distracting elements during your customers' ordering process.

2Checkout offers two inline checkout flows in the Merchant Control Panel: **a One-Step** and **a Multi-Step InLine cart**, depending on the shopping experience you want your customers to have in this iframe.

* **One-Step InLine** offers customers a seamless shopping experience by enabling them to select a payment method, review the entire order, and place it in one step.
* **Multi-Step InLine** offers a different checkout experience, in multiple steps, by allowing your customers to review their billing, shipping, and payment information before placing the order.

{% embed url="<https://www.youtube.com/watch?v=QYjRG-kjxJU&embeds_referring_euri=https%3A%2F%2Fverifone.cloud%2F>" %}

## Availability

InLine Checkout is available for accounts that have [ConvertPlus](/shopping-carts) enabled on their account. Contact the [2Checkout Support Team](mailto:supportplus@2checkout.com) for activation.

## Requirements

2Checkout merchants who already have the new InLine shopping cart enabled can generate buy links for the optimized purchase flow from the 2Checkout Control Panel.

## Generate buy-links for the InLine cart

Follow the steps below to generate buy-links for your products using the InLine cart.

1. Log in to the [2Checkout Control Panel](https://secure.2checkout.com/cpanel/).
2. Go to **Setup** -> [Generate links](https://secure.2checkout.com/cpanel/integration.php).
3. Click the **Inline Checkout** tab in the *Checkout Links* area.
4. Select the products you want to generate checkout links for. In case you are using dynamic products, read the instructions in [this](/orders/orders/orders-with-dynamic-product-information#orders-with-dynamic-products-via-convertplus) article.
5. Choose the product quantity.
6. Click on **Generate link**.
7. Copy the generated link and add it to your website.

### Test buy links

You can test the link before adding it to your website in multiple ways:

* Copy the link and paste it into your browser’s address bar.
* Click on the **Test link** to open it in a new browser tab.
* Scan the QR code with a smartphone app to view the checkout page on a mobile device.

## Supported payment methods

InLine Checkout supports the following payment methods:

* Credit/debit card
  * Visa
  * Visa Electron
  * MasterCard
  * Maestro
  * American Express
  * JCB
  * Discover
  * UnionPay
* PayPal
* PayPal Express
* Bank/Wire transfers
* SEPA Direct Debit
* iDEAL
* Boleto/Pix
* Credit cards with installments
* Apple Pay
* Alipay
* Google Pay

The InLine Checkout is optimized to display popular payment methods based on shopper's location. This makes it easier for customers to complete a purchase using their favorite payment method, which will result in a higher conversion rate for you.

## Purchase flow

The checkout experience is ensured by a one-page checkout flow that enables shoppers to quickly finalize their purchases without spending too much time in the shopping cart.

1. Shoppers add the products to their cart.
2. Once they reach the shopping cart, they can select product options/plans and add a coupon code (if applicable).
3. They select the payment method.
   * If they choose to pay by card, they enter the billing and card information and finish the payment.
   * If they choose to pay through PayPal, 2Checkout automatically takes them to PayPal’s login page, where they have to agree and continue with the payment. Afterwards, the shoppers will be redirected to the 2Checkout shopping cart to complete the purchase.
   * If they choose to pay through bank/wire transfer, 2Checkout provides them with the required payment details so they can complete the transfer.
   * If they choose to pay through iDEAL, 2Checkout automatically takes them to the iDEAL page, and they can complete the payment there.
   * If they choose to pay through Apple Pay, an Apple Pay payment sheet opens on top of the checkout page on their Apple device.
   * If they choose to pay through Alipay, they enter the billing information, and then 2Checkout automatically takes them to the Alipay page where they can complete the payment.
4. 2Checkout redirects them to the *Finish* page.

## InLine Checkout supported features

Given the continuously developing nature of this project, InLine Checkout currently supports a limited feature subset of the current shopping cart.

Refer to the feature list below to confirm the availability of the features that you are interested in.

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Feature</th><th>Description / Supported</th></tr></thead><tbody><tr><td>Billing currencies</td><td>All the billing currencies currently enabled for your 2Checkout account.</td></tr><tr><td>Payment methods</td><td><p>Credit card-based payment methods, PayPal, Apple Pay, Alipay, Google Pay, bank/wire transfer, iDEAL, SEPA Direct Debit, Boleto/Pix for Brazil.</p><p>Credit cards with installments via PagBrasil are supported for Brazil.  </p><p>Credit cards with installments via Iyzico are supported for Turkey (<strong>only</strong> for MoR merchants).</p></td></tr><tr><td>Promotions</td><td><p>Supports:</p><ul><li><p>Regular promotions</p><ul><li>Coupon-based</li><li>Automatically applied</li></ul></li><li>Special Price Promotions</li></ul></td></tr><tr><td>Volume discounts</td><td>Supported</td></tr><tr><td>Available cart languages</td><td>29 languages</td></tr><tr><td>Compact shopping card fields</td><td>Supported</td></tr><tr><td>Checkout fields</td><td>Supported via <a href="/pages/2f3fdd211965d5a06ac8300e7316f6ec4e2c8494">Add checkout fields</a></td></tr><tr><td>Auto-advance </td><td>Supported</td></tr><tr><td>Geolocation</td><td>Supported</td></tr><tr><td>Manual renewal</td><td>Supported</td></tr><tr><td>Automatic renewal</td><td>Supported</td></tr><tr><td>Tax collection and VAT Information Exchange System</td><td>Supported</td></tr><tr><td>US B2B Tax Exemption</td><td>Supported</td></tr><tr><td>Pricing options</td><td>Supported</td></tr><tr><td>On-the-fly pricing for catalog products</td><td>Supported</td></tr><tr><td>Cart Analytics</td><td>Supported via <a href="/spaces/dnV9OOb1DpgpbHZ17v2Y">Google Analytics</a> and <a href="/spaces/dnV9OOb1DpgpbHZ17v2Y">Google Tag Manager</a></td></tr><tr><td>Cross-selling campaigns in Checkout page</td><td>Supported</td></tr><tr><td>Cross-selling campaigns in Thank you page</td><td>Not supported</td></tr><tr><td>Affiliate network (merchant website links)</td><td>Supported</td></tr><tr><td>Affiliate network (product links)</td><td>Not supported</td></tr><tr><td>Single Sign-On</td><td>Not supported</td></tr><tr><td>Upgrades</td><td>Supported</td></tr><tr><td>Trial products</td><td>Supported</td></tr><tr><td>Bundles</td><td>Not supported</td></tr><tr><td>Up-selling campaigns</td><td>Not supported</td></tr><tr><td>Download Insurance Service</td><td>Not supported</td></tr><tr><td>Gift orders</td><td>Not supported</td></tr><tr><td>Custom cart variables</td><td>Not supported</td></tr></tbody></table>

## How to integrate InLine Checkout

* Find out what [Inline Checkout](/shopping-carts/inline/inline-checkout-ordering-engine) is, its availability, and how to integrate it into your checkout flow.
* How to [integrate Inline Checkout](/shopping-carts/inline/inline-checkout-ordering-engine) into your web store.
* After integrating the Inline Checkout with your web store, you are ready to [simplify the checkout experience](/shopping-carts/inline/inline-checkout-methods-and-parameters) and enable your customers to place orders only by confirming their payment information.
* After you integrate the Inline Checkout JavaScript code in your website application, you get access to the [library that allows you to add products, control billing and shipping details and start the checkout process](/shopping-carts/inline/inline-checkout-methods-and-parameters).
* Learn how to [subscribe/unsubscribe to Inline shopping cart events](/shopping-carts/inline/use-cases/subscribe-unsubscribe-to-shopping-cart-events-for-inline-checkout).
* How to [add a catalog product to the Inline Checkout](/shopping-carts/inline/use-cases/add-a-catalog-product-to-inline-cart).
* How to [add a dynamic product to the Inline Checkout](/shopping-carts/inline/use-cases/add-a-dynamic-product-to-the-inline-cart).
* How to [set a custom price for catalog products in Inline Checkout](/shopping-carts/inline/use-cases/set-the-pricing-option-for-catalog-products).
* How to [set the billing details for the Inline Checkout](/shopping-carts/inline/use-cases/set-billing-details-for-the-inline-checkout).
* How to [set cart lock in the Inline Cart](/shopping-carts/inline/use-cases/set-cart-lock-in-the-inline-cart).
* How to [set a pricing option for catalog products](/shopping-carts/inline/use-cases/set-the-pricing-option-for-catalog-products).
* How to [set the return method in Inline Checkout](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_return_method_in_InLine_Cart).
* How to [set test orders in Inline Cart](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_test_orders_in_InLine_Cart).
* How to [set the shopping cart currency in the Inline Checkout](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_the_cart_currency_for_InLine_Cart).
* How to [set the shopping cart language in the Inline Cart](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set-the-cart-language-for-InLine-Cart).
* How to [set the customer reference in the Inline Checkout](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_the_customer_reference_in_the_InLine_Cart).
* How to [set the item external reference in the Inline Checkout](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_the_item_external_reference_in_the_InLine_Cart).
* How to [set the order external reference in the Inline Cart](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_the_order_external_reference_in_the_InLine_Cart).
* How to [set sale source in the Inline Cart](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_sale_source_in_the_InLine_Cart).
* How to [set a pricing option for dynamic products in Inline Cart.](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_pricing_option_for_dynamic_products)
* How to [set shipping details in Inline Cart](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Set_the_shipping_details_in_the_InLine_Checkout).
* How to [test adding a product coupon to the Inline Checkout](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Test_adding_a_product_coupon_to_the_InLine_Checkout).
* How to [test adding product coupons to the Inline Checkout](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Test_adding_product_coupons_to_the_InLine_Checkout).
* How to [add a digital catalog product with regular auto-applied promotion and manually applied order promotion](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Add-a-digital-catalog-product-with-regular-auto-applied-promotion-and-manually-applied-order-promotion).
* How to [add a digital catalog product with auto-applied order promotion](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Add-a-digital-catalog-product-with-auto-applied-order-promotion).
* How to [add a digital dynamic product with dynamic coupon](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Add-a-digital-dynamic-product-with-a-dynamic-coupon).
* How to [add a physical dynamic product with dynamic shipping, dynamic taxes, and dynamic coupon](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/InLine-Checkout-Guide/Add-a-physical-dynamic-product-with-dynamic-shipping-dynamic-taxes-and-dynamic-coupon).


# InLine Checkout ordering engine

## Overview

**InLine Checkout** acts as an iframe that opens on your website, enabling you to receive payments without redirecting your customers to a third party checkout.

Integrate InLine Checkout and:

* Offer your customers the possibility of purchasing using mobile devices with a **responsive cart design**, which renders well on a variety of devices and screen sizes.
* **Improve your localization strategy**, with a cart translated into 29 languages, and +130 transactional currencies for displaying the price.
* **Minimize the customer effort** during the purchase by passing the collected billing/shipping information to InLine Checkout.

InLine Checkout integrates ideally with shopping cart applications that collect customer billing and shipping information, allowing you to pass that information over to the cart and minimize customer's efforts during the payment process.

{% hint style="info" icon="lightbulb" %}

#### Our InLine Checkout enables you to offer a seamless checkout experience for your clients. Download this solution brief to learn how!

<a href="https://www.2checkout.com/lp/2checkout_inline_cart.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

Moreover, in order to anticipate the particular needs of each of your customers, 2Checkout makes available in merchant cPanel two inline checkout flows that you may choose from, **a One-Step** and **a Multi-Step InLine cart**, depending on the shopping experience you want your customers to benefit from via this iframe.

<div data-with-frame="true"><img src="/files/e8ac9299ff60b4d81e9b634bc4d6cc6776902349" alt=""></div>

**One-Step InLine** is the default checkout flow comprising all the billing, delivery and payment details in one step. This way, your customers can easily review all their purchase-related details and place the order with one click.

<div data-with-frame="true"><img src="/files/3aeef176b116ec6ec00189ae17b4d3f97aa0d682" alt=""></div>

However, you can easily switch to a **Multi-Step InLine Checkout flow** if some of your customers would rather stick to a step-by-step payment process and fill-in their order details on separate cart pages.

<div data-with-frame="true"><img src="/files/5cf54a39afe44329e843060c58b86a20be47f653" alt=""></div>

## Availability

InLine Checkout is available for accounts that have [ConvertPlus](/shopping-carts) enabled on their account. Contact 2Checkout for activation.

## Dynamic product information

InLine Checkout enables you to receive payments without having products defined in your 2Checkout Control Panel. Send the product information dynamically to InLine Checkout, and receive payments without the need for a product catalog in 2Checkout.

## How to integrate InLine Checkout

To integrate InLine Checkout with your shopping cart, follow the steps below.

{% stepper %}
{% step %}

#### Generate and insert the JavaScript code

* Go to *Setup →* [*Generate links area*](https://secure.2checkout.com/cpanel/integration.php)
* Click the **InLine** **Checkout** tab.
* Copy the **JavaScript code snippet** generated by our platform and paste it into your eCommerce website (you can paste it either inside the tag or inside the page body right before the closing tag of your HTML page).

You can choose one of the scripts below according to your preferred cart-flow length.

**One-Step InLine**:

```javascript
<script>

    (function (document, src, libName, config) {

        var script             = document.createElement('script');

        script.src             = src;

        script.async           = true;

        var firstScriptElement = document.getElementsByTagName('script')[0];

        script.onload          = function () {

            for (var namespace in config) {

                if (config.hasOwnProperty(namespace)) {

                    window[libName].setup.setConfig(namespace, config[namespace]);

                }

            }

            window[libName].register();

        };

        firstScriptElement.parentNode.insertBefore(script, firstScriptElement);

    })(document, 'https://secure.2checkout.com/checkout/client/twoCoInlineCart.js', 'TwoCoInlineCart',{"app":{"merchant":"XXXXXX","iframeLoad":"checkout"},"cart":{"host":"https:\/\/secure.2checkout.com","customization":"inline-one-step"}});

</script>
```

**Multi-Step InLine**:

{% code title="multi-step-inline.js" %}

```javascript
<script>

    (function (document, src, libName, config) {

        var script             = document.createElement('script');

        script.src             = src;

        script.async           = true;

        var firstScriptElement = document.getElementsByTagName('script')[0];

        script.onload          = function () {

            for (var namespace in config) {

                if (config.hasOwnProperty(namespace)) {

                    window[libName].setup.setConfig(namespace, config[namespace]);

                }

            }

            window[libName].register();

        };

        firstScriptElement.parentNode.insertBefore(script, firstScriptElement);

    })(document, 'https://secure.2checkout.com/checkout/client/twoCoInlineCart.js', 'TwoCoInlineCart',{"app":{"merchant":"XXXXXX","iframeLoad":"checkout"},"cart":{"host":"https:\/\/secure.2checkout.com","customization":"inline"}});

</script>
```

{% endcode %}

Your merchant code (you can find it in your merchant Control Panel, Dashboard → Integrations → Webhooks and API → API section) is automatically added by the system when you generate the JavaScript code library shown above, in the XXXXXXX string.

After you integrate the InLine Checkout JavaScript code in your HTML page, you get access to the library that allows you to add products, control billing and shipping details, and start the checkout process (see the JavaScript API reference [here](/shopping-carts/inline/inline-checkout-methods-and-parameters)).
{% endstep %}

{% step %}

#### Add a buy button on your website

* Navigate to the merchant Control Panel → Setup → Generate links
* Click on the **InLine** **Checkout** tab
* Select a product from the drop-down list in the 'Select one or more products' section
* Provide the desired quantity in the “Quantity settings” section
* Click on the **Generate code** button at the bottom of the page
* Copy the link and paste it into your HTML page
  {% endstep %}

{% step %}

#### Start the Checkout process

Starting the checkout process will display the payment overlay and the inline cart on your website.
{% endstep %}
{% endstepper %}

### Sample request

The below request represents a basic use of InLine Checkout, that allows your users to finalize purchases directly from your website via a secure payment form.

```java
TwoCoInlineCart.setup.setMerchant('merchantCode'); // your Merchant code

TwoCoInlineCart.products.add({
    code: 'the-2co-product-code',
    quantity: 3
}); // add products to cart

TwoCoInlineCart.cart.checkout(); // start checkout process
```


# InLine Checkout methods and parameters

## Overview

Minimize your customers' effort by collecting their order/billing information and passing it to InLine Checkout. Simplify the checkout experience and enable your customers to place orders only by confirming their payment information.

{% hint style="info" icon="lightbulb" %}

#### Related links

Our InLine Checkout enables you to offer a seamless checkout experience for your clients. Download this solution brief to learn how!

<a href="https://www.2checkout.com/lp/2checkout_inline_cart.html" class="button primary" data-icon="book-open-lines">Read more</a>
{% endhint %}

## Advanced InLine Checkout experience

InLine Checkout offers you advanced control over the ordering process, for minimizing the customer's effort during the purchase. You can send the billing and delivery information directly to the cart if they are collected on your website by a shopping cart application. InLine Checkout enables you to:

* Place test orders
* Set coupons codes in cart
* Set the cart language
* Set the cart currency
* Set a redirect URL after a finalized purchase

We recently improved the perceived loading time for the InLine checkout ordering engine by pre-loading the cart iframe. Faster loading time for the InLine cart means an enhanced shopping experience and helps you to increase conversion rates with no other effort on your side. See more details below in the Cart methods table.

## Send information to InLine Checkout

After you integrate the InLine Checkout JavaScript code in your website application, you get access to the library that allows you to add products, control billing and shipping details, and start the checkout process. Follow the instructions below to control the information displayed by InLine Checkout.

### Handling products

Products are handled by the products' service. This service allows you to retrieve the list of added products, add products to cart, remove individual products, or remove all the products from the cart.

Use the methods and product attributes listed below to add/remove products from the cart.

#### Product attributes

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="144">Attributes</th><th>Type / Description</th></tr></thead><tbody><tr><td><code>code</code></td><td><p><strong>String</strong></p><p>Product code assigned by you when creating the product. Required for catalog products.</p></td></tr><tr><td><code>type</code></td><td><p><strong>String</strong></p><p>Product type. Required only for dynamic products. Possible values: [PRODUCT, SHIPPING, TAX]. Default value is PRODUCT.</p></td></tr><tr><td><code>name</code></td><td><p><strong>String</strong></p><p>Product name. Required for dynamic products.</p></td></tr><tr><td><code>price</code></td><td><p><strong>String - for dynamic products</strong></p><p>Product price. It is required for dynamic products. </p><p></p><p><strong>Object - for catalog products with on-the-fly pricing</strong></p><p>Product price; required for catalog products with on-the-fly pricing and includes value and currency.</p></td></tr><tr><td><code>tangible</code></td><td><p><strong>String</strong></p><p>Product tangible flag. Required only for dynamic products. Default value is FALSE.</p></td></tr><tr><td><code>quantity</code></td><td><p><strong>String</strong></p><p>Product quantity. Default value is 1. Required for catalog products with on-the-fly pricing.</p></td></tr><tr><td><code>options</code></td><td><p><strong>Array</strong></p><p>The product price options. It is supported for both catalog and dynamic products. Required for catalog products with on-the-fly pricing.</p><p>Product price options structure for dynamic products:</p><ul><li><strong>Name</strong> (String)- The price option name</li><li><strong>Value</strong> (String, Number, Array of strings or numbers) - The price option value</li><li><strong>Surcharge</strong> (string) - The price option surcharge - applicable only for dynamic products</li></ul><p>Product price options structure for catalog products:</p><ul><li><strong>Name</strong> (String) – The unique code of the pricing OPTION GROUP</li><li><strong>Value</strong> (String) – The unique code of the pricing OPTION</li></ul></td></tr><tr><td><code>recurrence</code></td><td><p><strong>Object</strong></p><p>Required for dynamic products.</p><p>Possible values:</p><ul><li>DAY</li><li>WEEK</li><li>MONTH</li><li>YEAR</li><li>FOREVER (available only for <strong>duration</strong>)</li></ul><p>This parameter is conditioned by two other parameters: duration and <code>renewalPrice</code>.</p></td></tr><tr><td><code>duration</code></td><td><p><strong>Object</strong></p><p>Sets the duration of the recurrence. Required for dynamic products.</p></td></tr><tr><td><code>renewalPrice</code></td><td><p><strong>Integer</strong></p><p>Sets the price to be applied to the renewal order. Required for dynamic products.</p></td></tr></tbody></table>

#### Product methods

<table><thead><tr><th width="129.00006103515625">Methods</th><th>Description</th></tr></thead><tbody><tr><td><strong>add</strong></td><td>Adds a single product to the list. Use the above list of parameters to add a product to cart.</td></tr><tr><td><strong>remove</strong></td><td>Removes a product from the list.</td></tr><tr><td><strong>addMany</strong></td><td>Adds an array of product objects to the main list.</td></tr><tr><td><strong>removeAll</strong></td><td>Removes all products from the list.</td></tr><tr><td><strong>getAll</strong></td><td>Retrieves the products list.</td></tr></tbody></table>

### Handling billing details

Billing details are handled by the **billing service**. Each billing information is controlled by a setter method.

Use the attributes and methods listed below to control the billing information displayed in the cart. Customers are able to fill in their billing information in the overlay provided by InLine Checkout. In case your shopping cart application collects customer's billing information, use the attributes and methods listed below to pass that information over to the cart.

#### Billing details attributes

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="147.00006103515625">Attributes</th><th>Type / Description</th></tr></thead><tbody><tr><td><code>name</code></td><td><p><strong>String</strong></p><p>Customer billing name. Example: "John Doe".</p></td></tr><tr><td><code>email</code></td><td><p><strong>String</strong></p><p>Customer billing email. Example: "john.doe@email.com".</p></td></tr><tr><td><code>phone</code></td><td><p><strong>String</strong></p><p>Customer billing phone number. Example: "403940281923".</p></td></tr><tr><td><code>country</code></td><td><p><strong>String</strong> </p><p>Customer billing country. Example: "US".</p></td></tr><tr><td><code>city</code></td><td><p><strong>String</strong> </p><p>Customer billing city. Example: "Los Angeles".</p></td></tr><tr><td><code>state</code></td><td><p><strong>String</strong> </p><p>Customer billing state. Example: "California".</p></td></tr><tr><td><code>zip</code></td><td><p><strong>String</strong> </p><p>Customer billing zip code. Example: "90078".</p></td></tr><tr><td><code>address</code></td><td><p><strong>String</strong> </p><p>Customer billing address. Example: "1093 Rodeo Drive".</p></td></tr><tr><td><code>address2</code></td><td><p><strong>String</strong> </p><p>Customer billing additional address information. "293 Postal Box".</p></td></tr><tr><td><code>company-name</code></td><td><p><strong>String</strong></p><p>CompanyName</p><p>When sending the Company name the Company checkout flow will be triggered. Otherwise, the default checkout flow for InLine cart is the individual flow.</p></td></tr><tr><td><code>fiscal-code</code></td><td><p><strong>String</strong></p><p>fiscalCode</p><p>When sending the Fiscal code, the Company checkout flow will be triggered only if also another company flow relevant parameter will be also sent (Company name and/or Tax office). Otherwise, the default checkout flow for InLine cart is the individual flow.</p></td></tr><tr><td><code>tax-office</code></td><td><p><strong>String</strong> </p><p>taxOffice</p><p>When sending the Tax office the Company checkout flow will be triggered. Otherwise, the default checkout flow for InLine cart is the individual flow.</p></td></tr></tbody></table>

#### Billing details methods

<table><thead><tr><th width="333">Methods</th><th>Description</th></tr></thead><tbody><tr><td><strong>setData</strong></td><td>Sets the entire billing data.</td></tr><tr><td><strong>setName</strong></td><td>Sets the billing name.</td></tr><tr><td><strong>setEmail</strong></td><td>Sets the billing email.</td></tr><tr><td><strong>setPhone</strong></td><td>Sets the billing phone.</td></tr><tr><td><strong>setCountry</strong></td><td>Sets the billing country.</td></tr><tr><td><strong>setCity</strong></td><td>Sets the billing city.</td></tr><tr><td><strong>setState</strong></td><td>Sets the billing state.</td></tr><tr><td><strong>setZip</strong></td><td>Sets the billing zip code.</td></tr><tr><td><strong>setAddress</strong></td><td>Sets the billing address.</td></tr><tr><td><strong>setAddress2</strong></td><td>Sets additional billing address information.</td></tr><tr><td><strong>reset</strong></td><td>Resets the billing data.</td></tr><tr><td><strong>setCompanyName</strong></td><td>Sets the billing Company name.</td></tr><tr><td><strong>setFiscalCode</strong></td><td>Sets the billing Fiscal code.</td></tr><tr><td><strong>setTaxCode</strong></td><td>Sets the billing Tax code.</td></tr></tbody></table>

### Handling shipping details

Shipping details are handled by the **shipping service**. Each shipping information is controlled by a setter method.

Use the attributes and methods listed below to control the shipping information displayed in the cart. In case you use a shopping cart application that collects the shipping information, use the attributes and methods listed below to pass that information over to the cart.

#### Shipping details attributes

<table><thead><tr><th width="170">Attributes</th><th>Type / Description</th></tr></thead><tbody><tr><td><code>name</code></td><td><p><strong>String</strong> </p><p>Customer shipping name. Example: "John Doe".</p></td></tr><tr><td><code>email</code></td><td><p><strong>String</strong></p><p>Customer shipping email. Example: "john.doe@email.com".</p></td></tr><tr><td><code>phone</code></td><td><p><strong>String</strong></p><p>Customer shipping phone number. Example: "403940281923".</p></td></tr><tr><td><code>country</code></td><td><p><strong>String</strong></p><p>Customer shipping country. Example: "United States of America".</p></td></tr><tr><td><code>city</code></td><td><p><strong>String</strong></p><p>Customer shipping city. Example: "Los Angeles".</p></td></tr><tr><td><code>state</code></td><td><p><strong>String</strong></p><p>Customer shipping state. Example: "California".</p></td></tr><tr><td><code>zip</code></td><td><p><strong>String</strong></p><p>Customer shipping zip code. Example: "90078".</p></td></tr><tr><td><code>address</code></td><td><p><strong>String</strong></p><p>Customer shipping address. Example: "1093 Rodeo Drive".</p></td></tr><tr><td><code>address2</code></td><td><p><strong>String</strong></p><p>Customer shipping additional address information. "293 Postal Box".</p></td></tr></tbody></table>

#### Shipping details methods

<table><thead><tr><th width="313">Methods</th><th>Description</th></tr></thead><tbody><tr><td><strong>setData</strong></td><td>Sets the entire shipping data.</td></tr><tr><td><strong>setName</strong></td><td>Sets the shipping name.</td></tr><tr><td><strong>setEmail</strong></td><td>Sets the shipping email.</td></tr><tr><td><strong>setPhone</strong></td><td>Sets the shipping phone.</td></tr><tr><td><strong>setCountry</strong></td><td>Sets the shipping country.</td></tr><tr><td><strong>setCity</strong></td><td>Sets the shipping city.</td></tr><tr><td><strong>setState</strong></td><td>Sets the shipping state.</td></tr><tr><td><strong>setZip</strong></td><td>Sets the shipping zip code.</td></tr><tr><td><strong>setAddress</strong></td><td>Sets the shipping address.</td></tr><tr><td><strong>setAddress2</strong></td><td>Sets additional shipping address information.</td></tr><tr><td><strong>reset</strong></td><td>Resets the shipping data.</td></tr></tbody></table>

### Handle the Checkout process

Control the cart behavior by using the **cart service**. Use the **checkout** method to start the **InLine Checkout** experience.

#### Cart attributes

<table><thead><tr><th width="248">Attributes</th><th>Type / Description</th></tr></thead><tbody><tr><td><code>source</code></td><td><p><strong>String</strong></p><p>Sale originating source. Example: "YouTube Channel".</p></td></tr><tr><td><code>language</code></td><td><p><strong>String</strong></p><p>Cart language code. Example: "FR".</p></td></tr><tr><td><code>currency</code></td><td><p><strong>String</strong></p><p>Cart currency code. Example: "USD".</p></td></tr><tr><td><code>test</code></td><td><p><strong>Boolean</strong></p><p>Test order flag. Possible values:</p><ul><li><strong>true</strong> for test orders</li><li><strong>false</strong> for real orders</li></ul></td></tr><tr><td><code>setReturnMethod</code></td><td><p><strong>String</strong></p><p>Sets the <code>ReturnMethod</code> object. URL to which customer is redirected after a successful payment. Example: https://www.merchant-website.com/.</p></td></tr><tr><td><code>coupon</code></td><td><p><strong>String</strong></p><p>Order promotion coupon. Example: "50%off".</p></td></tr><tr><td><code>token</code></td><td><p><strong>String</strong></p><p>Token for the authorization code.</p></td></tr><tr><td><code>expiration</code></td><td><p><strong>String</strong> </p><p>The expiration date for the authorization.</p></td></tr><tr><td><code>orderExternalRef</code></td><td><p><strong>String</strong></p><p>The unique identifier of an order placed in the 2Checkout system, mirroring the reference you're using to manage order data in your system.</p></td></tr><tr><td><code>CustomerReference</code></td><td><p><strong>Integer</strong></p><p>The 2Checkout system generates default customer numerical (integer) IDs automatically for all orders containing products that feature subscriptions. Can be used for new acquisitions aggregating new subscriptions under an existing Customer account.</p></td></tr><tr><td><code>ExternalCustomerReference</code></td><td><p><strong>String</strong></p><p>The external customer reference.</p></td></tr><tr><td><code>autoAdvance</code></td><td><p><strong>Boolean</strong></p><p>Auto-advanced flag. </p><p>Possible values:</p><ul><li><strong>true</strong> for auto-advance</li><li><strong>false</strong> for cart flow without auto-advance</li></ul></td></tr></tbody></table>

#### Cart methods

<table><thead><tr><th width="277">Methods</th><th>Description</th></tr></thead><tbody><tr><td><strong>register*</strong></td><td><p>Makes the products, billing, shipping, cart and formParser services available. </p><p>These services are unavailable unless this method is called.</p></td></tr><tr><td><strong>checkout</strong></td><td>Starts the cart service which displays the overlay payment form.</td></tr><tr><td><strong>addCoupon</strong></td><td>Adds a coupon to the coupons list.</td></tr><tr><td><strong>addCoupons</strong></td><td>Adds coupons in the cart from a list array.</td></tr><tr><td><strong>removeCoupon</strong></td><td>Removes a coupon from the coupons list.</td></tr><tr><td><strong>removeCoupons</strong></td><td>Clears all coupons from the cart instance.</td></tr><tr><td><strong>setSource</strong></td><td>Sets the order source.</td></tr><tr><td><strong>setCurrency</strong></td><td>Sets the currency on the cart instance.</td></tr><tr><td><strong>setLanguage</strong></td><td>Sets the language code for the order.</td></tr><tr><td><strong>setReturnMethod</strong></td><td><p>Sets the ReturnMethod object by calling TwoCoInlineCart.cart.setReturnMethod({url, type}). </p><p>URL to which customer is redirected after a successful payment. Example: <a href="https://www.merchant-website.com/">https://www.merchant-website.com</a>.</p></td></tr><tr><td><strong>setTest</strong></td><td>Send <strong>true</strong> for placing a test order.</td></tr><tr><td><strong>setLoaderState</strong></td><td>Handles the overlay window visibility.</td></tr><tr><td><strong>setIframeState</strong></td><td>Handles the loader visibility.</td></tr><tr><td><strong>reloadCart</strong></td><td>Reloads the cart instance.</td></tr><tr><td><strong>setOrderExternalRef</strong></td><td>Sets the order external reference.</td></tr><tr><td><strong>setCustomerReference</strong></td><td>Sets 2Checkout customer reference.</td></tr><tr><td><strong>setExternalCustomerReference</strong></td><td>Sets external customer reference.</td></tr><tr><td><strong>setCartLockedFlag</strong></td><td><p><strong>Boolean</strong></p><p>Lock cart flag. Possible values:</p><ul><li><strong>true</strong> </li><li><strong>false</strong></li></ul></td></tr><tr><td><strong>setIframeLoad</strong></td><td>One string parameter: 'immediate' or 'delayed'. Additionally, the InLine cart can also be set by using TwoCoInlineCart',{"app":{"merchant":"MERCHANT_CODE", "iframeLoad": "immediate"} instead of TwoCoInlineCart.setup.setIframeLoad.</td></tr><tr><td><strong>setIframeLoadDelay</strong></td><td>One number parameter; sets the time in milliseconds. Modify the pre-loading time of the cart iframe by adding a delay using the TwoCoInlineCart.setup.setIframeLoadDelay method.</td></tr><tr><td><strong>setReset</strong></td><td><p><strong>Boolean</strong></p><p>Erases all previous cart sessions from the customer's browser upon opening a new cart to avoid overlapping of the buy-link parameters. Possible values:</p><ul><li><strong>true</strong> </li><li><strong>false</strong> </li></ul></td></tr><tr><td><strong>cart.setAutoAdvance</strong></td><td>Sets the auto-advanced cart behavior. If all mandatory checkout parameters are prefilled, the shopper is advanced to the payment details page.</td></tr><tr><td><strong>addAdditionalField</strong></td><td>Sets an additional field for your account.</td></tr></tbody></table>

Retrieve cart attributes from InLine Checkout by using get methods: **getTest, getLanguage, getCurrency, getSource, getCoupons, getSuccessURL, getCustomerReference, getExternalCustomerReference, getCartLockedFlag.**

**\***&#x57;hen inserting the JavaScript code snippet from your [Control Panel](https://secure.2checkout.com/cpanel/integration.php?flow=InlineCart) into your e-commerce website, you will get access to the library that allows you to add products, control billing and shipping details, and start the checkout process, without having to call the register() method.

## Subscribe to shopping cart events

To subscribe to shopping cart events you need to call the events service subscribe method with the event name as the first argument and a callback function as the second argument.

1. 'cart:opened' - triggers when the shopping cart is opened.
2. 'cart:closed' - triggers when the shopping cart is closed.
3. 'payment:finalized' - triggers when the payment has finalized.
4. 'fulfillment:finalized' - triggers when the fulfillment is completed.

```javascript
TwoCoInLineCart.events.subscribe('cart:opened', function () {
    console.log('cart:opened triggered');
});
```

## Samples

### Sample request for catalog products

```java
TwoCoInlineCart.setup.setMerchant('merchantCode'); // your Merchant code
TwoCoInlineCart.register();

TwoCoInlineCart.billing.setCountry('US'); // customer billing country
TwoCoInlineCart.billing.setName('John Doe'); // customer billing Name
TwoCoInlineCart.billing.setEmail('john.doe@email.com'); // customer email address
TwoCoInlineCart.billing.setCompanyName('<company name>')
TwoCoInlineCart.billing.setFiscalCode('<fiscal code>')
TwoCoInlineCart.billing.setTaxOffice('<tax office>')
TwoCoInlineCart.cart.setReset(true); // erase previous cart sessions

TwoCoInlineCart.shipping.setName('Jane Doe'); // customer Delivery name
TwoCoInlineCart.shipping.setEmail('jane.doe@email.com'); // customer Delivery email

TwoCoInlineCart.products.add({
    code: 'the-2co-product-code',
    quantity: 3
    options: [{
       name: 'color',
       value: 'red'
   }]
});

TwoCoInlineCart.products.addMany([
    {
        type: 'PRODUCT',
        name: 'product 1',
        price: 10,
        tangible: true,
        quantity: 1,
    },
    {
        type: 'PRODUCT',
        name: 'product 2',
        price: 30,
        tangible: true,
        quantity: 1,
    }
]);

TwoCoInlineCart.cart.addCoupon('50%OFF'); // discount code
TwoCoInlineCart.cart.setCurrency('GBP'); // order currency
TwoCoInlineCart.cart.setLanguage('fr'); // language code
TwoCoInlineCart.cart.setOrderExternalRef('1231231'); // order external reference
TwoCoInlineCart.cart.setExternalCustomerReference('ID123extern'); // external customer reference
TwoCoInlineCart.cart.checkout(); // start checkout process
```

### Sample request for dynamic products

```java
TwoCoInlineCart.setup.setMerchant('merchantCode'); // your merchant code
TwoCoInlineCart.setup.setMode('DYNAMIC'); // product type
TwoCoInlineCart.register();

TwoCoInlineCart.cart.setCurrency('USD'); // order currency

TwoCoInlineCart.products.add({
name        : 'A test dynamic product',
recurrence:{
    unit: 'WEEK',
    length: 2
},
duration: {
    unit: 'YEAR',
    length: 1
},
renewalPrice: 100.99
});
TwoCoInlineCart.cart.checkout(); //start checkout process
```


# Inline trials flow

In order to generate an Inline trial checkout cart, it’s mandatory to have the following parameters in the inline script.

## Mandatory parameters for the trial links

* **Signature**: for building a Trial buy link it is required to generate a signature
* **Price** (define trial price for the corresponding currency - 0 for free trial, higher than 0 for paid trial)
* **Period** (define period – not less than 7 days)
* **Currency** (define currency)
* **Product Code** (define the product for which the trial is applied)

How your script should look like:

```javascript
TwoCoInlineCart.cart.setCurrency('EUR');
TwoCoInlineCart.products.add({
                       code: 'ANTV_2016',
                       tperiod: 7,
                       tprices: {EUR: 5, RON: 20},
                  });
TwoCoInlineCart.cart.setSignature('520ba411696e37f1839145bfa793f7199d8d0295a228ea42dc20a3f39196e358');
```

For more details on parameters setup, check [here](/shopping-carts/inline/inline-checkout-methods-and-parameters).

### Limitations

* The trial period/price applies to a single product.
* The trial period can be a minimum of 7 days.
* 2Checkout uses the custom prices and ignores the per-product pricing configuration.
* Supported payment methods: credit and debit cards, PayPal, and Direct Debit.
* 2Checkout automatically converts the trial to a paid subscription when the trial interval expires by charging shoppers based on the payment-on-file information. Customers can opt-out at any time using their myAccount.


# InLine Checkout with signature generation

## Overview

Documentation for generating a [JSON Web Token (JWT)](https://jwt.io/introduction/) used to authenticate yourself when using the 2Checkout Signature Generation API endpoint can be found [here](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/How-to-generate-a-JSON-Web-Token-JWT/).

## Generate a JWT for authenticating

It is strongly recommended you generate this using your own backend server and using a library to work with JSON Web Tokens (JWT).

In our examples below, we use the [lcobucci/jwt](https://github.com/lcobucci/jwt) PHP library to generate the JWT. You can use any library you want, but we strongly recommend using a library and not generating the JWT on your own.

### JWT generation example

You can see a simple example of generating the token here:

```php
<?php

namespace App\Helpers;

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha512;
use Lcobucci\JWT\Signer\Key;

class JwtToken
{
    static function getToken(){
        $time = time();
        $token = (new Builder())
            ->issuedAt($time) // Configures the time that the token was issue (iat claim)
            ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim)
            ->withClaim('sub', config('demo.vendor_code')) // Configures a new claim, called "sub" ( default subject of the JWT )
            ->getToken(new Sha512(), new Key(config('demo.vendor_secret'))); // Retrieves the generated token

        return (string)$token;
    }

}
```

This method returns a token which expires 60 minutes (3600 seconds) after it is generated. In most cases, this should allow you enough time, but you can modify this threshold as per your needs.

Using the library, call the new Lcobucci\JWT\Builder() and set the parameters specified in the [How-to-generate-a-JWT documentation](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/How-to-generate-a-JSON-Web-Token-JWT/).

In order to use the JWT to authenticate in the 2Checkout Signature Generation API Endpoint, the algorithm used must be HS512, so you need to call the method getToken with the parameters new Sha512() for the algorithm and new Key('VENDOR\_SECRET') for the JWT secret signature.

{% hint style="warning" %}
For  new Key('VENDOR\_SECRET') you need to use your **Buy-link  Secret Word**, which can be found in your Merchant Control Panel under *Integrations* → *Webhooks & API*  → [*Secret Word*](https://secure.2checkout.com/cpanel/webhooks_api.php) section.
{% endhint %}

## Use cases

All scenarios below use the /encrypt/generate/signature Convert Plus endpoint to generate a valid signature. This endpoint is further documented [here](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/How-to-use-2Checkout-Signature-Generation-API-Endpoint/) and the format of the accepted parameters [here](/shopping-carts/inline/inline-checkout-methods-and-parameters).

{% stepper %}
{% step %}

### Static cart with a signature generated before the page is rendered

This example showcases a simple HTML page that loads a pre-defined cart and its products. The signature is retrieved before the page is rendered and returned as a response to the client.

<div data-with-frame="true"><img src="/files/d62fd30f0206fbe7c9c76dd7e91ae84ac730a0c6" alt=""></div>

```php
public function example1(){
    $jwtToken = JwtToken::getToken();
    $signature = CartSignature::getSignatureStaticCart($jwtToken);

    return view('example-1')->with('signature', $signature);
}
```

The signature is generated as described [here](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/2Checkout-ConvertPlus/How-to-use-2Checkout-Signature-Generation-API-Endpoint/).

The body of the function getSignatureStaticCart looks like this:

```php
public static function getSignatureStaticCart(string $jwtToken)
{
    $curl = curl_init();

    $products          = config('examples.1.products');
    $payload           = new \stdClass;
    $payload->merchant = config('demo.vendor_code');
    $payload->lock     = 1;
    $payload->products = $products;
    $payload->currency = 'USD';

    curl_setopt_array($curl, [\
        CURLOPT_URL            => https://secure.2checkout.com/checkout/api/encrypt/generate/signature,\
        CURLOPT_RETURNTRANSFER => true,\
        CURLOPT_CUSTOMREQUEST  => 'POST',\
        CURLOPT_POSTFIELDS     => json_encode($payload),\
        CURLOPT_HTTPHEADER     => [\
            'content-type: application/json',\
            'merchant-token: ' . $jwtToken,\
        ],\
    ]);
    $response = curl_exec($curl);
    $err      = curl_error($curl);
    curl_close($curl);
    if ($err) {
        throw new \Error('Curl error: ' . $err);
    }

    $signature = self::parse($response);

    return $signature;
}
```

The relevant contents of the HTML page generated will be:

```html
function buy() {
    TwoCoInlineCart.cart.setCurrency('USD');
    TwoCoInlineCart.products.removeAll();
    TwoCoInlineCart.products.addMany(
        {!! json_encode(config('examples.1.products')) !!}
    );
    TwoCoInlineCart.cart.setCartLockedFlag(true);
    TwoCoInlineCart.cart.setSignature('{{$signature}}');
    TwoCoInlineCart.cart.checkout();
}
```

The call to the TwoCoInlineCart checkout happens after setting the cart with exactly the same parameters used for the signature AND setting the signature (TwoCoInlineCart.cart.setSignature) to the one previously generated.
{% endstep %}

{% step %}

### Dynamic cart with products selected by Customer - signature generated only once <a href="#dynamic-cart-with-products-selected-by-customer-__002d-signature-generated-only-once" id="dynamic-cart-with-products-selected-by-customer-__002d-signature-generated-only-once"></a>

This example showcases how you can have a dynamic cart, so the customer can select products and quantities. Because the products are added/changed by the customer inside the page, the signature must be generated when the shopping cart loads, using the products the customer selected; otherwise, the signature would be invalid and the cart would not load.

Clicking the buy-link would not immediately open the cart. Firstly, you must send the current cart payload to your backend and get the signature for the cart.

```html
async function getSignature(){
    const response = await fetch('/api/generate-signature', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        redirect: 'follow',
        referrerPolicy: 'no-referrer',
        body: JSON.stringify({
            cart: {
                products: cart.products
            }
        })
    });
    return response.json();
}
```

The backend receives the products and makes the call to get the signature for this payload, then returns the signature.

```php
public function generateSignature(Request $request){
    $requestProducts = $request->input('cart.products');

    $jwtToken = JwtToken::getToken();
    $signature = CartSignature::getSignatureForProducts($jwtToken, $requestProducts);

    return json_encode($signature);
}
```

Then, you can set the signature returned by your backend and initialize the cart. This is the JavaScript snippet that does this.

```html
async function buy() {
    console.log('getting signature...');
    let signature = await getSignature();
    console.log('signature retrieved, ', signature);

    TwoCoInlineCart.cart.setCurrency('USD');
    TwoCoInlineCart.products.removeAll();
    TwoCoInlineCart.products.addMany(
        cart.products
    );
    TwoCoInlineCart.cart.setCartLockedFlag(true);
    TwoCoInlineCart.cart.setSignature(signature);
    TwoCoInlineCart.cart.checkout();
}
```

{% endstep %}

{% step %}

### Dynamic cart with products selected by customer - signature generated when the cart is updated

<div data-with-frame="true"><img src="/files/178d58371e5eab0306fd6f1cb5bc1279c9366eb8" alt=""></div>

For the second use case above, the customer will have to wait for the generateSignature call when the buy button is pressed.

An alternative would be to generate and set a new signature every time the cart is updated. This way, more calls will be made to both your backend and the 2Checkout Signature Generation Endpoint, but the cart will load faster.

```html
async function updateCart() {
    computeCart();
    await setSignature();
    updateView();
}
```

While computeCart will update the payload, the setSignature call will make an Ajax to your backend, the same as in the second use case, and call TwoCoInlineCart.cart.setSignature(signature);.

```html
async function setSignature() {
    console.log('getting signature...');
    let signature = await getSignature();
    console.log('signature retrieved, ', signature);
    TwoCoInlineCart.cart.setSignature(signature);
}
```

When clicking the Buy button, the cart will boot faster, as the signature call will already be called when the last cart modification is done.

You can choose between use cases 2 & 3, depending on your application's needs and objectives.
{% endstep %}

{% step %}

### Cart with custom prices Products

If you have products with custom prices, you should always calculate the price of the product in your own backend. If you have frontend logic that generates and computes calculations in order to display the total, those prices should be used for only that, frontend display.

You must recompute the price on your backend and generate a signature with a payload that only you can validate: do not allow an AJAX call to your backend to calculate the total price.

```php
public function signatureCustomPrices(Request $request){
    $requestProducts =  $request->input('cart.products');

    // set custom prices
    // !! do not trust prices coming on the request
    // use the custom prices set in our system ( in this case they can be found in the @var $productsData )
    $productsWithCustomPrices = [];
    foreach($requestProducts as $key => $requestProduct){
        $requestProductCustomPrice                        = $this->getCustomPriceByProductCode($requestProduct['code']);
        $productsWithCustomPrices[$key]['code']           = $requestProduct['code'];
        $productsWithCustomPrices[$key]['quantity']       = $requestProduct['quantity'];
        $productsWithCustomPrices[$key]['custom-price']   = $this->formatCustomPrice($requestProductCustomPrice, $requestProduct['quantity']);
    }

    // create the payload with the product codes and quantities set by shopper, BUT the prices from the backend
    $cartPayload           = new \stdClass;
    $cartPayload->merchant = config('demo.vendor_code');
    $cartPayload->products = $productsWithCustomPrices;
    $cartPayload->currency = 'USD';

    // get JWT using token
    $jwtToken = JwtToken::getToken();

    // generate signature
    $signature = CartSignature::getSignatureForTheEntirePayload($jwtToken, $cartPayload);

    return json_encode($signature);
}
```

Depending on your own case, you can use the second or third scenarios to set the signature.
{% endstep %}

{% step %}

### Cart with dynamic products

In order to generate a signature for dynamic products, the payload you send to the 2Checkout API Generation Endpoint should have the same parameters as the ones you use to set up the cart in your JavaScript code.

```javascript
$cartPayload           = new \stdClass;
$cartPayload->merchant = config('demo.vendor_code');
$cartPayload->currency = 'USD';
$cartPayload->dynamic  = '1';
$cartPayload->products = config('examples.5.products');

$jwtToken = JwtToken::getToken();
$signature = CartSignature::getSignatureForTheEntirePayload($jwtToken, $cartPayload);

function buy() {
    TwoCoInlineCart.setup.setMode('DYNAMIC');
    TwoCoInlineCart.cart.setCurrency('USD');
    TwoCoInlineCart.products.removeAll();
    TwoCoInlineCart.products.addMany(
        {!! json_encode(config('examples.5.products')) !!}
    );

    TwoCoInlineCart.cart.setSignature('{{$signature}}');
    TwoCoInlineCart.cart.checkout();
}
```

Notice that you must set the payload currency and dynamic, the same way as you do in the JavaScript code.

After you compute this payload, you can just call the signature generation API endpoint.

```javascript
public static function getSignatureForTheEntirePayload(string $jwtToken, \stdClass $cartPayload)
{
    $curl = curl_init();
    curl_setopt_array($curl, [\
        CURLOPT_URL            => config('demo.signature_api_url'),\
        CURLOPT_RETURNTRANSFER => true,\
        CURLOPT_CUSTOMREQUEST  => 'POST',\
        CURLOPT_POSTFIELDS     => json_encode($cartPayload),\
        CURLOPT_HTTPHEADER     => [\
            'content-type: application/json',\
            'merchant-token: ' . $jwtToken,\
        ],\
    ]);
    $response = curl_exec($curl);
    $err      = curl_error($curl);
    curl_close($curl);
    if ($err) {
        throw new \Error('Curl error: ' . $err);
    }

    $signature = self::parse($response);

    return $signature;
}
```

{% endstep %}
{% endstepper %}


# Signature validation for return URL via InLine checkout

## Overview

To start, you need to generate the InLine checkout content using the TwoCoInlineCart client.

At this step, you must add a product to your cart, set the return method, and set a previously generated cart payload signature.

```javascript
TwoCoInlineCart.cart.setCurrency('USD');
TwoCoInlineCart.products.add({
    code    : 'TEST_PROD',
    quantity: 1,
    price   : 29
});

TwoCoInlineCart.cart.setReturnMethod({
    type: 'redirect',
    url : 'https:\/\/yourbackend.com\/'
});

TwoCoInlineCart.cart.setSignature('314cfb1f277ef89f9f3735517...........1c62abee466c9d1774bf1e4655f0');
```

After triggering TwoCoInlineCart.cart.checkout(); the InLine checkout will initialize in the new iframe.

In case of a valid signature, the cart will boot and the shopper can complete the order. Otherwise, he will see an empty cart page.

In case of a valid signature and successful order placing, the shopper is redirected to the page you have defined in the return parameters. The return URL is appended with some return parameters which are refno, total, total-currency, all of them are signed and their signature should be present in the query parameters.

In the backend, you need to gather all these parameters and validate the parameters' hash you generate with the new signature appended to the return-URL.

To generate the hash and validate the return URL, follow the steps below.

## Build the InLine Checkout Signature

To sign an InLine checkout buy-link, you need to follow these steps:

1. Sort the parameters that require a signature alphabetically.
2. Serialize the parameters and append to them the length of their values.
3. Concatenate the resulting values.
4. The serialized value is then encrypted with your Buy-Link [Secret Word](https://docs.2checkout.com/get-started-with-the-2checkout-api/) using the HMAC method (algorithm sha256).
5. The resulting value is added to the buy-link under the **signature** parameter.

In order to generate a valid InLine checkout signature, you should include all the parameters from the return URL, except the signature.

### Example

{% hint style="info" %}
When encrypting the values to generate the signature, for the return-url parameter, use an URL with the following structure: https\://..... Do not use an encoded URL.
{% endhint %}

Let's consider the following parameters:

* `refno` = 11606896
* `total` = 29
* `total-currency` = USD

The regular return link will have the following structure:

```
https://www.yourbackend.com/?refno=11606896&total=29&total-currency=USD&signature=08448c91bbb314cfb1f277ef89f9f37355171c62abee466c9d1774bf1e4655f0
```

Steps applied to these parameters:

1. Sort the parameters alphabetically: `refno`, `total`, `total-currency`.
2. Serialize the values by prefixing each value with its length (number of characters):

* `refno` → `811606896`
* `total` → `229`
* `total-currency` → `3USD`

3. Concatenate the serialized values: `118116068962293USD`
4. Encrypt using your Secret Word

* Algorithm: `sha256`
* Key: merchant secret word (example: `vendor-secret-key`)

This outputs a 64-character hexadecimal string:

```
08448c91bbb314cfb1f277ef89f9f37355171c62abee466c9d1774bf1e4655f0
```

You can also use the following PHP HashValidationTool to validate a return URL signature.

```php
<?php

class HashValidationTool
{

    const SHA_256 = 'sha256';
    private $params;
    private $signature;
    private $key;

    /**
     * HashValidationTool constructor.
     *
     * @param string $key
     */
    public function __construct(string $key)
    {
        $this->key = $key;
    }

    /**
     * @return string
     */
    private function encrypt(): string
    {
        $serialized = $this->serializeParameters($this->params);

        if (strlen($serialized) > 0) {
            echo 'Success: serialized params - ' . $serialized . PHP_EOL;

            return bin2hex(hash_hmac(self::SHA_256, $serialized, $this->key, true));
        } else {
            echo 'Error: serialization parameters are empty' . PHP_EOL;

            return '';
        }
    }

    /**
     * @param string $url
     *
     * @return bool
     */
    public function validate(string $url): bool
    {
        $this->setUrl($url);

        return $this->encrypt() === $this->signature;
    }

    /**
     * @param array $array
     *
     * @return string
     */
    private function serializeParameters(array $array): string
    {
        ksort($array);

        $serializedString = '';

        foreach ($array as $value) {
            if (is_array($value)) {
                $serializedString .= $this->serializeParameters($value);
            } else {
                $serializedString .= strlen($value) . $value;
            }
        }

        return $serializedString;
    }

    /**
     * @param string $url
     */
    private function setUrl(string $url): void
    {
        $urlParts = parse_url($url);
        parse_str($urlParts['query'], $this->params);
        $this->signature = $this->params['signature'];
        unset($this->params['signature']);
    }
}

$hashValidationTool = new HashValidationTool('vendor-secret-key');
if ($hashValidationTool->validate('https://www.yourbackend.com/?merchant=YOUR_VENDOR_CODE&currency=USD&return-url=https://yourbackend.com/&return-type=redirect&tpl=default&prod=TEST_PROD&price=29&qty=1&refno=11606896&total=29&total-currency=USD&signature=95052ee0c558b53040e97d7d81add2e0f1400ca0936a558910c68ddc8301fc63')) {
    echo 'valid';
} else {
    echo 'invalid';
}
```

## Diagram

The successful order placement flow with a valid signature for the InLine checkout is described in the following diagram.

<div data-with-frame="true"><img src="/files/aff4a508eded134046d6dbd5d708672adf771a3e" alt=""></div>


# Use cases


# Set cart lock in the InLine Cart

## Overview

Use the Cart object to lock products by calling the `TwoCoInlineCart.cart.setCartLockedFlag(true)` method.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to set currency use TwoCoInlineCart.cart.setCurrency(currency-code).
5. To lock products use `TwoCoInlineCart.cart.setCartLockedFlag(true)`method.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```json
   {
       "merchant": "AVLRNG",
       "currency": "USD",
       "lock": 1,
       "products": [
           {
               "code": "74B8E17CC0",
               "quantity": 3
           }
       ]
   }
   ```

   \
   The above payload will generate the signature ba6ad53ac1cb699daad64bb1d3ef6ab72050787f62a3137d5090c96173a05e85.
7. Use the TwoCoInlineCart.cart.setSignature('ba6ad53ac1cb699daad64bb1d3ef6ab72050787f62a3137d5090c96173a05e85') method to set the signature.
8. Use the `TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.setCurrency('USD');
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0",
    quantity: 3
  });
  TwoCoInlineCart.cart.setSignature('ba6ad53ac1cb699daad64bb1d3ef6ab72050787f62a3137d5090c96173a05e85');
  TwoCoInlineCart.cart.setCartLockedFlag(true);
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After locking the product page using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/jjPvQJ>" %}


# Set the order external reference in the InLine Cart

## Overview

Use the Cart object to set **order external reference** of the InLine Cart by calling the `TwoCoInlineCart.cart.setOrderExternalRef(your-external-reference)` method.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to set currency use TwoCoInlineCart.cart.setCurrency(currency-code).
5. In order to set order external reference use`TwoCoInlineCart.cart.setOrderExternalRef(your-external-reference)`method.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```json
   {
       "merchant": "AVLRNG",
       "currency": "USD",
       "products": [
           {
               "code": "74B8E17CC0"
           }
       ],
       "reference": {
           "external": {
               "order": "test-order-external-ref"
           }
       }
   }
   ```

   \
   The above payload will generate the signature f40503a3feeb2c5fc0ca002ded20c59ad0f0b439e3911cfb03538906635d0ae4.
7. Use the TwoCoInlineCart.cart.setSignature('f40503a3feeb2c5fc0ca002ded20c59ad0f0b439e3911cfb03538906635d0ae4') method to set the signature.
8. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.setCurrency('USD');
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setSignature('f40503a3feeb2c5fc0ca002ded20c59ad0f0b439e3911cfb03538906635d0ae4');
  TwoCoInlineCart.cart.setOrderExternalRef('test-order-external-ref');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the order external reference in the InLine cart using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/mZJLjq>" %}


# Set sale source in the InLine Cart

## Overview

Use the Cart object to set a sale source for the InLine Cart by calling the `TwoCoInlineCart.cart.setSource(source)` method.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to set sale source use`TwoCoInlineCart.cart.setSource('YouTube Channel')`.
5. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setSource('YouTube Channel');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the sale source to the InLine cart using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/zVGOow>" %}


# Preload InLine Cart to increase loading speed

## Overview

To reduce checkout load time, you can preload the InLine Checkout in the background on page load or when the customer selects a product.

## Use case

1. Add an HTML link or button to your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the `TwoCoInlineCart.products.add({code, quantity, options})` method to prepare your products.
4. Use the `TwoCoInlineCart.cart.preload()` method to load the cart in the background.
5. Use the `TwoCoInlineCart.cart.reloadCart()` method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.addEventListener("load", (event) => {
  TwoCoInlineCart.products.add({
    code: "2CO3MONTHS",
    qty: 1
  });
  TwoCoInlineCart.cart.preload();
});

window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.reloadCart();
});
```

## Demo (using test mode)

{% embed url="<https://codepen.io/2checkout-connectors/pen/yyOpRKw>" %}


# Set billing details for the InLine Checkout

## Overview

Pre-set the **billing details** for the InLine checkout.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. Call any of the following methods to pre-set the billing details:<br>

   ```javascript
   TwoCoInlineCart.billing.setName('John Snow');
     TwoCoInlineCart.billing.setEmail('john.snow@2checkout.com');
     TwoCoInlineCart.billing.setPhone('+33 892 70 12 39');
     TwoCoInlineCart.billing.setCountry('FR');
     TwoCoInlineCart.billing.setCity('Paris');
     TwoCoInlineCart.billing.setState('');
     TwoCoInlineCart.billing.setZip('75007');
     TwoCoInlineCart.billing.setAddress('Champ de Mars');
     TwoCoInlineCart.billing.setAddress2('5 Avenue Anatole');
   ```
5. If you want to reset the billing details, call the`TwoCoInlineCart.billing.reset()`method.
6. Use the`TwoCoInlineCart.cart.checkout()`method to display the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });

  // Style 1 (all data at once)
  TwoCoInlineCart.billing.setData({
    name: 'John Snow',
    email: 'john.snow@2checkout.com',
    phone: '+33 892 70 12 39',
    country: 'FR',
    city: 'Paris',
    state: '',
    zip: '75007',
    address: 'Champ de Mars',
    address2: '5 Avenue Anatole'
  });

  // Reset
  TwoCoInlineCart.billing.reset();

  // Style 2 (simple)
  TwoCoInlineCart.billing.setName('John Snow');
  TwoCoInlineCart.billing.setEmail('john.snow@2checkout.com');
  TwoCoInlineCart.billing.setPhone('+33 892 70 12 39');
  TwoCoInlineCart.billing.setCountry('FR');
  TwoCoInlineCart.billing.setCity('Paris');
  TwoCoInlineCart.billing.setState('');
  TwoCoInlineCart.billing.setZip('75007');
  TwoCoInlineCart.billing.setAddress('Champ de Mars');
  TwoCoInlineCart.billing.setAddress2('5 Avenue Anatole');

  // Reset
  TwoCoInlineCart.billing.reset();

  // Style 3 (chained)
  TwoCoInlineCart.billing
    .setName('John Snow')
    .setEmail('john.snow@2checkout.com')
    .setPhone('+33 892 70 12 39')
    .setCountry('FR')
    .setCity('Paris')
    .setState('')
    .setZip('75007')
    .setAddress('Champ de Mars')
    .setAddress2('5 Avenue Anatole')
  ;

  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the billing details for the InLine cart using the above methods, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/JQKgVx>" %}


# Turn on auto-advance feature

## Overview

Use the **Cart** object to turn on the auto-advance feature (if mandatory fields are filled in) on the InLine checkout by calling the TwoCoInlineCart.cart.setAutoAdvance(true) method.

## Use case

1. Add an HTML link or button on your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the TwoCoInlineCart.products.add({code, quantity, options}) method to prepare your catalog product.
4. Turn on the auto-advance feature by calling the TwoCoInlineCart.cart.setAutoAdvance(true) method.
5. Set all the mandatory fields for billing.<br>

   ```javascript
   TwoCoInlineCart.billing.setCountry('US');
   TwoCoInlineCart.billing.setEmail('some@email.com');
   TwoCoInlineCart.billing.setName('John Doe');
   ```
6. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Request sample

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
    TwoCoInlineCart.products.add({
        code: "74B8E17CC0"
    });
    TwoCoInlineCart.cart.setAutoAdvance(true);
    TwoCoInlineCart.billing.setCountry('US');
    TwoCoInlineCart.billing.setEmail('some@email.com');
    TwoCoInlineCart.billing.setName('John Doe');
    TwoCoInlineCart.cart.checkout();
});
```

## Demo

After turning on the cart auto-advance feature using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/rNxvVBE>" %}


# Assign values for the additional order fields

## Overview

Use this method to assign values to the additional fields for orders.

## Use case

1. Add an HTML link or button on your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Set your currency using the TwoCoInlineCart.cart.setCurrency('USD') method.
4. Use the TwoCoInlineCart.cart.setAdditionalFields(additionalFields) method to set the order additional fields values.
5. The **additionalFields** argument should contain a list of objects with the code of the field and its value.
6. Use the TwoCoInlineCart.products.add({code, quantity}) method to prepare your products.
7. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.setCurrency('USD');

  TwoCoInlineCart.cart.setAdditionalFields([
      // textbox type example
      {
        code     : 'TextInIPNCustom123',
        value    : 'Some text value'
      },
      // listbox type example
      {
        code     : 'SourceOrder',
        value    : 'The WWW'
      },
      // hidden type example
      {
        code     : 'cart2cotestorderhidden',
        value    : 'Some text for the hidden field'
      },
      // checkbox type example
      {
        code     : 'cart2cotestordercheckbox',
        value    : true
      }
  ]);

  TwoCoInlineCart.products.add({
    code: '2CO3MONTHS',
    quantity: 1
  });

  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After defining the additional fields for your orders using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/OKQPLN>" %}


# Subscribe / unsubscribe to shopping cart events for InLine Checkout

## Overview

Subscribe and unsubscribe to Inline checkout events.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the `TwoCoInlineCart.products.add({code, quantity, options})` method to prepare your catalog product.
4. In order to subscribe to an event use:<br>

   ```javascript
   TwoCoInlineCart.events.subscribe('cart:opened', function () {
       alert('Cart was opened.');
   });
   ```
5. In order to unsubscribe from an event use the Handler GUID that you can obtain when subscribing to the event.<br>

   ```javascript
   let cartClosedhandlerGuid = TwoCoInlineCart.events.subscribe('cart:closed', function () {
       alert('Cart was closed.');
   });
   TwoCoInlineCart.events.unsubscribe('cart:closed', cartClosedhandlerGuid);
   ```
6. Use the `TwoCoInlineCart.cart.checkout()` method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.addEventListener('load', function() {
    TwoCoInlineCart.events.subscribe('cart:opened', function () {
      alert('Cart was opened.');
    });
    
    TwoCoInlineCart.events.subscribe('payment:finalized', function () {
      alert('Payment was finalized.');
    });
    
    TwoCoInlineCart.events.subscribe('fulfillment:finalized', function () {
      alert('Fulfillment was finalized.');
    });
    
    var cartClosedhandlerGuid = TwoCoInlineCart.events.subscribe('cart:closed', function () {
      alert('Cart was closed.');
    });
    TwoCoInlineCart.events.unsubscribe('cart:closed', cartClosedhandlerGuid);

    TwoCoInlineCart.events.subscribe('cart:error', function (errorData) {
      console.log('Cart error occurred:', errorData);
      // errorData will now contain the error object with the errors array
      if (errorData && errorData.errors && errorData.errors.length > 0) {
          const error = errorData.errors[0];

          if (error.code === 'GDPR_EMAIL_VALIDATION') {
              console.log('GDPR validation failed:', error.message);
              alert('Please verify your email address');
          } else if (error.code === 'BOOT_ERROR') {
              console.log('Boot error:', error.message);
              alert('Unable to initialize cart');
          }
      }
    });
  });

  window.document.getElementById('buy-button').addEventListener('click', function() {
    TwoCoInlineCart.products.add({
      code: "74B8E17CC0"
    });
    TwoCoInlineCart.cart.checkout();
  });
```

## Demo

After setting the subscribe/unsubscribe details for the InLine cart using the above methods, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/EByzpY>" %}


# Test adding product coupons to the InLine Checkout

## Overview

Use the `TwoCoInlineCart.card.addCoupons(['COUPON'])` method to apply multiple coupons.

## Use case - add coupons

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the `TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. To apply several coupons to your cart products, use the`TwoCoInlineCart.card.addCoupons(['COUPON'])`method.
5. To show the cart on your page call the`TwoCoInlineCart.cart.checkout()`method.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.addCoupons(['CUPON']);
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the test mode to add coupons to the InLine Checkout using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/orzbYP>" %}


# Test adding a product coupon to the InLine Checkout

## Overview

Use the `TwoCoInlineCart.cart.addCoupon('COUPON')` method to apply a single coupon.

## Use case - add product coupon

1. Add an HTML link or button to your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. To apply a coupon to your products in the shopping cart, use the`TwoCoInlineCart.cart.addCoupon('COUPON')`method.
5. To show the cart on your page call the`TwoCoInlineCart.cart.checkout()`method.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.addCoupon('CUPON');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the test mode to add a coupon to the InLine checkout using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/WqGbEw>" %}


# Set the cart currency for InLine Cart

## Overview

Use the **Cart object** to set the currency of the InLine Cart by calling the `TwoCoInlineCart.cart.setCurrency(currency-code)` method.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to set the currency use the`TwoCoInlineCart.cart.setCurrency('RON')`method.
5. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

{% code title="HTML" %}

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

{% endcode %}

### JavaScript

{% code title="JavaScript" %}

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setCurrency('GBP');
  TwoCoInlineCart.cart.checkout();
});
```

{% endcode %}

## Demo

After setting the cart currency using the above method, your cart should look like this.

{% embed url="<https://codepen.io/2checkout-documentation/pen/ewNOWg>" %}


# Set the shipping details in the InLine Checkout

## Overview

Pre-set the **shipping details** for the InLine checkout.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. Call any of the following methods to pre-set the shipping details:<br>

   ```javascript
   TwoCoInlineCart.shipping.setName('Shopper name');
     TwoCoInlineCart.shipping.setEmail('shopper.email@example.com');
     TwoCoInlineCart.shipping.setPhone('+1 202 555 0115');
     TwoCoInlineCart.shipping.setCountry('US');
     TwoCoInlineCart.shipping.setCity('Denver');
     TwoCoInlineCart.shipping.setState('Colorado');
     TwoCoInlineCart.shipping.setZip('80249');
     TwoCoInlineCart.shipping.setAddress('Pena Blvd');
     TwoCoInlineCart.shipping.setAddress2('');
   ```
5. If you want to reset the shipping details, call the`TwoCoInlineCart.shipping.reset()`method.
6. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });

  // Style 1 (all data at once)
  TwoCoInlineCart.shipping.setData({
        name    : 'Shopper name',
        country : 'US',
        email   : 'shopper.email@example.com',
        city    : 'Denver',
        state   : 'Colorado',
        zip     : '80249',
        phone   : '+1 202 555 0115',
        address : '',
        address2: 'Pena Blvd'
  });

  // Reset
  TwoCoInlineCart.shipping.reset();

  // Style 2 (simple)
  TwoCoInlineCart.shipping.setName('Shopper name');
  TwoCoInlineCart.shipping.setEmail('shopper.email@example.com');
  TwoCoInlineCart.shipping.setPhone('+1 202 555 0115');
  TwoCoInlineCart.shipping.setCountry('US');
  TwoCoInlineCart.shipping.setCity('Denver');
  TwoCoInlineCart.shipping.setState('Colorado');
  TwoCoInlineCart.shipping.setZip('80249');
  TwoCoInlineCart.shipping.setAddress('Pena Blvd');
  TwoCoInlineCart.shipping.setAddress2('');

  // Reset
  TwoCoInlineCart.shipping.reset();

  // Style 3 (chained)
  TwoCoInlineCart.shipping
    .setName('Shopper name')
    .setEmail('shopper.email@example.com')
    .setPhone('+1 202 555 0115')
    .setCountry('US')
    .setCity('Denver')
    .setState('Colorado')
    .setZip('80249')
    .setAddress('Peña Blvd')
    .setAddress2('');

  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the shipping details for the InLine checkout using the above methods, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/EBgqBR>" %}


# Add a digital catalog product with auto-applied order promotion

## Overview

Use the **order promotions** object to add a digital catalog product with auto-applied order promotion (for PSP business model).

## Use case

1. Add an HTML link or button to your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the TwoCoInlineCart.products.add({code, quantity, options}) method to prepare your catalog product.
4. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.removeAll();
  TwoCoInlineCart.products.add({
    code: "STD_SUB",
    quantity: 3
  });

  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding a digital catalog product with auto-applied order promotion using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/XWpzboV>" %}


# Set the item external reference in the InLine Cart

## Overview

Use the Product object to set **item external reference** by setting the **externalReference** property.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Set dynamic mode using`TwoCoInlineCart.setup.setMode('DYNAMIC')`.
4. Use the`TwoCoInlineCart.products.add({name, quantity, price, options, externalReference})`method to prepare your dynamic product.
5. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "2COLRNC",
       "dynamic": "1",
       "currency": "USD",
       "products": [
           {
               "name": "A test dynamic product",
               "price": 10,
               "reference": {
                   "external": {
                       "item": "test-item-external-ref"
                   }
               }
           }
       ]
   }
   ```

   \
   The above payload will generate the signature 794da13570fbd72d7ffb970b7b16390508c1ac5581e829a811c5301f5e5bc0f3.
6. Use the TwoCoInlineCart.cart.setSignature('794da13570fbd72d7ffb970b7b16390508c1ac5581e829a811c5301f5e5bc0f3') method to set the signature. It is important that you employ TwoCoInlineCart.cart.removeAll() just before the TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) methods to remove previous products as the signature is based on the products' definition.
7. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.setup.setMode('DYNAMIC');
  TwoCoInlineCart.cart.setCurrency('USD');
  TwoCoInlineCart.products.add({
    name: "A test dynamic product",
    price: 10,
    externalReference: 'test-item-external-ref'
  });
  TwoCoInlineCart.cart.setSignature('794da13570fbd72d7ffb970b7b16390508c1ac5581e829a811c5301f5e5bc0f3');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the item external reference in the InLine cart using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/LKVraB>" %}


# Place manual renewal order in InLine Cart

## Overview

Place a manual renewal order using the inline checkout.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the `TwoCoInlineCart.products.add({code, quantity, options})` method to prepare your catalog product.
4. Set the license code as the subscription reference on the cart `TwoCoInlineCart.cart.setSubscription('IMKNNVEY13')`.
5. Set the customer's email address on the cart (the email must match the subscription) `TwoCoInlineCart.billing.setEmail('john.doe@company.com')`.
6. Set the renewal flag on the cart `TwoCoInlineCart.cart.setRenewalFlag(true)`.
7. Use the `TwoCoInlineCart.cart.checkout()` method to show the cart on your page.
8. (Optional) Check the promise rejection for any errors indicating that the email validation failed and handle accordingly.<br>

   ```javascript
   TwoCoInlineCart.cart.checkout().then((value) => {
     console.log("promise was resolved");
     console.log(value);
   })
     .catch((err) => {
     console.log("promise was rejected");
     if (err && err.errors && err.errors.length > 0) {
       const error = err.errors[0];

       if (error.code === 'GDPR_EMAIL_VALIDATION') {
         console.log('GDPR validation failed:', error.message);
         alert('Please verify your email address');
       } else if (error.code === 'BOOT_ERROR') {
         console.log('Boot error:', error.message);
         alert('Unable to initialize cart');
       }
     }
   ```

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setSubscription('IMKNNVEY13');
  TwoCoInlineCart.billing.setEmail('john.doe@company.com');
  TwoCoInlineCart.cart.setRenewalFlag(true);
  TwoCoInlineCart.cart.checkout();
});
```

## Demo (using test mode)

{% embed url="<https://codepen.io/2checkout-connectors/embed/RNaxYza?default-tab=html%2Cresult>" %}


# Place upgrade orders with InLine Cart

## Overview

Upgrades a current subscription using the inline checkout.

{% hint style="info" %}
The Checkout form will be prefilled with subscription's billing data.
{% endhint %}

## Use case <a href="#use-case" id="use-case"></a>

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the `TwoCoInlineCart.products.add({code, quantity, options})` method to prepare your catalog product.
4. Set the license code as the subscription reference on the cart `TwoCoInlineCart.cart.setSubscription('IMKNNVEY13')`.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>Make sure your parent subscription has upgrades available in Control Panel, for your current product.</p></div>
5. Set the upgrade flag on the cart `TwoCoInlineCart.cart.setUpgrade(true)`.
6. Use the `TwoCoInlineCart.cart.checkout()` method to show the cart on your page.

## Sample request <a href="#sample-request" id="sample-request"></a>

### HTML <a href="#html" id="html"></a>

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript <a href="#javascript" id="javascript"></a>

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setSubscription('IMKNNVEY13');
  TwoCoInlineCart.billing.setEmail('john.doe@company.com');
  TwoCoInlineCart.cart.setUpgrade(true);
  TwoCoInlineCart.cart.checkout();
});
```


# Add a catalog product to InLine Cart

## Overview

Use the **Product** object to add a catalog product to the InLine Cart by calling the click event handler.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({ // Adding the desired product in the cart
    code: "74B8E17CC0", // Product code from 2Checkout cPanel account
    quantity: 3 // Quantity of the given product
  });
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding the product to the InLine cart using the above method, your cart should look like this.

{% embed url="<https://codepen.io/2checkout-documentation/pen/zVxyXo>" %}


# Assign values for the product additional custom fields

## Overview

Use this method to assign values to the additional fields for products.

## Use case

1. Add an HTML link or button on your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Set your currency using the theTwoCoInlineCart.cart.setCurrency('USD') method.
4. Use the TwoCoInlineCart.products.add({code, quantity, additionalFields}) method to prepare your products.
5. The **additionalFields** property should contain a list of objects with the code of the field and its value.
6. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.setCurrency('USD');

  TwoCoInlineCart.products.add({
    code: '2CO3MONTHS',
    quantity: 1,
    additionalFields: [
      // textbox type example
      {
        code     : 'NewsletterPolicy12345768',
        value    : 'Some text value'
      },
      // listbox type example
      {
        code     : 'cart2cotestlist',
        value    : 'YES'
      },
      // hidden type example
      {
        code     : 'HiddenID123',
        value    : 'Some text for the hidden field'
      },
      // checkbox type example
      {
        code     : 'cart2cotest',
        value    : true
      }
    ],
  });

  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After defining the additional fields for your products using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/bXLGXw>" %}


# Add a digital catalog product with regular auto-applied promotion and manually applied order promo

## Overview

Use the order promotions object to add digital catalog products with regular auto-applied promotion and manually applied order promotion (for MoR business model).

## Use case

1. Add an HTML link or button to your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the TwoCoInlineCart.products.add({code, quantity, options}) method to prepare your catalog product.
4. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.
5. Manually add the GENIUS25 discount coupon.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0",
    quantity: 3
  });

  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding a digital catalog product with regular auto-applied promotion and manually applied order promotion using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/dyNZPaV>" %}


# Set the pricing option for catalog products

## Overview

Use the **Product object** option property to override the default pricing option defined in your [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel/).

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. The **options** property should contain a list of objects with the name of the field and value.
5. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0",
    quantity: 3,
    options: [
      {
        name: '11234',
        value: 'new123'
      },
      {
        name: "DEMO_NUMBE_OF_PCS",
        value: "premiumversion"
      },
      {
        name: "DEVICES_5",
        value: "two_devices"
      }
    ]
  });
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After overriding the default pricing option using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/VJLOLr>" %}


# Add a physical dynamic product with dynamic shipping, dynamic taxes, and dynamic coupon

## Overview

Use the **order promotions** object to add a physical dynamic product with dynamic shipping, dynamic taxes, and dynamic coupon (for the PSP business model).

## Use case

1. Add an HTML link or button to your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the TwoCoInlineCart.setup.setMode('DYNAMIC') method in order to let the cart know you are using dynamic instead of catalog products.
4. Use the TwoCoInlineCart.cart.setCurrency(currency-code) method to set the currency.
5. Add your product to the cart by calling the TwoCoInlineCart.products.add({name, quantity, price, options}) method.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "250535979326",
       "dynamic": "1",
       "currency": "USD",
       "products": [
           {
               "name"    : "A test physical product",
               "quantity": 1,
               "price"   : 20,
               "type"    : 'physical'
           },
           {
               "name"    : "A test shipping",
               "quantity": 1,
               "price"   : 7,
               "type"    : 'shipping'
           },
           {
               "name"    : "A test tax",
               "quantity": 1,
               "price"   : 10,
               "type"    : 'tax'
           },
           {
               "name"    : "A test promotion",
               "quantity": 1,
               "price"   : 5,
               "type"    : 'coupon'
           }
       ]
   }
   ```
7. Use the TwoCoInlineCart.cart.setSignature('718e810fee34be2bf4b9d4582323aa37580c4011ef694116cca5b0bb7badd2f1') method to set the signature. It is important that you employ TwoCoInlineCart.cart.removeAll() just before the TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) methods to remove previous products as the signature is based on the products' definition.
8. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.setup.setMode('DYNAMIC');
  TwoCoInlineCart.cart.setCurrency('USD');

  TwoCoInlineCart.products.removeAll();
  TwoCoInlineCart.products.add({
    name: 'A test physical product',
    quantity: 1,
    price: 20,
    type: 'physical'
  });
  TwoCoInlineCart.products.add({
    name: 'A test shipping',
    quantity: 1,
    price: 7,
    type: 'shipping'
  });
  TwoCoInlineCart.products.add({
    name: 'A test tax',
    quantity: 1,
    price: 10,
    type: 'tax'
  });
  TwoCoInlineCart.products.add({
    name: 'A test promotion',
    quantity: 1,
    price: 5,
    type: 'coupon'
  });

  TwoCoInlineCart.cart.setSignature('1563b14f92bfe6bf645a227291120e1a9bbb87bcdf02c410b4522f5d8291fd34');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding a physical dynamic product with dynamic shipping, dynamic taxes, and dynamic coupon using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/oNBGWxy>" %}


# Set pricing option for dynamic products

## Overview

Use the **Product** object option property in order to define pricing options for dynamic products.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Set the dynamic mode for cart by calling`TwoCoInlineCart.setup.setMode('DYNAMIC')`.
4. Set your currency using the`TwoCoInlineCart.cart.setCurrency('USD')`method.
5. Use the`TwoCoInlineCart.products.add({name, quantity, price, options})`method to prepare your dynamic products.
6. The **options** property should contain a list of objects with the name of the field, it's value and surcharge.
7. You can see below a signature token request payload for this example. A success response contains a JSON with the property  “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "2COLRNC",
       "dynamic": "1",
       "currency": "USD",
       "products": [
           {
               "name": "A test dynamic product",
               "quantity": 1,
               "price": 20,
               "options": [
                   {
                       "name": "color",
                       "value": "red",
                       "surcharge": 10
                   },
                   {
                       "name": "shape",
                       "value": "squared",
                       "surcharge": 20
                   }
               ]
           }
       ]
   }
   ```

   \
   The above payload will generate the signature 50a651873d3d8926f6bb62397f34b1ec7dd3373fc885b28466db8f4022060138.
8. Use the TwoCoInlineCart.cart.setSignature('50a651873d3d8926f6bb62397f34b1ec7dd3373fc885b28466db8f4022060138') method to set the signature. It is important that you employ TwoCoInlineCart.cart.removeAll() just before the TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) methods to remove previous products as the signature is based on the products' definition.
9. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.setup.setMode('DYNAMIC');
  TwoCoInlineCart.cart.setCurrency('USD');

  TwoCoInlineCart.products.add({
    name: 'A test dynamic product',
    quantity: 1,
    price: 20,
    options: [\
      {\
        name     : 'color',\
        value    : 'red',\
        surcharge: 10\
      },\
      {\
        name     : 'shape',\
        value    : 'squared',\
        surcharge: 20\
      }\
    ],
  });

  TwoCoInlineCart.cart.setSignature('50a651873d3d8926f6bb62397f34b1ec7dd3373fc885b28466db8f4022060138');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the pricing options for dynamic products using the above method, your cart should look like this.

{% embed url="<https://codepen.io/2checkout-documentation/pen/QXjVqr>" %}


# Set test orders in InLine Cart

## Overview

Set the test mode in order to use **card-based payment methods** and **eCheck/ACH** using test cards and test cardholder names.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to test mode use`TwoCoInlineCart.cart.setTest(true)`.
5. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setTest(true);
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding the products to the InLine cart using the above method for testing purposes, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/gNbVjK>" %}

### Test cards

| Card type  | Card number      |
| ---------- | ---------------- |
| VISA       | 4111111111111111 |
| MasterCard | 5555555555554444 |
| AMEX       | 378282246310005  |
| Discover   | 6011111111111117 |
| JCB        | 3566111111111113 |

<table><thead><tr><th width="562">Use case — To achieve the desired result use the corresponding cardholder names.</th><th>Cardholder name</th></tr></thead><tbody><tr><td>Successful authorization for the initial transaction and all recurring charges.</td><td>John Doe</td></tr><tr><td>Successful authorization for the initial transaction and manual renewal transactions but recurring charges fail to authorize with the <strong>Insufficient Funds</strong> error message.</td><td>Mike Doe</td></tr><tr><td>Successful authorization for the initial transaction and manual renewal transactions but recurring charges fail to authorize with the <strong>Stolen Card</strong> error message.</td><td>Jenny Doe</td></tr><tr><td><strong>Insufficient funds</strong></td><td>Mona Doe</td></tr><tr><td><strong>Try again later</strong></td><td>Mark Doe</td></tr><tr><td><strong>Stolen card</strong></td><td>Red Doe</td></tr><tr><td><strong>Authentication failed</strong></td><td>Joy Doe</td></tr><tr><td><strong>Expired card</strong></td><td>Angela Doe</td></tr><tr><td><strong>Invalid card number</strong></td><td>Adrian Doe</td></tr><tr><td><strong>Invalid CVV</strong></td><td>Jack Doe</td></tr></tbody></table>


# Set return method in InLine Cart

## Overview

Use the Cart object in order to set the return method of the InLine cart by calling the `TwoCoInlineCart.cart.setReturnMethod({url, type})` method.

## Use case

1. Add an HTML link or button on your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add( {code, quantity, options})`method to prepare your catalog product.
4. In order to set currency use TwoCoInlineCart.cart.setCurrency(currency-code).
5. In order to define the return method call`TwoCoInlineCart.cart.setReturnMethod({url, type})`.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "AVLRNG",
       "currency": "USD",
       "products": [
           {
               "code": "74B8E17CC0"
           }
       ],
       "return-method": {
           "type": "redirect",
           "url": "http://my-test-site.com/return-url"
       }
   }
   ```

   \
   The above payload will generate the signature c05c712e7c14a23a425b799d39c7304bcc1715c6e903513da57f47fc164b93f9.
7. Use the TwoCoInlineCart.cart.setSignature('c05c712e7c14a23a425b799d39c7304bcc1715c6e903513da57f47fc164b93f9') method to set the signature.
8. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.setCurrency('USD');
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setReturnMethod({
    type: 'redirect',
    url : 'http://my-test-site.com/return-url'
  });
  TwoCoInlineCart.cart.setSignature('c05c712e7c14a23a425b799d39c7304bcc1715c6e903513da57f47fc164b93f9');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the return method in the InLine cart using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/agOoej>" %}


# Add a dynamic product to the InLine Cart

## Overview

Use the **Product** object to add a dynamic product to the InLine Cart by calling the click event handler.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.setup.setMode('DYNAMIC')`method in order to let the cart know you are using dynamic instead of catalog products.
4. In order to set currency use`TwoCoInlineCart.cart.setCurrency(currency-code)`.
5. Add your product to the cart by calling the`TwoCoInlineCart.products.add({name, quantity, price, options})` method.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "2COLRNC",
       "dynamic": "1",
       "currency": "USD",
       "products": [
           {
               "name"    : "A test dynamic product",
               "quantity": 1,
               "price"   : 20
           }
       ]
   }
   ```

   \
   The above payload will generate the signature 718e810fee34be2bf4b9d4582323aa37580c4011ef694116cca5b0bb7badd2f1.
7. Use the TwoCoInlineCart.cart.setSignature('718e810fee34be2bf4b9d4582323aa37580c4011ef694116cca5b0bb7badd2f1') method to set the signature. It is important that you employ TwoCoInlineCart.cart.removeAll() just before the TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) methods to remove previous products as the signature is based on the products' definition.
8. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.setup.setMode('DYNAMIC');
  TwoCoInlineCart.cart.setCurrency('USD');

  TwoCoInlineCart.products.add({
    name: 'A test dynamic product',
    quantity: 1,
    price: 20,
  });
  TwoCoInlineCart.cart.setSignature('718e810fee34be2bf4b9d4582323aa37580c4011ef694116cca5b0bb7badd2f1');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding the dynamic product to the InLine checkout using the above method, your cart should look like this.

{% embed url="<https://codepen.io/2checkout-documentation/pen/pXvBPB>" %}


# Checkout catalog products with custom prices using the signature in InLine Cart

## Overview

Use the **Product** object to set the custom price and add it to the InLine Cart by calling the click event handler. In order to use the product custom prices, you first need to [generate a signature](/shopping-carts/inline/use-cases/how-to-use-the-signature-with-the-inline-checkout) for the InLine Checkout. The generated signature is then used for checkout.

{% hint style="info" icon="lightbulb" %}

#### Recommended resources

Our InLine Checkout enables you to offer a seamless checkout experience for your clients. Download this solution brief to learn how!

<a href="https://www.2checkout.com/lp/2checkout_inline_cart.html" class="button primary" data-icon="book-open-lines">Learn more</a>
{% endhint %}

## Use case

1. Add an HTML link or button on your page, like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. In order to set the currency, use the TwoCoInlineCart.cart.setCurrency(currency-code) method.
4. Use the TwoCoInlineCart.products.add({code, quantity, options, price}) method or the TwoCoInlineCart.products.addMany(products) method to prepare your catalog product(s).
5. Use the "**price"** property within the **Product** object to set the custom price.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property **“signature“** which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
     "merchant": "AVLRNG",
     "currency": "USD",
     "products": [
       {
         "code": "74B8E17CC0",
         "custom-price": {
           "EUR": 8,
           "USD": 10
         }
       }
     ]
   }
   ```

   \
   The above payload will generate the signature **ffe213450a70cdf8e45617dde6331a766e184e02b450e1a537e2b52ef0e4d07e**.
7. Use the TwoCoInlineCart.cart.setSignature('ffe213450a70cdf8e45617dde6331a766e184e02b450e1a537e2b52ef0e4d07e') method to set the signature. It is important that you employ TwoCoInlineCart.cart.removeAll() just before the TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) methods to remove previous products as the signature is based on the products' definition.
8. Use the TwoCoInlineCart.cart.checkout() method to display the cart on your page.

## Sample Request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy bundle now!</a>
```

### JavaScript

```javascript
window.document
  .getElementById("buy-button")
  .addEventListener("click", function() {
    // Sign the
    TwoCoInlineCart.products.removeAll();
    TwoCoInlineCart.products.addMany([\
      {\
        code: "74B8E17CC0",\
        price: {\
          EUR: 8,\
          USD: 10\
        }\
      }\
    ]);
    TwoCoInlineCart.cart.setCurrency('USD');
    TwoCoInlineCart.cart.setSignature('ffe213450a70cdf8e45617dde6331a766e184e02b450e1a537e2b52ef0e4d07e');
    TwoCoInlineCart.cart.checkout();
  });
```

## Demo

{% embed url="<https://codepen.io/2checkout-documentation/pen/zYGJmPO>" %}


# Checkout with expiration using the signature in InLine Cart

## Overview

Use the **expiration** key to define the validity of a buy-link. The expiration needs to be signed before using the checkout in InLine Cart. In case the expiration is overdue, then the signature is considered invalid.

## Use case

1. Add an HTML link or button on your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. In order to set expiration, use the TwoCoInlineCart.cart.setExpiration(TIMESTAMP) method.
4. Use the TwoCoInlineCart.products.add({code, quantity, options, price}) method or the TwoCoInlineCart.products.addMany(products) method to prepare your product(s).
5. Below it is a signature token request payload for this example. A success response contains a JSON with the property **“signature“** which needs to be used to the next step to set the signature using the TwoCoInlineCart method.
6. Use the TwoCoInlineCart.cart.setExpiration(2524608000) method to set the expiration.<br>

   ```javascript
   {
     "merchant": "AVLRNG",
     "currency": "USD",
     "expiration": 2524608000,
     "products": [
       {
         "code": "74B8E17CC0"
       }
     ]
   }
   ```

   \
   In this example we used a timestamp for January 1st, 2050 as an example. The signature obtained is **16ef22d988d356356ee2437d26114370e29e6293fb4f2e8b58cefad31020950d**.
7. Use the TwoCoInlineCart.cart.setSignature('16ef22d988d356356ee2437d26114370e29e6293fb4f2e8b58cefad31020950d') method to set the signature. It is important that you employ the TwoCoInlineCart.cart.removeAll() method just before the TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) to clear the products, as the signature is based on the products' definition, or simply request a new signature.
8. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy bundle now!</a>
```

### JavaScript

```javascript
window.document
  .getElementById('buy-button')
  .addEventListener('click', function() {
  TwoCoInlineCart.cart.setExpiration(2524608000);
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setSignature('16ef22d988d356356ee2437d26114370e29e6293fb4f2e8b58cefad31020950d');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

{% embed url="<https://codepen.io/2checkout-documentation/pen/LYpbpOe>" %}


# How to use the signature with the Inline Checkout

## Overview

Some of the Inline Checkout parameters require a signature to prevent any interference in the ordering process. Optional parameters also require a signature if they are included in the Inline Checkout.&#x20;

## Demo sample

In order to attach the signature of signed parameters to the TwoCoInlineCart library, use the setSignature() method.

{% code title="example.js" %}

```javascript
TwoCoInlineCart.setup.setMerchant('MERCHANT_CODE');
...
TwoCoInlineCart.cart.setSignature('<signature>');
...
TwoCoInlineCart.cart.checkout();
```

{% endcode %}


# Set the cart language for InLine Cart

## Overview

Use the **Cart object** to set the language of the InLine checkout by calling `TwoCoInlineCart.cart.setLanguage(language-code)`.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to set the language use the`TwoCoInlineCart.cart.setLanguage('es')`method.
5. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setLanguage('es');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the cart language using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/zVGONz>" %}

## InLine Checkout languages

<table data-header-hidden="false" data-header-sticky><thead><tr><th>English</th><th>Native</th><th>2Checkout language codes</th></tr></thead><tbody><tr><td>Arabic</td><td>العربية</td><td>ar</td></tr><tr><td>Brazilian Portuguese</td><td>Português do Brasil</td><td>pt-br</td></tr><tr><td>Bulgarian</td><td>български език</td><td>bg</td></tr><tr><td>Chinese Mandarin Traditional</td><td>繁体中文</td><td>zy</td></tr><tr><td>Chinese Simplified(Cantonese)</td><td>中文</td><td>zh</td></tr><tr><td>Croatian</td><td>Hrvatski jezik</td><td>hr</td></tr><tr><td>Czech</td><td>Česky</td><td>cs</td></tr><tr><td>Danish</td><td>Dansk</td><td>da</td></tr><tr><td>Dutch</td><td>Dutch</td><td>nl</td></tr><tr><td>English</td><td>English</td><td>en</td></tr><tr><td>Finnish</td><td>Suomi</td><td>fi</td></tr><tr><td>French</td><td>Français</td><td>fr</td></tr><tr><td>German</td><td>Deutsch</td><td>de</td></tr><tr><td>Greek</td><td>Ελληνικά</td><td>el</td></tr><tr><td>Hebrew</td><td>עִבְרִית</td><td>he</td></tr><tr><td>Hindi</td><td>हिन्दी</td><td>hi</td></tr><tr><td>Hungarian</td><td>Magyar</td><td>hu</td></tr><tr><td>Italian</td><td>Italiano</td><td>it</td></tr><tr><td>Japanese</td><td>日本語</td><td>ja</td></tr><tr><td>Korean</td><td>한국어</td><td>ko</td></tr><tr><td>Norwegian</td><td>Norsk</td><td>no</td></tr><tr><td>Persian</td><td>فارسی</td><td>fa</td></tr><tr><td>Polish</td><td>Polski</td><td>pl</td></tr><tr><td>Portuguese</td><td>Português</td><td>pt</td></tr><tr><td>Romanian</td><td>Română</td><td>ro</td></tr><tr><td>Russian</td><td>Русский</td><td>ru</td></tr><tr><td>Serbian</td><td>Србија</td><td>sr</td></tr><tr><td>Slovak</td><td>Slovenčina</td><td>sk</td></tr><tr><td>Slovenian</td><td>Slovène</td><td>sl</td></tr><tr><td>Spanish</td><td>Español</td><td>es</td></tr><tr><td>Swedish</td><td>Svenska</td><td>sv</td></tr><tr><td>Thai</td><td>ไทย</td><td>th</td></tr><tr><td>Turkish</td><td>Türkçe</td><td>tr</td></tr></tbody></table>


# Add a digital dynamic product with a dynamic coupon

## Overview

Use the order promotions object to add a digital dynamic product with a dynamic coupon (for the PSP business model).

## Use case

1. Add an HTML link or button to your page like the one below.
2. Create a JavaScript click handler to execute the InLine Client desired methods.
3. Use the TwoCoInlineCart.setup.setMode('DYNAMIC') method to let the cart know you are using dynamic instead of catalog products.
4. Use the TwoCoInlineCart.cart.setCurrency(currency-code) method to set the currency.
5. Add your product to the cart by calling the TwoCoInlineCart.products.add({name, quantity, price, options}) method.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "250535979326",
       "dynamic": "1",
       "currency": "USD",
       "products": [
           {
               "name"    : "A test digital product",
               "quantity": 1,
               "price"   : 20,
               "type"    : 'digital'
           },
           {
               "name"    : "A test promotion",
               "quantity": 1,
               "price"   : 5,
               "type"    : 'coupon'
           }
       ]
   }
   ```
7. Use the TwoCoInlineCart.cart.setSignature('718e810fee34be2bf4b9d4582323aa37580c4011ef694116cca5b0bb7badd2f1') method to set the signature. It is important that you employ TwoCoInlineCart.cart.removeAll() just before TwoCoInlineCart.products.addMany(products) or TwoCoInlineCart.products.add(product) methods to remove previous products as the signature is based on the products' definition.
8. Use the TwoCoInlineCart.cart.checkout() method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### JavaScript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.setup.setMode('DYNAMIC');
  TwoCoInlineCart.cart.setCurrency('USD');

  TwoCoInlineCart.products.removeAll();
  TwoCoInlineCart.products.add({
      name: 'A test digital product',
      quantity: 1,
      price: 20,
      type: 'digital'
  });
  TwoCoInlineCart.products.add({
      name: 'A test promotion',
      quantity: 1,
      price: 5,
      type: 'coupon'
  });

  TwoCoInlineCart.cart.setSignature('5c07abeddff1f1e9521d7c726b7746a09049fcf24e6d1299577b1703d275089c');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After adding a digital dynamic product with a dynamic coupon using the above method, your cart should look like the demo.

{% embed url="<https://codepen.io/2checkout-documentation/pen/XWpeMbW>" %}


# Set the customer reference in the InLine Cart

## Overview

Use the Cart object to set customer reference to the InLine Cart by calling the `TwoCoInlineCart.cart.setCustomerReference(customer-reference)` method.

## Use case

1. Add an HTML link or button in your page like the one below.
2. Create a JavaScript click handler to execute the Inline Client desired methods.
3. Use the`TwoCoInlineCart.products.add({code, quantity, options})`method to prepare your catalog product.
4. In order to set currency use TwoCoInlineCart.cart.setCurrency(currency-code).
5. In order to set order external reference use`TwoCoInlineCart.cart.setCustomerReference(customer-reference)`method.
6. You can see below a signature token request payload for this example. A success response contains a JSON with the property “signature“ which needs to be used at the next step to set the signature using the TwoCoInlineCart method.<br>

   ```javascript
   {
       "merchant": "AVLRNG",
       "currency": "USD",
       "reference": {
           "customer": "test-customer-ref"
       },
       "products": [
           {
               "code": "74B8E17CC0"
           }
       ]
   }
   ```

   \
   The above payload will generate the signature b8c419f437a1b13065d191b8a0e124433d195d086a38448a67f126d01ffe7ad2.
7. Use the TwoCoInlineCart.cart.setSignature('b8c419f437a1b13065d191b8a0e124433d195d086a38448a67f126d01ffe7ad2') method to set the signature.
8. Use the`TwoCoInlineCart.cart.checkout()`method to show the cart on your page.

## Sample request

### HTML

```html
<a href="#" class="btn btn-success" id="buy-button">Buy now!</a>
```

### Javascript

```javascript
window.document.getElementById('buy-button').addEventListener('click', function() {
  TwoCoInlineCart.cart.setCurrency('USD');
  TwoCoInlineCart.products.add({
    code: "74B8E17CC0"
  });
  TwoCoInlineCart.cart.setSignature('b8c419f437a1b13065d191b8a0e124433d195d086a38448a67f126d01ffe7ad2');
  TwoCoInlineCart.cart.setCustomerReference('test-customer-ref');
  TwoCoInlineCart.cart.checkout();
});
```

## Demo

After setting the customer reference in the InLine cart using the above method, your cart should look like this:

{% embed url="<https://codepen.io/2checkout-documentation/pen/vqOjqp>" %}


# Default flows


# Cart interfaces

2Checkout provides a list of responsive templates meant for improving the customer experience during the checkout process.

The templates presented below are available in your Merchant Control Panel under *Setup → Interface templates → Template Gallery.*

## Omnicart Flow Checkout (default)

### Desktop Version

The Omnicart Flow Checkout is a B2B and B2C shopping cart template with add-on products for cross-sales, promotions, and AOV management, optimized for companies on a SaaS or renewal license model. We've recently updated its layout to encompass CRO key findings and best practices and, thus, help merchants using this template see a 5-10% increase in their conversion rates.

Among the key UX improvements, you can notice the reduced overall height and scroll on-page for the whole form by merging some sections and removing all redundant elements. We've also redesigned the Company/Person selector, changed the order of fields in the form, updated the Paypal payment method with optimized up-to-date flows, simplified texts, and payment method button selector, and added certification and trust logos immediately below the Place Order button on the Review Page.

<div data-with-frame="true"><img src="/files/fdf092b8ccc6eb3d7e9fb796e7a2386dfec6d983" alt=""></div>

### Mobile Version

<div data-with-frame="true"><img src="/files/fe2bdd08fb6c391ed763d0ddc32462cd97faefe3" alt=""></div>

<div data-with-frame="true"><img src="/files/e24cd36af0a1885b645b6b722b784efe0ea04760" alt=""></div>

<div data-with-frame="true"><img src="/files/531562b3f213ea882f7f65281884395bcdb82544" alt=""></div>

<div data-with-frame="true"><img src="/files/2f821ebc0da6983ba2f2a47dd33472f9a0ee6a2c" alt=""></div>

***

## Scale Express Checkout

### Desktop version

<div data-with-frame="true"><img src="/files/f0c0d3ec9524975937c4b792103ac792be5e92a5" alt=""></div>

<div data-with-frame="true"><img src="/files/a4c096a2c1529a8d699fb49ca8f524d5cdad887a" alt=""></div>

### Mobile Version

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

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

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

***

## Swift-Pay Checkout

### Desktop version

<div data-with-frame="true"><img src="/files/b81d85030d809d0012b0280a83b939197388a15e" alt=""></div>

<div data-with-frame="true"><img src="/files/87b90fd91efeeaa08b45d8764ab59d914cb4de97" alt=""></div>

### Mobile Version

![](/files/75ded8ffc94006ec9fcf341fce2f0903ab8e02fb) ![](/files/c3422b1cef12d7119b0e8b8a9260c7b0705e729c) ![](/files/3e3a4d379cce6372a90a088130081bc9089a56f9)

***

## Global Optimizer Checkout

### Desktop version

<div data-with-frame="true"><img src="/files/89935606c2a988494c026da7430df948e2bf2214" alt=""></div>

<div data-with-frame="true"><img src="/files/01adcecf1e8b32ac16629c1c1fd18a2028697e5f" alt=""></div>

<div data-with-frame="true"><img src="/files/c25d52d0c72c9a1382c82666024139efca4ac6aa" alt=""></div>

### Mobile Version

![](/files/849640413bd6540c0fdf4a33f00c4bd3a1fa85cd) ![](/files/791ec0b841060af3cf72fbcf8d65c31ed2dabd17) ![](/files/3d32281ee9e1521cd4608453c7a25f8dd40b4b28)

## Digital Horizontal Flow Checkout

### Desktop version

<div data-with-frame="true"><img src="/files/f608e998828a1e52c706bec91dbc549d2af41897" alt=""></div>

### Mobile Version

![](/files/ed031a56d24b6a8d70772d44be71d1aef5aa9323) ![](/files/7a3b7a1b3b609ce3a70f3e1dceab9027e7f7e32b) ![](/files/67b9f417c2415cbe090f94545a734ab12b0af479)

## Drop-down Monetize Checkout

### Desktop version

<div data-with-frame="true"><img src="/files/e0f8649e48c9958519242e571717af8f1ba15630" alt=""></div>

<div data-with-frame="true"><img src="/files/8b26bc55073a862658845ab6e24f1c4b3b501c43" alt=""></div>

### Mobile Version

![](/files/b257f999edc491153f29c93e47674863d1951096) ![](/files/dd9e8098f283852d135afa849bad649f25ea299d) ![](/files/94ba498c5f9e0180f5ab4d11169897ac353f377e) ![](/files/91713e1eb98360394a56db8c2ee967011d8d1708)

## CompactPlus Checkout

### Desktop version

<div data-with-frame="true"><img src="/files/2475c1c12671950055f384eab1964542418a4228" alt=""></div>

### Mobile Version

![](/files/37375d880cd21f33c0cc5318d09f3dcfd2352989) ![](/files/5d6067914cab3fa9aeb60c3e975812bb8e6bb524) ![](/files/9451a51d69e39105d7b3eff84a7ad4d0ba779eef) ![](/files/4aa8ac870a16c93def37949824a5296e78525d64)


# Professional Services customizations

## Overview

Our Professional Services team is always ready to do all the heavy lifting when it comes to customizing ordering interfaces (shopping carts). Contact 2Checkout directly to ask how the PS team can help you:

* Align the look-and-feel of your cart with the rest of your web properties
* Include tried and tested conversion optimization best practices into the design
* Create shopper experiences such as cross-sell and upsell to drive Average Order Value (AOV) up
* Build custom events that cut your abandonment rate

| ![](/files/502102db757eec2b4a2b1ac0a02e5244eb4681a1) | ![](/files/1fb1cf3da33a24f2bbcec06867b94157b93ea654) |
| ---------------------------------------------------- | ---------------------------------------------------- |
| ![](/files/2434c4268cea34e1c3a21cc16dfcb15c44cf6af0) | ![](/files/853c595169067dd82505700daf425002baae4ae7) |


# Custom store domain for the checkout process

## Overview

Use a custom domain to increase your conversion rate:

* Provide your shoppers with a seamless transition from your store or website to checkout.
* Give customers a sense of extra security during the checkout process by purchasing a store domain and SSL certificate.
* Enhance the shopping cart experience with your custom branding elements.

A custom store domain allows you to change the URL of your checkout pages from secure.2checkout.com to mystore.mycompany.com.

## Requirements

Contact [2Checkout](https://secure.avangate.com/cpanel/contact.php) for availability.

## Set up a store domain

To set up a custom store domain, follow these steps:

{% stepper %}
{% step %}

#### Contact 2Checkout to request a custom domain and choose a domain name

Contact our [Sales team](mailto:info@2checkout.com) to discuss the terms of your custom domain agreement. Don't forget to choose a domain name for your online store. Most common examples of online store web addresses are:

* <https://estore.\\[your\\_company\\_name].com>
* <https://shop.\\[your\\_company\\_name].com>
* <https://store.\\[your\\_company\\_name].com>
* <https://secure.\\[your\\_company\\_name].com>
  {% endstep %}

{% step %}

#### Provide your company details

Following your discussion with our Sales team, send the following company information to our [Merchant Support team](mailto:supportplus@2checkout.com). This information is used by 2Checkout to generate a Certificate Signing Request (CSR) on your behalf, as the certificate will be hosted on our server. Make sure that the data sent is correct, as it will be included in the CSR file. The information will be **validated** by the Certificate Authority before the SSL certificate is sold to you.

{% hint style="info" %}

* Certificates shall be purchased from Certificate Authorities trusted by your customer’s browsers. Such authorities are commonly referred to as “Public” Authorities. Some examples are listed [here](https://en.wikipedia.org/wiki/Certificate_authority#Providers/).
* Certificates shall contain the full hostname of the target, such as store.yourdomain.com. “[Wildcard” certificates](https://www.sslshopper.com/article-the-risks-in-wildcard-certificates.html) are not supported.
* Certificate validity should be for 1 year, as browsers have started to not trust certificates with a longer duration.
  {% endhint %}

| Information             | Details                                                                                                                                 |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| 2Checkout merchant code | 2Checkout generated merchant code. Can be found in Cpanel > [System settings](https://secure.avangate.com/cpanel/account_settings.php). |
| Company name            | Your company name.                                                                                                                      |
| Address                 | The address of your company.                                                                                                            |
| City                    | City in which your company is located.                                                                                                  |
| Zip code                | Zip code corresponding to the area in which your company is located.                                                                    |
| Country                 | Country in which your company is located.                                                                                               |
| State                   | State in which your company is located. Use N/A if it doesn’t apply.                                                                    |
| **Desired URL**         | Your desired custom store domain name. E.q.: <https://secure.myshop.com/>                                                               |
| {% endstep %}           |                                                                                                                                         |

{% step %}

#### 2Checkout generates private and public keys and the CSR

2Checkout uses the information mentioned above to generate the private and public keys as well as the Certificate Signing Request (CSR) necessary to acquire a Secure Sockets Layer (SSL) Certificate from a Certificate Authority. The CSR file generated by 2Checkout will be e-mailed to you by our Vendor Support team, together with instructions on your next steps.

SSL certificates act as a method of securing data transmissions, including sensitive details such as payment information.\
\
While the public key and CSR are shared with you, the private key will be stored only inside 2Checkout’s secure environment, ensuring that SSL security cannot be compromised. 2Checkout ongoing investment in security is reflected by the **PCI DSS Certification** received yearly.

{% hint style="info" %}
2Checkout does not accept and will not use SSL certificates purchased based on private/public keys and CSRs you generate yourself or which have been previously used. Custom domains and associated SSL certificates can be used only if 2Checkout is the sole keeper of private keys.
{% endhint %}
{% endstep %}

{% step %}

#### Purchase the SSL certificate using the 2Checkout generated CSR

Use the CSR file provided by 2Checkout to acquire an SSL certificate from your preferred CA. If at any time during the purchase process you’re asked about the server platform type, choose **Apache**.

When purchasing an SSL certificate you are responsible for:

* Deciding which Certificate Authority to buy it from. We recommend one of the following providers:
  * [Symantec](https://www.websecurity.symantec.com/ssl-certificate)
  * [Thawte](https://www.thawte.com/)
  * [Verisign](https://www.verisign.com/)
  * [GeoTrust](https://www.geotrust.com/)
  * [Digicert](https://www.digicert.com/)
  * [Entrust](https://www.entrustdatacard.com/products/categories/ssl-certificates/)
  * [GoDaddy](https://uk.godaddy.com/)
* Choosing the type of SSL certificate:
  * **Extended Validation (EV) SSL Certificate** – complex and extensive vetting of your company per the EV Guidelines. Provides visual feedback to browser users (green address bar for valid EV SSL certificates).
  * **Organization Validation (OV) SSL Certificate** – CA verifies that your company is a legitimate business and that you have the right to use the domain name.
  * **Domain Validation (DV) SSL Certificate** – only name and contact information are checked to confirm the right to use the domain name.
    {% endstep %}

{% step %}

#### Send the SSL certificate to 2Checkout

Send the SSL certificate by email to [supportplus@2checkout.com](mailto:supportplus@avangate.com). 2Checkout will finalize the setup of the custom domain and install the certificate.
{% endstep %}

{% step %}

#### Update the DNS and buy-links

Update your DNS with a CNAME (Canonical Name) record (host alias) for the chosen custom domain name so that YourSHOP.YourCompany.com points to YourCompany.2checkout.com. Once the DNS update is propagated, traffic from YourSHOP.YourCompany.com will be guided to YourCompany.2checkout.com.

You’ll need to confirm the availability of YourCompany.2checkout.com with 2Checkout before updating your DNS records.

Once our Vendor Support team confirms the installation of your custom domain, you can create new buy links from the [Generate links](https://secure.avangate.com/cpanel/integration.php) area. The new links generated from our interface will contain your custom domain name. Your older links having the format secure.2checkout.com remain functional, so both link types can be used for the ordering process.
{% endstep %}
{% endstepper %}


# Minimize required checkout data

## Overview

Use this feature to streamline the shopping cart by minimizing data entry and providing an optimized ordering experience for customers.

## Availability

Available by default to 2Monetize accounts.

## Requirements

This feature requires the use of the **SHORT\_FORM** parameter in buy-links generated in the Merchant Control Panel.

{% hint style="info" %}
The **SHORT\_FORM** parameter is case sensitive.
{% endhint %}

## Purchase flow support

This feature supports the following purchase flows:

* Checkout with cart functionalities
* One page checkout with review
* One page checkout without review
* Add to shopping cart
* Checkout page
* Product page
* Express Payments Checkout
* Trial links

## Generate buy-links with the SHORT\_FORM parameter

1. Log in to your [2Checkout Merchant Control Panel](https://secure.2checkout.com/cpanel) account.
2. Navigate to the [Generate Links area](https://secure.2checkout.com/cpanel/integration.php).
3. Check the checkbox for the **Compact shopping cart fields** option when generating your **buy-link** to minimize the number of mandatory cart fields shoppers need to fill in during the purchase process. This action will automatically add the **SHORT\_FORM=1** parameter to the generated **buy-links**.

## Create buy-links with the SHORT\_FORM parameter manually

You can also add the **SHORT\_FORM=1** parameter manually to **buy-links** for shopping carts after you generate them.

When the feature is active for your account, and SHORT\_FORM=1 is used in buy-links, the name, email, ZIP code, and country pair become the only required details of the billing address.

{% hint style="info" %}
Using the SHORT\_FORM=1 parameter without the feature being enabled for your account will result in shoppers following the classic purchase flow, where all billing address data is mandatory.
{% endhint %}

## Workflow

Customers accessing buy-links that include the SHORT\_FORM parameter after the feature has been enabled for your account will need to:

1. Fill in only the country and ZIP code (if it applies), necessary for VAT/tax calculation. The name, email, ZIP code, and the country are the only remaining address elements still mandatory.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>Shoppers in the U.S., Puerto Rico, and Marshal Islands are required to provide a valid ZIP code for their location. The same requirement does not apply to shoppers worldwide.</p></div>
2. Not fill in the address information as the field is no longer mandatory. In fact, the address field doesn't need to be included in the cart design.

| Billing address field | Mandatory | Comment                                                                                                                                                                         |
| --------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| First name            | Yes       | Becomes part of the Name field                                                                                                                                                  |
| Last name             | Yes       | Becomes part of the Name field.                                                                                                                                                 |
| Address               | No        | -                                                                                                                                                                               |
| City                  | Yes       | Used for tax calculation. Shoppers from the U.S., Puerto Rico, Marshal Islands, Brazil, and Turkey are required to provide a valid city code for their location.                |
| Zip or postal code    | Yes\*     | Used for tax calculation. Shoppers from the U.S., Puerto Rico, Marshal Islands, and Brazil are required to provide a valid ZIP code for their location.                         |
| Country               | Yes       | Used for tax calculation.                                                                                                                                                       |
| State or province     | Yes\*     | Used for tax calculation. Shoppers from the US, France, Romania, Brazil, Canada, India, and Turkey are required to provide their state or province during the checkout process. |
| Email                 | Yes       | -                                                                                                                                                                               |
| Confirm email         | No        | -                                                                                                                                                                               |
| VAT                   | Yes       | Used for tax calculation. Shoppers from Turkey, India, and Serbia are required to provide a valid VAT id during the checkout process.                                           |
| Company               | Yes       | Used for tax calculation. Shoppers from Turkey and India are required to provide a valid company id.                                                                            |

<div data-with-frame="true"><img src="/files/0833c9a836b95d9ac5f91270ddf00ce8d9a42114" alt=""></div>

### ZIP validation

2Checkout performs checks designed to ensure that the ZIP code provided by customers is valid.

### Tax calculation

Taxes are calculated after a valid ZIP code is provided, and if necessary, added to the value of the products in the cart.

## FAQs

<details>

<summary>Is there any information included automatically for addresses?</summary>

A dash "-" is used for the address.

</details>

<details>

<summary>Does it work for trials?</summary>

Yes. SHORT\_FORM is supported in scenarios in which your customers access trials for which they need to provide billing details and payment information.

</details>

<details>

<summary>Is it included in hash validation?</summary>

No. SHORT\_FORM is not included when creating the hash for buy-links.

</details>


# Additional checkout fields

## Overview

Define additional checkout fields to be displayed in the shopping cart, helping you collect extra information from your shoppers. You can configure custom fields to be displayed at both product and order levels.

## Availability

This functionality is available for all 2Checkout accounts.

## How do I receive additional checkout fields?

Customer-specific information collected via custom additional fields is sent in several ways:

* in the "Order notification email" - sent by the 2Checkout system, information filled by your customers will be sent along with all the order information in the Additional Information section.
* in the "IPN (Instant Payment Notification)" - if this service is enabled, the additional fields are included in the HTTP POST sent by the 2Checkout system.

Additional checkout fields are not included by default in the IPN HTTP POST. To include these fields, as well as other additional order information you have to check CUSTOM\_FIELDS\[] on the [IPN Settings](https://secure.2checkout.com/cpanel/ipn_settings.php) page.

The following IPN variables are available:

### Additional checkout fields

| Field                 | Description                                            |
| --------------------- | ------------------------------------------------------ |
| IPN\_CUSTOM\_TEXT\[]  | Array with all the custom fields texts set per order.  |
| IPN\_CUSTOM\_VALUE\[] | Array with all client input corresponding to the text. |
| **Example**           |                                                        |
| IPN\_CUSTOM\_TEXT\[]  | 0 - Where did you first hear about us?                 |
|                       | 1 - Would you like to receive regular updates?         |
| IPN\_CUSTOM\_VALUE\[] | 0 - From a friend                                      |
|                       | 1 - CHECKED                                            |

### Product additional checkout fields (dynamic fields)

**Product name**: 123456\
**Product ID in the 2Checkout system**: 123456

| Field                         | Description                                             |
| ----------------------------- | ------------------------------------------------------- |
| IPN\_CUSTOM\_123456\_TEXT\[]  | array with all the custom fields texts set per product. |
| IPN\_CUSTOM\_123456\_VALUE\[] | array with all client input corresponding for the text. |
| **Example**                   |                                                         |
| IPN\_CUSTOM\_123456\_TEXT\[]  | 0 - Product code                                        |
| IPN\_CUSTOM\_123456\_VALUE\[] | 0 - 123456                                              |

Additional information can be found in the [Merchant Control Panel](https://secure.2checkout.com/cpanel/) in these sections:

* [IPN Settings](https://secure.2checkout.com/cpanel/ipn_settings.php)
* [Additional fields](https://secure.2checkout.com/cpanel/additional_fields.php)

### Create custom fields

1. Go to [**Setup** ](https://secure.2checkout.com/cpanel/order_settings.php)→[ **Ordering options**](https://secure.2checkout.com/cpanel/order_settings.php)**.**
2. Click [**Manage additional order fields**](https://secure.2checkout.com/cpanel/additional_fields.php)**.**
3. Use the **Add new field** section to define each new field. Enter the **Field identifier**. Use unique identifiers for all your fields. **Note**: This field accepts only alpha-numeric characters. If you leave this field empty, 2Checkout generates a random value as an identifier.
4. Enter the **Field text** (the name of the field).
5. Set the **Field type**. There are four available types.
   * **Textbox** allows shoppers to write what they want in the field. You can use it to collect feedback or opinions on the shopping experience, for instance.
   * **Checkbox** allows shoppers to select various options. You can use it for a quick survey.
   * **Listbox** displays a drop-down list your shoppers can select items from.
   * **Hidden** helps you define custom URL parameters for tracking purposes. For details on this option, read our [dedicated article](https://verifone.cloud/docs/2checkout/Documentation/07Commerce/Order-tracking/Track-sales-with-custom-parameters/).
6. Use the **Apply to** drop-down to choose whether the field should apply at the product or order level.&#x20;
7. Use the **Validation rule** field to specify the regular expression to validate the field values. **Note:** Not supported on Inline Checkout. The field can be set, but it will be ignored during the checkout process.
8. Click **Create field** to save the new field.

<div data-with-frame="true"><img src="/files/9d9b0fb1004ee0e4b1a88d9c05d1b142da9701c6" alt=""></div>

## Set additional checkout fields for products

### Requirement

Follow the steps in the **Create custom fields** section to create new fields and apply them at the **Product** level. Then, follow the steps below to assign the field to a product.

1. Go to [**Setup** ](https://secure.2checkout.com/cpanel/products.php)→[ **Products**](https://secure.2checkout.com/cpanel/products.php).
2. Click **Edit** on the product you want to assign the field to.
3. Go to the **Information** tab and scroll to the bottom of the screen. You'll find the previously defined additional fields in the **Order additional fields** section. All new fields are disabled by default.
4. Check the **Enabled** option on the **Order page** column corresponding to the field you want to use. Check the **Required** checkbox if you want the field to be mandatory during the checkout process.
5. Click **Save**.

<div data-with-frame="true"><img src="/files/90b8415392eb4d9c440eb4110b5f78e15a79b185" alt=""></div>

## Set additional checkout fields for orders

### Requirement

Follow the steps in the **Additional fields settings** page in your Merchant Control Panel to create new fields and apply them at the **Order** level. Then, follow the steps below to assign the field to order.

1. Go to [**Setup**](https://secure.2checkout.com/cpanel/products.php) **→** [**Ordering options**](https://secure.2checkout.com/cpanel/order_settings.php).
2. Scroll down to the **Additional order fields section** and got to the [Click here to create and manage](https://secure.2checkout.com/cpanel/additional_fields.php) link.
3. To create a new additional field, follow these steps:
   * Go to the **Add new field** section
   * Fill in all the fields displayed
   * Click **Create field** to save the new field.
4. To edit an existing additional field, you need to:
   * Go to *Dashboard → Setup → Ordering options → Additional fields settings*
   * Scroll below the Additional fields settings section
   * Choose the field you want to modify and update its fields.
   * Scroll to the bottom of the page and click **Update fields** to save your new settings.
5. To delete an additional field, leave the field empty and click on the **Update fields** button. Those fields assigned to products will be deleted as well.
6. To activate an existing additional field, see the steps below:
   * Go to *Dashboard → Setup → Ordering options → General*
   * Scroll down below the **Additional order fields** section.
   * In the **list of additional fields**, check the checkbox next to the field you want to use.&#x20;
   * Check the **Required** checkbox if you want the field to be mandatory during the checkout process.
   * Click **Save Settings** at the bottom of the page.

![](/files/0cbcb6f10bd83b900f134467d5f875a8d7477143)

### Additional field types

* **Textbox** - a text field that allows the customer to enter text information about the additional field.
* **Checkbox** - a small checkable box that allows the customer to enable or disable an element. It can be checked or left empty.
* **Listbox** - it displays a scroll-down list of elements that allow the customer to select one or more items from the list contained within the static text box.
* **Hidden** - it cannot be seen or modified by customers.

## Pre-fill additional information fields

You can pre-fill the additional information fields by passing the \&ADDITIONAL parameter in the URL.

The parameter would look like this: \&ADDITIONAL\_(insert additional field identifier here)\[product id]=(insert value here).

For example, if you want to pre-fill the additional information field with 'test.com', your checkout buy-link would look like this:

```
&ADDITIONAL_92E8A6[4674306]=test.com
```

Where ADDITIONAL\_92E8A6 is the URL parameter as shown in your Merchant Control Panel.

<div data-with-frame="true"><img src="/files/5b484d075d6b5edd00cdbb6428dfa78b01780539" alt=""></div>




---

[Next Page](/llms-full.txt/1)

