> For the complete documentation index, see [llms.txt](https://docs.2checkout.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.2checkout.com/shopping-carts/convertplus/trial-and-regular-products-in-the-same-cart.md).

# Trial and regular products in the same cart

Use ConvertPlus to sell a trial product and one or more regular products in a single checkout. The shopper pays for the regular products immediately, while the trial product starts at the trial price, free or reduced, and converts to full price when the trial ends.

{% hint style="info" %}
Previously, a ConvertPlus link supported either trial or regular products, but not both. See [ConvertPlus trials flow](/shopping-carts/convertplus/convertplus-trials-flow.md) for links with a single trial product.
{% endhint %}

## Requirements and limitations

| Rule               | Details                                                                                                                                                                            |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Products           | Catalog products only. Dynamic products, created on the fly with a custom name and price, are not supported together with a trial.                                                 |
| Purchase type      | New acquisitions only.                                                                                                                                                             |
| Number of products | Maximum **one** trial product and any number of regular products. A link with two trial products cannot be created.                                                                |
| Custom price       | Not supported anywhere in a cart that contains a trial, not even on a different product than the trial one.                                                                        |
| Currency           | The whole cart uses a single currency, set with the `currency` parameter.                                                                                                          |
| Payment methods    | Credit/debit cards, PayPal, and Direct Debit. These are the same methods available for trial-only carts. The restriction applies to the whole cart, not only to the trial product. |
| Checkout template  | Hosted ConvertPlus templates only. Use the classic ConvertPlus checkout link (`checkout/buy`).                                                                                     |
| Signature          | Required. See [Sign the link](#sign-the-link).                                                                                                                                     |

## Build the link

Pass all products in the `prod` parameter, separated by a semicolon (`;`). Add `tprices` and `tperiod` to make the last product into a trial.

| Parameter   | Description                                                                                                                                   |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `prod`      | Product codes separated by `;`. A cart can contain any number of products. For example, `prod=PRODUCT_A;PRODUCT_B`.                           |
| `qty`       | Quantity of each product, separated by `;` in the same order as `prod`. For example, `qty=1;1`. The trial product's quantity is limited to 1. |
| `opt`       | Optional. Pricing options, such as color or plan, for each product in the same order as `prod`. Not applicable to the trial product.          |
| `price`     | Custom price. Not supported in a cart that contains a trial product.                                                                          |
| `currency`  | The cart currency. Required when you set `tprices`.                                                                                           |
| `tprices`   | The trial price, per currency. For example, `USD:0,EUR:0` for a free trial, or `USD:10,EUR:9` for a paid trial.                               |
| `tperiod`   | The trial length in days, from 7 to 99999999. For example, `7`, `30`, or `57`.                                                                |
| `signature` | The link signature. Required, see [Sign the link](#sign-the-link).                                                                            |

{% hint style="warning" %}
`tprices` and `tperiod` apply to the **last** product in the `prod` list. Every other product stays a regular product at its catalog price. The order of products matters: the trial product is always the last one listed.
{% endhint %}

`qty`, `opt`, and `price` are positional: each value matches the product at the same position in `prod`. Adding a trial does not change this.

### Use the right separator

Separate products with a semicolon (`;`), not a comma. With a comma, the whole string is read as one invalid product code instead of several products.

|         | Link fragment                      |
| ------- | ---------------------------------- |
| Correct | `prod=PRODUCT_A;PRODUCT_B&qty=1;1` |
| Wrong   | `prod=PRODUCT_A,PRODUCT_B&qty=1,1` |

#### Example

This link sells `PRODUCT_A` as a regular product and `PRODUCT_B` with a 30-day free trial:

```
https://store.checkout.com/checkout/buy?merchant=MERCHANT_CODE&tpl=default&prod=PRODUCT_A;PRODUCT_B&qty=1;1&currency=USD&tprices=USD:0&tperiod=30&signature=SIGNATURE
```

At checkout, the shopper pays the price of `PRODUCT_A` today. `PRODUCT_B` costs `0.00` today and is charged at its catalog price when the 30-day trial ends.

#### How the trial product is identified

A product is the trial product if it has its own `tprices` or `tperiod` value. Having both is not required to identify it, but `tperiod` is mandatory for the trial product.

The trial is matched to the position among the actual products in the list. A trailing `;` or an empty entry does not shift the trial to another product. If your link generator adds one `tprices` or `tperiod` entry per product, leaving the entries of regular products empty, the link still works.

#### Pricing options

Pricing options (`opt`) work the same way as in new-acquisition and upgrade links. They do not apply to the trial product. If a value falls on the trial product's position, the last one in the list, it is discarded and no error is returned.

#### Coupons

Standard coupon rules apply:

* Discounts on regular products follow the promotion settings in the Control Panel.
* Discounts on the trial product apply only after the trial converts to a regular product.

### Sign the link

A signature is always required for links with a trial, because the link always includes `prod`, `currency`, `tprices`, and `tperiod`. There is no merchant setting to turn this off for trial links. Generate the signature the same way as for other ConvertPlus buy links.

{% hint style="danger" %}
If the signature is missing or wrong, you will not get a "signature invalid" error. The signed parameters, including `prod`, are silently removed from the request, and checkout fails with a generic error such as "Invalid parameter". If a link fails this way, check the signature first.
{% endhint %}

## What the shopper sees

### Cart

Mixed cart with a free trial and a regular product, with automatic renewal:

<div data-with-frame="true"><figure><img src="https://335946412-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAhgiqd5u0cqvfGiCyB3b%2Fuploads%2Ff4AYUWxw7jYdMVtT896v%2FCart%20details.png?alt=media&amp;token=2399c8fa-3334-4783-be8b-9c72cacaf693" alt=""><figcaption></figcaption></figure></div>

Mixed cart with a paid trial and a regular product, with manual renewal:

<div data-with-frame="true"><figure><img src="https://335946412-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAhgiqd5u0cqvfGiCyB3b%2Fuploads%2FLBLYVA9JfY57fTRI4G4Z%2FCart%20details%20(1).png?alt=media&amp;token=05824bae-4330-496d-98d3-9e0346c2b092" alt=""><figcaption></figcaption></figure></div>

* **Trial badge.** The trial period is shown as a rounded green badge next to the product name. A free trial reads "7-day free trial" and a paid trial reads "7-day trial".
* **Price column.** Shows the amount due now for each product: `0.00` or the trial price for the trial product.
* **Trial terms.** A line under the product name explains what happens next. For example, *Trial ends: Sep 29, 2026, then $14.28/month (incl. VAT)*. The text depends on the subscription type and renewal settings. See [Renewal messages](#renewal-messages).
* **Totals.** The block is labeled **Total due today** and shows only the amount charged immediately, with a VAT breakdown line.
* **Call to action.** The button is the same as on a regular checkout, for example **Place order** or **Continue to review**, depending on the order flow.

### Change the cart

Products that are locked, such as the trial product, cannot be changed in the cart, with one exception:

* The shopper can **remove the trial product** using the delete icon when the cart has other products. This lets them keep the regular products and skip the trial.
* If the trial is the only product in the cart, it cannot be removed.
* The quantity of the trial product cannot be changed or replaced.

## After the purchase

* Regular products are charged immediately. The trial product starts at the trial price, `0.00` or reduced, and moves to full price automatically after the trial period. The checkout shows a single combined total, not one per product.
* The trial product converts to a paid product automatically/manually when the trial ends. The shopper can opt out of the automatic conversion from myAccount. Both behaviors are the same as for trial-only orders.
* Trial and regular products are independent after purchase. Each has its own subscription and renewal cycle, with no shared billing date, even though they were bought in the same cart. Cancelling or refunding one does not affect the billing or refund window of the other.

## Troubleshooting

| Issue                                                                  | Cause                                                                                                                                                           |
| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Checkout fails with "Invalid parameter"                                | The signature is missing or wrong, so `prod` was removed from the request. Regenerate the signature. Also check that products are separated by `;` and not `,`. |
| Error "Trial products can be only 1."                                  | The link sets a trial for more than one product. Only one trial product is allowed.                                                                             |
| Error "Trial products cannot be combined with custom priced products." | The cart has a trial and any product with a custom `price`, even a different one. Remove `price` and use catalog prices.                                        |
| A regular product does not get the pricing option I set                | The option was placed on the trial product's position and was discarded. Check the order of values in `opt`.                                                    |
| The wrong product has the trial                                        | `tprices` and `tperiod` apply to the last product in `prod`. Reorder the list.                                                                                  |
| Some payment methods are missing                                       | Carts with a trial only accept credit/debit cards, PayPal, and Direct Debit.                                                                                    |

### Related articles

{% content-ref url="/spaces/Ahgiqd5u0cqvfGiCyB3b/pages/0ac6cc90c7d48fad599d8b02598a0be1fbec91e8" %}
[ConvertPlus trials flow](/shopping-carts/convertplus/convertplus-trials-flow.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.2checkout.com/shopping-carts/convertplus/trial-and-regular-products-in-the-same-cart.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
