> ## Documentation Index
> Fetch the complete documentation index at: https://developers.criteo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Order Confirmation Page

# Definition

The order confirmation page is **the page where the user is taken right after completing a purchase**.

***

# Parameters

## `event-type`

**Value**: `trackTransaction`

**Description**: Indicates to the API that this is an order confirmation event.

**Required**: Yes

***

## `page-id`

**Description**: An identifier that tells Criteo which placements (if any) to return for the ad request. Placements are instantiated by your Technical Account Manager depending on your desired ad configuration. Below are the standard page-ids for this page type:

* **In Americas**: Typically follows the structure `[event-type]_API_[environment]`, e.g., `trackTransaction_API_desktop`, `trackTransaction_API_mobile`, `trackTransaction_API_iOS`, `trackTransaction_API_android`.
* **In EMEA**: Typically follows the structure `[event-type]Api[environment]`, e.g., `trackTransactionApiDesktop`, `trackTransactionApiMobile`, `trackTransactionApiAios`, `trackTransactionApiAa`.

**Required**: Yes

***

## `item`

**Description**: The list of SKUs ordered. Must match the parameter ID in the feed. Multiple items should be separated by a pipe `|` or `%7C` (URL encoded). Include all items in the order, regardless of whether they are sponsored or not.

**Examples**:

* `123|456|789`
* `123%7C456%7C789`

**Required**: Yes

***

## `price`

**Description**: The list of prices in the same order as the items. Prices should be separated by a pipe `|` or `%7C` (URL encoded). These need to be the unitary prices (price of an individual item). Criteo will multiply these prices by the `quantity` parameter to compute the total order value.

**Examples**:

* `29.99|15.49|9.99`
* `29.99%7C15.49%7C9.99`

**Required**: Yes

***

## `quantity`

**Description**: The pipe-separated quantities of each SKU within the user’s order.

**Examples**:

* `4|1|2`
* `4%7C1%7C2`

**Required**: Yes

***

## `transaction-id`

**Description**: The unique order ID of the purchase.

**Example**: `1841xva0ha8`

**Required**: Yes

***

## `currency`

**Description**: Currency code of the transaction. Only needed if the purchase can be done in different currencies; otherwise, it will fall back to the retailer's standard currency. Should be a valid [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 3-letter currency code.

**Examples:**:

* `USD`
* `EUR`

**Required**: Mandatory only if multiple currencies are allowed

***

# Reporting Discounts in the OCP API Call

When a promotion applies a discount (e.g., “*buy 1 get 1 for 40% off*”), the `unit_price` should reflect the average price shared across the paid items.

### Example

* A customer buys 2 items, normally priced at \$24 each.
* One of them is effectively discounted under the promotion “*buy 1 get 1 for 40% off*”.
* To calculate the `unit_price`, we do: (24 + (0.6 × 24)) / 2 = 19.20
* Then the retailer reports `unit_price` as `19.20` in the OCP API call.

***

# Sample Calls

<Info>
  The header values in the sample calls are illustrative. Make sure to replace them with the appropriate values for your implementation.
</Info>

***

## AMER

```bash theme={null}
curl -X GET "https://d.us.criteo.com/delivery/retailmedia" \
--data-urlencode "criteo-partner-id=12345" \
--data-urlencode "environment=d" \
--data-urlencode "retailer-visitor-id=a1b2c3d4e5" \
--data-urlencode "customer-id=123456789" \
--data-urlencode "page-id=trackTransaction_API_desktop" \
--data-urlencode "event-type=trackTransaction" \
--data-urlencode "transaction-id=1841xva0ha8" \
--data-urlencode "item=123|456|789" \
--data-urlencode "price=29.99|15.49|9.99" \
--data-urlencode "quantity=4|1|2" \
--data-urlencode "currency=USD" \
-H "Referer: https://www.criteo.com" \
-H "X-Forwarded-For: 123.456.789.012" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
```

***

## EMEA

```bash theme={null}
curl -X GET "https://d.eu.criteo.com/delivery/retailmedia" \
--data-urlencode "criteo-partner-id=12345" \
--data-urlencode "environment=d" \
--data-urlencode "retailer-visitor-id=a1b2c3d4e5" \
--data-urlencode "customer-id=123456789" \
--data-urlencode "page-id=trackTransactionApiAios" \
--data-urlencode "event-type=trackTransaction" \
--data-urlencode "transaction-id=1841xva0ha8" \
--data-urlencode "item=123|456|789" \
--data-urlencode "price=29.99|15.49|9.99" \
--data-urlencode "quantity=4|1|2" \
--data-urlencode "currency=EUR" \
-H "Referer: https://www.criteo.com" \
-H "X-Forwarded-For: 123.456.789.012" \
-H "User-Agent: app_ios 1.2.3"
```

***

# Order Cancellations/Modifications

<Warning>
  Cancellations and modifications must be reported **within 14 days of the original transaction**. Criteo's order deduplication logic uses this window to match events to the original order. A cancellation or modification submitted after 14 days will be treated as a new transaction, causing double-counting in reporting.
</Warning>

To ensure accurate tracking, `trackTransaction` calls must be re-fired under the following scenarios:

### Cancellations

* When an order is canceled, initiate a new `trackTransaction` call using the same `transaction-id` as the original order.
* The API call should include all products from the original order, keeping the original prices but **setting the quantity to`0`** .

### Modifications

* When a user modifies their order (e.g., changes the quantity or adds/removes products), a new `trackTransaction` call must be triggered with the same `transaction-id` as the original order.
* The following product details must be managed within the new call:
  * **Unchanged products**: Include these products in the new API call with their *original* quantity and price.
  * **Modified products**: Include these products with *updated* quantities and/or prices.
  * **New products**: Add these products to the API call with their respective prices/quantities.
  * **Deleted products**: Include these products in the new API call with their quantities set to `0`

***

<br />

## What's next

* [Organic add-to-cart events](/retailer-integration/docs/organic-add-to-cart-events)
* [Filters](/retailer-integration/docs/filtering)
